acldbreg.pas

来自「delphi编程控件」· PAS 代码 · 共 1,263 行 · 第 1/3 页

PAS
1,263 行
字号
  function ParamCheck : Boolean;
  Var
    j : Integer;
  begin
    Result := True;
    for j := 0 to i - 1 do
      if(CompareText(Params[i].Name, Params[j].Name) = 0) then begin
        Result := False;
        Break;
      end;
  end;

begin
  FilterLink := GetComponent(0) as TFilterLink;
  if(FilterLink.DataSet <> nil) then begin
    PropInfo := TypInfo.GetPropInfo(FilterLink.DataSet.ClassInfo, 'Params');
    if(PropInfo <> Nil) then
      Params := TParams(GetOrdProp(FilterLink.DataSet, PropInfo))
    else Params := Nil;
    if(Params <> Nil) then
      for i := 0 to Params.Count - 1 do
        if(ParamCheck) then
          List.Add(Params[i].Name);
  end;
end;

procedure TFilterLinkParamProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
  Values: TStringList;
begin
  Values := TStringList.Create;
  try
    GetValueList(Values);
    for I := 0 to Values.Count - 1 do Proc(Values[I]);
  finally
    Values.Free;
  end;
end;

type
  TCustomReferenceEditor = class(TComponentEditor)
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
  end;

procedure TCustomReferenceEditor.ExecuteVerb(Index: Integer);
Var
  Reference : TCustomReference;
  AWinWidth, AWinHeight : Integer;
begin
  Reference := TCustomReference(Component);
  case Index of
    0 :
      with Reference do begin
        AWinWidth := WinWidth;
        AWinHeight := WinHeight;
        PopupReference(GridLayout, ReferencePanel, ReferencePanelAlign,
          Repository, AWinWidth, AWinHeight);
        WinWidth := AWinWidth;
        WinHeight := AWinHeight;
      end;
    1 : TCustomReference(Component).VisibleText := Not TCustomReference(Component).VisibleText;
  end;
end;

function TCustomReferenceEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := LoadStr(ACDB_REFERPOPUPFORM);
    1: Result := LoadStr(ACDB_REFERCHANGEVISIBLETEXT);
  end;
end;

function TCustomReferenceEditor.GetVerbCount: Integer;
begin
  Result := 2;
end;

type
  TReferenceFieldProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValueList(List: TStrings);
    procedure GetValues(Proc: TGetStrProc); override;
  end;

function TReferenceFieldProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList, paSortList, paMultiSelect];
end;

procedure TReferenceFieldProperty.GetValueList(List: TStrings);
var
  Reference : TCustomReference;
begin
  Reference := GetComponent(0) as TCustomReference;
  if(Reference.GridLayout.DataSource <> Nil)
  And (Reference.GridLayout.DataSource.DataSet <> nil) then
      Reference.GridLayout.DataSource.DataSet.GetFieldNames(List);
end;

procedure TReferenceFieldProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
  Values: TStringList;
begin
  Values := TStringList.Create;
  try
    GetValueList(Values);
    for I := 0 to Values.Count - 1 do Proc(Values[I]);
  finally
    Values.Free;
  end;
end;

{TReferencePatternTextProperty}
type
  TReferencePatternTextProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure Edit; override;
  end;

function TReferencePatternTextProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog];
end;

procedure TReferencePatternTextProperty.Edit;
begin
  if EditReferenceText(GetComponent(0) As TCustomreference) then
    Modified;
end;

{ TReferenceTableNameProperty }
type
  TReferenceTableNameProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValueList(List: TStrings);
    procedure GetValues(Proc: TGetStrProc); override;
  end;

function TReferenceTableNameProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList, paSortList, paMultiSelect];
end;

procedure TReferenceTableNameProperty.GetValueList(List: TStrings);
var
  Reference: TCustomReference;
  DBSession : TSession;
  DatabaseName : TFileName;
