cxdblookupcombobox.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 654 行 · 第 1/2 页

PAS
654
字号
    end
  end
  else
    inherited Assign(Source);
end;

class function TcxLookupComboBoxProperties.GetContainerClass: TcxContainerClass;
begin
  Result := TcxLookupComboBox;
end;

function TcxLookupComboBoxProperties.GetLookupGridClass: TcxCustomLookupDBGridClass;
begin
  Result := TcxCustomLookupDBGrid;
end;

procedure TcxLookupComboBoxProperties.ListOptionsChanged(Sender: TObject);
begin
  Changed;
end;

// LookupGrid

function TcxLookupComboBoxProperties.GetLookupGridColumnCount: Integer;
begin
  Result := ListColumns.Count;
end;

function TcxLookupComboBoxProperties.GetLookupGridControl: TWinControl;
begin
  Result := Grid;
end;

function TcxLookupComboBoxProperties.GetLookupGridDataController: TcxCustomDataController;
begin
  Result := Grid.DataController;
end;

function TcxLookupComboBoxProperties.GetLookupGridVisualAreaPreferredWidth: Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 0 to ListColumns.Count - 1 do
    Inc(Result, ListColumns[I].Width);
end;

function TcxLookupComboBoxProperties.GetLookupGridNearestPopupHeight(
  AHeight: Integer): Integer;
begin
  Result := Grid.GetNearestPopupHeight(AHeight);
end;

function TcxLookupComboBoxProperties.GetLookupGridPopupHeight(ADropDownRowCount: Integer): Integer;
begin
  Result := Grid.GetPopupHeight(ADropDownRowCount);
end;

function TcxLookupComboBoxProperties.IsLookupGridMouseOverList(const P: TPoint): Boolean;
begin
  Result := Grid.IsMouseOverList(P);
end;

procedure TcxLookupComboBoxProperties.LookupGridInitEvents(AOnClick, AOnFocusedRowChanged: TNotifyEvent;
  AOnCloseUp: cxLookupEdit.TcxLookupGridCloseUpEvent);
begin
  Grid.OnClick := AOnClick;
  Grid.OnFocusedRowChanged := AOnFocusedRowChanged;
  Grid.OnCloseUp := AOnCloseUp;
end;

procedure TcxLookupComboBoxProperties.LookupGridInitLookAndFeel(ALookAndFeel: TcxLookAndFeel;
  AColor: TColor; AFont: TFont);
begin
  Grid.LookAndFeel.MasterLookAndFeel := ALookAndFeel;
  Grid.Color := AColor;
  Grid.Font := AFont;
end;

procedure TcxLookupComboBoxProperties.LookupGridLockMouseMove;
begin
  Grid.LockPopupMouseMove;
end;

procedure TcxLookupComboBoxProperties.LookupGridMakeFocusedRowVisible;
begin
  Grid.MakeFocusedRowVisible;
end;

procedure TcxLookupComboBoxProperties.LookupGridUnlockMouseMove;
begin
  TControlAccess(Grid).MouseCapture := False;
end;

// DBLookupGrid

procedure TcxLookupComboBoxProperties.DBLookupGridBeginUpdate;
begin
  Grid.BeginUpdate;
end;

procedure TcxLookupComboBoxProperties.DBLookupGridCheckColumnByFieldName(const AFieldName: string);
begin
  if (AFieldName <> '') and (ListColumns.ColumnByFieldName(AFieldName) = nil) then
    with ListColumns.Add do
    begin
      FieldName := AFieldName;
      Index := 0;
    end;
end;

procedure TcxLookupComboBoxProperties.DBLookupGridCreateColumnsByFieldNames(const AFieldNames: string);
begin
  Grid.CreateColumnsByFieldNames(AFieldNames);
end;

procedure TcxLookupComboBoxProperties.DBLookupGridEndUpdate;
begin
  Grid.EndUpdate;
end;

function TcxLookupComboBoxProperties.GetDBLookupGridColumnField(AIndex: Integer): TField;
begin
  Result := ListColumns[AIndex].Field;
end;

function TcxLookupComboBoxProperties.GetDBLookupGridColumnFieldName(AIndex: Integer): string;
begin
  Result := ListColumns[AIndex].FieldName;
end;

function TcxLookupComboBoxProperties.GetDBLookupGridColumnIndexByFieldName(const AFieldName: string): Integer;
var
  AColumn: TcxLookupDBGridColumn;
begin
  AColumn := ListColumns.ColumnByFieldName(AFieldName);
  if AColumn <> nil then
    Result := AColumn.Index
  else
    Result := -1;
end;

function TcxLookupComboBoxProperties.GetDBLookupGridDataController: TcxDBDataController;
begin
  if Grid <> nil then
    Result := Grid.DataController
  else
    Result := nil;
end;

function TcxLookupComboBoxProperties.GetGrid: TcxCustomLookupDBGrid;
begin
  Result := FGrid;
end;

function TcxLookupComboBoxProperties.GetGridMode: Boolean;
begin
  Result := inherited IsUseLookupList;
end;

function TcxLookupComboBoxProperties.GetListColumns: TcxLookupDBGridColumns;
begin
  Result := Grid.Columns;
end;

function TcxLookupComboBoxProperties.GetListOptions: TcxLookupDBGridOptions;
begin
  Result := Grid.Options;
end;

