cxdbextlookupcombobox.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 969 行 · 第 1/3 页
PAS
969 行
type
TcxCustomGridTableOptionsBehaviorAccess = class(TcxCustomGridTableOptionsBehavior);
TcxCustomGridTableOptionsViewAccess = class(TcxCustomGridTableOptionsView);
{ TcxExtLookupGrid }
procedure TcxExtLookupGrid.DoCancelMode;
begin
FRowPressed := False;
inherited;
end;
procedure TcxExtLookupGrid.DoCloseUp(AAccept: Boolean);
begin
if AAccept then
View.DataController.SyncSelected(True);
if Assigned(FOnCloseUp) then FOnCloseUp(Self, AAccept);
end;
function TcxExtLookupGrid.IsDataRow(AHitTest: TcxCustomGridHitTest): Boolean;
begin
Result := (AHitTest is TcxGridRecordHitTest) and
TcxGridRecordHitTest(AHitTest).GridRecord.IsData;
end;
function TcxExtLookupGrid.GetView: TcxCustomGridTableView;
begin
Result := Levels[0].GridView as TcxCustomGridTableView;
end;
procedure TcxExtLookupGrid.ViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Assigned(FPrevOnKeyDown) then
FPrevOnKeyDown(Self, Key, Shift);
if (View = nil) then Exit;
case Key of
VK_RETURN:
if not Editable or not View.OptionsData.Editing or (ssCtrl in Shift) then
begin
if View.DataController.IsEditing then
View.DataController.Post;
DoCloseUp(View.DataController.FocusedRowIndex <> -1);
end;
VK_ESCAPE:
if Editable and not View.DataController.IsEditing then
DoCloseUp(False);
end;
end;
procedure TcxExtLookupGrid.ViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
AHitTest: TcxCustomGridHitTest;
begin
if Assigned(FPrevOnMouseDown) then
FPrevOnMouseDown(Sender, Button, Shift, X, Y);
AHitTest := View.ViewInfo.GetHitTest(X, Y);
if (Button = mbLeft) and IsDataRow(AHitTest) then
begin
if Editable then
begin
if ssDouble in Shift then
DoCloseUp(True);
end
else
FRowPressed := True;
end;
end;
procedure TcxExtLookupGrid.ViewMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
AHitTest: TcxCustomGridHitTest;
begin
if Assigned(FPrevOnMouseMove) then
FPrevOnMouseMove(Sender, Shift, X, Y);
if not MouseCapture and PopupMouseMoveLocked then
begin
PopupMouseMoveLocked := False;
Exit;
end;
// Hot Track
if (View = nil) or Editable then Exit;
AHitTest := View.ViewInfo.GetHitTest(X, Y);
if IsDataRow(AHitTest) and ((FMousePos.X <> X) or (FMousePos.Y <> Y)) then
begin
FMousePos.X := X;
FMousePos.Y := Y;
TcxGridRecordHitTest(AHitTest).GridRecord.Focused := True;
end;
end;
procedure TcxExtLookupGrid.ViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
AHitTest: TcxCustomGridHitTest;
begin
if Assigned(FPrevOnMouseUp) then
FPrevOnMouseUp(Sender, Button, Shift, X, Y);
AHitTest := View.ViewInfo.GetHitTest(X, Y);
if (Button = mbLeft) and FRowPressed then
DoCloseUp(IsDataRow(AHitTest));
FRowPressed := False;
end;
{ TcxExtLookupComboBoxProperties }
constructor TcxExtLookupComboBoxProperties.Create(AOwner: TPersistent);
begin
inherited Create(AOwner);
FAutoSearchOnPopup := True;
end;
destructor TcxExtLookupComboBoxProperties.Destroy;
begin
FDestroying := True;
ListFieldItem := nil;
View := nil;
FreeAndNil(FGrid);
inherited Destroy;
end;
procedure TcxExtLookupComboBoxProperties.Assign(Source: TPersistent);
begin
if Source is TcxExtLookupComboBoxProperties then
begin
BeginUpdate;
try
AutoSearchOnPopup := TcxExtLookupComboBoxProperties(Source).AutoSearchOnPopup;
FocusPopup := TcxExtLookupComboBoxProperties(Source).FocusPopup;
View := nil; //?
GridMode := TcxExtLookupComboBoxProperties(Source).GridMode;
View := TcxExtLookupComboBoxProperties(Source).View;
inherited Assign(Source);
ListFieldItem := TcxExtLookupComboBoxProperties(Source).ListFieldItem;
finally
EndUpdate;
end
end
else
inherited Assign(Source);
end;
class function TcxExtLookupComboBoxProperties.GetContainerClass: TcxContainerClass;
begin
Result := TcxExtLookupComboBox;
end;
class function TcxExtLookupComboBoxProperties.IsViewSupported(Value: TcxCustomGridTableView): Boolean;
begin
Result := Value.CanBeLookupList and
(TcxCustomGridView(Value).DataController is TcxDBDataController);
end;
procedure TcxExtLookupComboBoxProperties.CheckListFieldItem;
begin
FInCheckListFieldItem := True;
try
if (View <> nil) and (ListFieldItem <> nil) and
(View.IndexOfItem(ListFieldItem) = -1) then
ListFieldItem := nil;
finally
FInCheckListFieldItem := False;
end;
end;
procedure TcxExtLookupComboBoxProperties.DeinitializeDataController;
begin
inherited DeinitializeDataController;
if DataController <> nil then
DataController.RemoveDataChangeRefCount;
end;
procedure TcxExtLookupComboBoxProperties.FreeNotification(Sender: TComponent);
begin
inherited FreeNotification(Sender);
if Sender = ListFieldItem then
ListFieldItem := nil;
if Sender = View then
View := nil;
end;
function TcxExtLookupComboBoxProperties.GetIncrementalFiltering: Boolean;
begin
if FocusPopup then
Result := False
else
Result := inherited GetIncrementalFiltering;
end;
function TcxExtLookupComboBoxProperties.GetListIndex: Integer;
begin
Result := Self.ListFieldIndex;
end;
procedure TcxExtLookupComboBoxProperties.InitializeDataController;
begin
inherited InitializeDataController;
if DataController <> nil then
DataController.AddDataChangeRefCount;
end;
procedure TcxExtLookupComboBoxProperties.LinkView(AView: TcxCustomGridTableView);
begin
CheckListFieldItem;
FreeNotificator.AddSender(AView);
InitializeDataController;
end;
function TcxExtLookupComboBoxProperties.PopupWindowCapturesFocus: Boolean;
begin
Result := FocusPopup;
end;
procedure TcxExtLookupComboBoxProperties.UnlinkView(AView: TcxCustomGridTableView);
begin
DeinitializeDataController;
FreeNotificator.RemoveSender(AView);
end;
// LookupGrid methods
function TcxExtLookupComboBoxProperties.GetLookupGridActiveControl: TWinControl;
begin
if View <> nil then
Result := View.Site
else
Result := inherited GetLookupGridActiveControl;
end;
function TcxExtLookupComboBoxProperties.GetLookupGridCanResize: Boolean;
begin
if View <> nil then
Result := not TcxCustomGridTableOptionsViewAccess(View.OptionsView).CellAutoHeight
else
Result := False;
end;
function TcxExtLookupComboBoxProperties.GetLookupGridColumnCount: Integer;
begin
if View <> nil then
Result := View.ItemCount
else
Result := 0;
end;
function TcxExtLookupComboBoxProperties.GetLookupGridControl: TWinControl;
begin
Result := Grid;
end;
function TcxExtLookupComboBoxProperties.GetLookupGridDataController: TcxCustomDataController;
begin
if View <> nil then
Result := View.DataController
else
Result := nil;
end;
function TcxExtLookupComboBoxProperties.GetLookupGridVisualAreaPreferredWidth: Integer;
begin
Result := 0;
if View <> nil then
View.ViewInfo.GetWidth(Point(MaxInt, MaxInt), Result);
end;
function TcxExtLookupComboBoxProperties.GetLookupGridNearestPopupHeight(AHeight: Integer): Integer;
begin
if View <> nil then
Result := View.ViewInfo.GetNearestPopupHeight(AHeight, FocusPopup)
else
Result := AHeight;
end;
function TcxExtLookupComboBoxProperties.GetLookupGridPopupHeight(ADropDownRowCount: Integer): Integer;
begin
if View <> nil then
begin
if FocusPopup and (ADropDownRowCount < 2) then // TODO: Check New Item Row
ADropDownRowCount := 2;
Result := View.ViewInfo.GetPopupHeight(ADropDownRowCount);
end
else
Result := 0;
end;
function TcxExtLookupComboBoxProperties.IsLookupGridMouseOverList(const P: TPoint): Boolean;
var
AHitTest: TcxCustomGridHitTest;
begin
Result := False;
if View <> nil then
begin
AHitTest := View.ViewInfo.GetHitTest(P);
Result := AHitTest is TcxGridRecordHitTest;
end;
end;
procedure TcxExtLookupComboBoxProperties.LookupGridDeinitialize;
begin
Grid.Levels[0].GridView := nil;
// restore options
if (View <> nil) and not (csDestroying in View.ComponentState) then
begin
TcxCustomGridTableOptionsBehaviorAccess(View.OptionsBehavior).PullFocusing := FPrevPullFocusing;
View.OptionsSelection.MultiSelect := FPrevMultiSelect;
View.OptionsBehavior.ImmediateEditor := FPrevImmediateEditor;
if View is TcxGridTableView then
TcxGridTableView(View).OptionsCustomize.ColumnFiltering := FPrevColumnFiltering;
View.OptionsBehavior.IncSearch := FPrevIncSearch;
View.OnKeyDown := Grid.FPrevOnKeyDown;
View.OnMouseDown := Grid.FPrevOnMouseDown;
View.OnMouseMove := Grid.FPrevOnMouseMove;
View.OnMouseUp := Grid.FPrevOnMouseUp;
end;
end;
procedure TcxExtLookupComboBoxProperties.LookupGridDroppedDown(const AFindStr: string);
begin
// Init Inc Search
// TODO: !!!
if FocusPopup and AutoSearchOnPopup and (ListFieldItem <> nil) then
begin
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?