begin
  Reference := GetComponent(0) as TCustomReference;
  if(Reference.GridLayout.DataSource <> Nil)
  And (Reference.GridLayout.DataSource.DataSet <> Nil) then begin
    DBSession := Nil;
    if(Reference.GridLayout.DataSource.DataSet is TQuery) then begin
      DBSession := TQuery(Reference.GridLayout.DataSource.DataSet).DBSession;
      DatabaseName := TQuery(Reference.GridLayout.DataSource.DataSet).DataBaseName;
    end;
    if(Reference.GridLayout.DataSource.DataSet is TTable) then begin
      DBSession := TTable(Reference.GridLayout.DataSource.DataSet).DBSession;
      DatabaseName := TTable(Reference.GridLayout.DataSource.DataSet).DataBaseName;
    end;
    if(DBSession <> Nil) then
      DBSession.GetTableNames(DatabaseName, '', True, False, List);
  end;
end;

procedure TReferenceTableNameProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
  Values: TStringList;
begin
  Values := TStringList.Create;
  try
    GetValueList(Values);
    for I := 0 to Values.Count - 1 do Proc(Values[I]);
  finally
    Values.Free;
  end;
end;

type
  TCustomAutoDBMakerProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValueList(List: TStrings);
    procedure GetValues(Proc: TGetStrProc); override;
  end;

function TCustomAutoDBMakerProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList, paSortList, paMultiSelect];
end;

procedure TCustomAutoDBMakerProperty.GetValueList(List: TStrings);
var
  DBMaker: TCustomAutoDBMaker;
  AList: PPropList;
  i, ACount, ASize : Integer;
  AKind : TTypeKinds;
begin
  DBMaker := GetComponent(0) as TCustomAutoDBMaker;
  if(DBMaker.Control <> Nil) then begin
    AKind := [tkInteger, tkChar, tkEnumeration, tkFloat,
     tkString, tkSet, tkWChar, tkLString
     {$IFNDEF DELPHI3_0}, tkLWString {$ENDIF}, tkVariant];
    ACount := GetPropList(DBMaker.Control.ClassInfo, AKind, nil);
    ASize := ACount * SizeOf(Pointer);
    GetMem(AList, ASize);
    GetPropList(DBMaker.Control.ClassInfo, AKind, AList);
    for i := 0 to ACount - 1 do
      List.Add(AList^[i]^.Name);
    FreeMem(AList, ASize);
  end;
end;

procedure TCustomAutoDBMakerProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
  Values: TStringList;
begin
  Values := TStringList.Create;
  try
    GetValueList(Values);
    for I := 0 to Values.Count - 1 do Proc(Values[I]);
  finally
    Values.Free;
  end;
end;

type
  TACLControlFieldProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValueList(List: TStrings);
    procedure GetValues(Proc: TGetStrProc); override;
  end;

function TACLControlFieldProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList, paSortList, paMultiSelect];
end;

procedure TACLControlFieldProperty.GetValueList(List: TStrings);
var
  DataSource : TDataSource;
  DataSet : TDataSet;
  PropInfo : PPropInfo;
begin
  DataSet := Nil;
  PropInfo := TypInfo.GetPropInfo(GetComponent(0).ClassInfo, 'DataSource');
  if(PropInfo <> Nil) then
      DataSource := TDataSource(GetOrdProp(GetComponent(0), PropInfo))
  else DataSource := Nil;
  if(DataSource = Nil) then begin
    PropInfo := TypInfo.GetPropInfo(GetComponent(0).ClassInfo, 'DataSet');
    if(PropInfo <> Nil) then
      DataSet := TDataSet(GetOrdProp(GetComponent(0), PropInfo))
  end else DataSet := DataSource.DataSet;
  if(DataSet <> nil) then
    DataSet.GetFieldNames(List);
end;

procedure TACLControlFieldProperty.GetValues(Proc: TGetStrProc);
var
  I: Integer;
  Values: TStringList;
begin
  Values := TStringList.Create;
  try
    GetValueList(Values);
    for I := 0 to Values.Count - 1 do Proc(Values[I]);
  finally
    Values.Free;
  end;
end;

{TACLMaskEditProperty}
type
  TACLMaskEditProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure Edit; override;
  end;

function TACLMaskEditProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog];
end;

procedure TACLMaskEditProperty.Edit;
Var
  St : String;
begin
  St := GetStrValue;
  if EditACLMaskEditString(St) then begin
    SetStrValue(St);
    Modified;
  end;  