function TcxLookupComboBoxProperties.GetListSource: TDataSource;
begin
  if IsDefinedByLookup then
    Result := nil
  else
    Result := Grid.DataSource;
end;

function TcxLookupComboBoxProperties.GetOnSortingChanged: TNotifyEvent;
begin
  Result := Grid.DataController.OnSortingChanged;
end;

procedure TcxLookupComboBoxProperties.SetGridMode(Value: Boolean);
begin
  inherited IsUseLookupList := Value;
end;

procedure TcxLookupComboBoxProperties.SetListColumns(Value: TcxLookupDBGridColumns);
begin
  Grid.Columns := Value; // TODO: recreate?
  CheckLookupColumn;
  CheckDisplayColumnIndex;
end;

procedure TcxLookupComboBoxProperties.SetListOptions(Value: TcxLookupDBGridOptions);
begin
  Grid.Options := Value;
end;

procedure TcxLookupComboBoxProperties.SetListSource(Value: TDataSource);

  procedure CheckListSource(ADataSource: TDataSource);
  var
    AField: TField;
  begin
    AField := GetDataField;
    if Assigned(AField) and Assigned(ADataSource) and
//      AField.DataSet.IsLinkedTo(ADataSource) then
      IsLinkedToDataSet(ADataSource, AField.DataSet) then
      DatabaseError(SCircularDataLink);
  end;

begin
  if IsDefinedByLookup and not InSyncLookup then
    DefineByLookupError;
  if Value <> nil then
    CheckListSource(Value);
  Grid.DataSource := Value;
  Changed;
end;

procedure TcxLookupComboBoxProperties.SetOnSortingChanged(Value: TNotifyEvent);
begin
  Grid.DataController.OnSortingChanged := Value;
end;

{ TcxCustomLookupComboBox }

class function TcxCustomLookupComboBox.GetPropertiesClass: TcxCustomEditPropertiesClass;
begin
  Result := TcxLookupComboBoxProperties;
end;

function TcxCustomLookupComboBox.GetProperties: TcxLookupComboBoxProperties;
begin
  Result := TcxLookupComboBoxProperties(FProperties);
end;

function TcxCustomLookupComboBox.GetActiveProperties: TcxLookupComboBoxProperties;
begin
  Result := TcxLookupComboBoxProperties(InternalGetActiveProperties);
end;

procedure TcxCustomLookupComboBox.SetProperties(Value: TcxLookupComboBoxProperties);
begin
  FProperties.Assign(Value);
end;

{ TcxDBLookupComboBox }

class function TcxDBLookupComboBox.GetDataBindingClass: TcxEditDataBindingClass;
begin
  Result := TcxDBLookupEditDataBinding;
end;

function TcxDBLookupComboBox.GetDataBinding: TcxDBTextEditDataBinding;
begin
  Result := TcxDBTextEditDataBinding(FDataBinding);
end;

procedure TcxDBLookupComboBox.SetDataBinding(Value: TcxDBTextEditDataBinding);
begin
  FDataBinding.Assign(Value);
end;

procedure TcxDBLookupComboBox.CMGetDataLink(var Message: TMessage);
begin
  Message.Result := Integer(GetcxDBEditDataLink(Self));
end;

{ TcxFilterLookupComboBoxHelper }

class function TcxFilterLookupComboBoxHelper.GetFilterEditClass: TcxCustomEditClass;
begin
  Result := TcxLookupComboBox;
end;

class procedure TcxFilterLookupComboBoxHelper.GetFilterValue(AEdit: TcxCustomEdit;
  AEditProperties: TcxCustomEditProperties; var V: Variant; var S: TCaption);
begin
  V := AEdit.EditValue;
  S := TcxCustomTextEdit(AEdit).ILookupData.GetDisplayText(V);
end;

class function TcxFilterLookupComboBoxHelper.GetSupportedFilterOperators(
  AProperties: TcxCustomEditProperties;
  AValueTypeClass: TcxValueTypeClass;
  AExtendedSet: Boolean = False): TcxFilterControlOperators;
begin
  Result := [fcoEqual, fcoNotEqual, fcoBlanks, fcoNonBlanks];
end;

class procedure TcxFilterLookupComboBoxHelper.InitializeProperties(AProperties,
  AEditProperties: TcxCustomEditProperties; AHasButtons: Boolean);
begin
  inherited InitializeProperties(AProperties, AEditProperties, AHasButtons);
  with TcxCustomLookupEditProperties(AProperties) do
  begin
    DropDownAutoSize := True;
    DropDownListStyle := lsFixedList;
    DropDownSizeable := True;
    IncrementalFiltering := True;
  end;
end;

class function TcxFilterLookupComboBoxHelper.IsValueValid(AValueTypeClass: TcxValueTypeClass;
  var Value: Variant): Boolean;
begin
  Result := True;
end;

class function TcxFilterLookupComboBoxHelper.IsIDefaultValuesProviderNeeded(
  AEditProperties: TcxCustomEditProperties): Boolean;
begin
  Result := TcxCustomDBLookupEditProperties(AEditProperties).IsDefinedByLookup;
end;

initialization
  GetRegisteredEditProperties.Register(TcxLookupComboBoxProperties, scxSEditRepositoryLookupComboBoxItem);
  FilterEditsController.Register(TcxLookupComboBoxProperties, TcxFilterLookupComboBoxHelper);

finalization
  FilterEditsController.Unregister(TcxLookupComboBoxProperties, TcxFilterLookupComboBoxHelper);

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?