end;


procedure Register;
begin
  RegisterComponents('Auto Controls', [TAutoBtnEdit]);

  RegisterComponents('Auto Data Access',[TAutoRepository, TAutoTable, TAutoQuery,
      TAutoStoredProc]);
  RegisterNoIcon([TAutoDBDefControl, TAutoDBGridTemplate,
    TAutoDBPanelTemplate]);
  RegisterNoIcon([TAutoDBDefMaskEdit, TAutoDBDefBtnEdit, TAutoDBDefMemo,
    TAutoDBDefImage, TAutoDBDefListBox, TAutoDBDefComboBox,
    TAutoDBDefCheckBox, TAutoDBDefRadioGroup, TAutoDBDefLookupListBox,
    TAutoDBDefLookupComboBox, TAutoDBDefReference, TAutoDBDefDate,
    {TAutoDBDefDateTime,} TAutoDBDefTime, TAutoDBDefSpinImage,
    TAutoDBDefImageCombo, TAutoDBDefImageList]);

  RegisterComponents('Auto Data Controls',
  [TAutoDBGrid, TAutoDBPanel, TAutoDBComboBox, TAutoDBImageListBox,
   TAutoDBImageComboBox, TAutoDBSpinImage, TReference, TDBReference,
   TReferencePanel, TAutoDBForm, TAutoDBControlMaker, TAutoDBDateControl,
   TAutoDBDateEdit, TAutoDBTimeControl, TAutoDBTimeEdit, TAutoDBBtnEdit]);

  {$IFDEF DELPHI3_0}
  RegisterComponents('Auto Data Controls', [TAutoDBRichEdit]);
  {$ENDIF}

  RegisterComponents('Auto Filters', [TAutoFilterForm,  TFilterLink,
    TEasyFilter, TDateControlFilter, TDateFilter, TTimeControlFilter,
    TTimeEditFilter, TCheckBoxFilter, TRadioGroupFilter, TListBoxFilter,
    TComboBoxFilter, TMaskEditFilter, TLookupListFilter, TLookupComboFilter,
    TReferenceFilter, TImageComboBoxFilter, TImageListBoxFilter,
    TSpinImageFilter, TAutoDBComboBoxFilter, TFilterMaker]);

  RegisterComponents('Auto Locates', [TAutoLocateForm, TAutoFind, TAutoIncSearch,
      TAutoDBComboBoxLocate, TAutoEditLocate]);
  RegisterComponents('Auto Tools', [TAutoQuickTyper, TAutoDBQuickTyper]);


  RegisterPropertyEditor(TypeInfo(String), TAutoQuery, 'Filter', TAutoDataSetFilterProperty);
  RegisterPropertyEditor(TypeInfo(String), TAutoTable, 'Filter', TAutoDataSetFilterProperty);
  RegisterPropertyEditor(TypeInfo(String), TAutoStoredProc, 'Filter', TAutoDataSetFilterProperty);
  RegisterPropertyEditor(TypeInfo(TMacros), TAutoQuery, 'Macros', TDataSetMacrosProperty);
  RegisterPropertyEditor(TypeInfo(TMacros), TAutoTable, 'Macros', TDataSetMacrosProperty);
  RegisterPropertyEditor(TypeInfo(TMacros), TAutoStoredProc, 'Macros', TDataSetMacrosProperty);
  RegisterPropertyEditor(TypeInfo(TAutoDefDataSets), TAutoRepository, 'DefDataSets', TAutoRepositoryPropertyEditor);

  RegisterPropertyEditor(TypeInfo(TFileName), TAutoCustomDBComboBox, 'DataBaseName',
  TDBComboBoxDatabaseNameProperty);
  RegisterPropertyEditor(TypeInfo(TFileName), TAutoCustomDBComboBox, 'TableName',
  TDBComboBoxTableNameProperty);
  RegisterPropertyEditor(TypeInfo(String), TAutoCustomDBComboBox, 'FieldName',
  TDBComboBoxFieldNameProperty);

  RegisterPropertyEditor(TypeInfo(TAutoSpinImageItems), TAutoDBDefSpinImage, 'Items',
  TAutoDBDefSpinImageItemsProperties);
  RegisterPropertyEditor(TypeInfo(TStrings), TCustomAutoDBDefImageCombo, 'Strings',
  TAutoImageDBDefControlItemProperties);
  RegisterPropertyEditor(TypeInfo(string), TCustomAutoDBDefLookup, 'KeyField',
     TCustomAutoDBDefLookupFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TCustomAutoDBDefLookup, 'ListField',
     TCustomAutoDBDefLookupFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TAutoDBDefReference, 'KeyField',
     TDBDefReferenceFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TAutoDBDefReference, 'AssignField',
     TDBDefReferenceFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TAutoDBDefReference, 'TableName',
     TDBDefReferenceTableNameProperty);

  RegisterPropertyEditor(TypeInfo(string), Nil, 'DateDataField',
     TACLControlFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), Nil, 'BeginDateDataField',
     TACLControlFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), Nil, 'EndDateDataField',
     TACLControlFieldProperty);
  RegisterPropertyEditor(TypeInfo(TAutoGridLayout), Nil, '',
    TAutoGridLayoutPropertyEditor);
  RegisterPropertyEditor(TypeInfo(TAutoGridFields), Nil, '',
    TAutoGridLayoutFieldsPropertyEditor);
  RegisterPropertyEditor(TypeInfo(TAutoGridGroups), nil, '',
    TAutoGridLayoutGroupsPropertyEditor);
  RegisterPropertyEditor(TypeInfo(TAutoPanelLayout), Nil, '',
    TAutoPanelLayoutPropertyEditor);
  RegisterPropertyEditor(TypeInfo(TAutoPanelFields), Nil, '',
    TAutoPanelLayoutFieldsPropertyEditor);
  RegisterPropertyEditor(TypeInfo(TAutoPanelPages), Nil, '',
    TAutoPanelLayoutPagesPropertyEditor);
  RegisterPropertyEditor(TypeInfo(TAutoFilterFields), TCustomAutoFilterForm, 'FilterFields',
    TAutoFilterFormFieldsPropertyEditor);
  RegisterPropertyEditor(TypeInfo(string), TCustomReference, 'AssignField', TReferenceFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TCustomReference, 'KeyField', TReferenceFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TCustomReference, 'PatternText', TReferencePatternTextProperty);
  RegisterPropertyEditor(TypeInfo(string), TCustomReference, 'TableName', TReferenceTableNameProperty);
  RegisterPropertyEditor(TypeInfo(string), TCustomAutoDBMaker, 'PropName', TCustomAutoDBMakerProperty);

  RegisterPropertyEditor(TypeInfo(TComponent), TFilterLink, 'Filter', TFilterLinkAutoFilterProperty);
  RegisterPropertyEditor(TypeInfo(string), TFilterLink, 'FilterName', TFilterLinkFilterNameProperty);
  RegisterPropertyEditor(TypeInfo(string), TFilterLink, 'Macro', TFilterLinkMacroProperty);
  RegisterPropertyEditor(TypeInfo(string), TFilterLink, 'Param', TFilterLinkParamProperty);
  RegisterPropertyEditor(TypeInfo(string), TFilterLink, 'Param', TFilterLinkParamProperty);

  RegisterPropertyEditor(TypeInfo(string), TAutoFind, 'DataField',
     TACLControlFieldProperty);
  RegisterPropertyEditor(TypeInfo(string), TAutoDBDefMaskEdit, 'EditMask', TACLMaskEditProperty);
  RegisterPropertyEditor(TypeInfo(string), TField, 'DisplayText', TACLMaskEditProperty);
  RegisterPropertyEditor(TypeInfo(string), TField, 'EditMask', TACLMaskEditProperty);

  RegisterComponentEditor(TAutoRepository, TAutoRepositoryEditor);
  RegisterComponentEditor(TAutoDBGrid, TAutoDBGridEditor);
  RegisterComponentEditor(TAutoDBPanel, TAutoDBPanelEditor);
  RegisterComponentEditor(TCustomReference, TCustomReferenceEditor);
  RegisterComponentEditor(TReferencePanel, TReferencePanelEditor);
end;

end.

⌨️ 快捷键说明

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