⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regas.pas

📁 仿速达界面控件
💻 PAS
字号:
{*******************************************************
By wr960204 王锐

2004/8/8
*******************************************************}
unit RegAS;

interface
uses
  UnitASEdit, UnitASComboBox,
  Windows, Controls, SysUtils, UnitASButtons,
  UnitASBase, ColnEdit, Menus, ComCtrls, ActnList,
  UnitPagesEditor, Dialogs, UnitASDBGrids,
  Classes, UnitASPages, UnitAbout,
  {$IFDEF VER130}
  DesignIntf
  {$ELSE}
  DesignIntf, DesignEditors
  {$ENDIF}
  ;

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

  TActivPageEditor = class(TStringProperty)
  private
    function ASPageControl: TASPageControl;
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValues(Proc: TGetStrProc); override;
  end;

  TAboutEditor = class(TStringProperty)
  private

  public
    function GetAttributes: TPropertyAttributes; override;
    procedure Edit; override;

  end;

  TASDBGridColumnsEditor = class(TCollectionEditor)
    N1: TMenuItem;
    AddAllFields1: TMenuItem;
    RestoreDefaults1: TMenuItem;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    AddAllFieldsCmd: TAction;
    RestoreDefaultsCmd: TAction;
    procedure AddAllFieldsCmdExecute(Sender: TObject);
    procedure RestoreDefaultsCmdExecute(Sender: TObject);
    procedure AddAllFieldsCmdUpdate(Sender: TObject);
    procedure RestoreDefaultsCmdUpdate(Sender: TObject);
  private
    { Private declarations }
  protected
    function CanAdd(Index: Integer): Boolean; override;
  public
    { Public declarations }
  end;

  TASDBGridColumnsProperty = class(TPropertyEditor {TClassProperty})
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: string; override;
    procedure Edit; override;
  end;

  { TASDBGridEditor }

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

  { TASPageControlEditor }

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

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Application Studio', [TASPageControl, TASDBGrid,
    TASActiveButton, TASEdit, TASComboBox]);
  RegisterPropertyEditor(TypeInfo(TASDBGridColumns), TASDBGrid,
    'Columns', TASDBGridColumnsProperty);
  RegisterPropertyEditor(TypeInfo(TStrings), TASPageControl, 'Pages',
    TPagesEditor);
  RegisterPropertyEditor(TypeInfo(string), TASPageControl, 'ActivePage',
    TActivPageEditor);
  RegisterPropertyEditor(TypeInfo(string), TASBase, 'About', TAboutEditor);
  RegisterPropertyEditor(TypeInfo(string), TASActiveButton, 'About',
    TAboutEditor);
  RegisterComponentEditor(TASDBGrid, TASDBGridEditor);
  RegisterComponentEditor(TASPageControl, TASPageControlEditor);
end;

{ TPagesEditor }

procedure TPagesEditor.Edit;
var
  Dlg               : TFormPagesEditor;
begin
  inherited Edit;
  Dlg := TFormPagesEditor.Create(nil);
  Dlg.PageStrs := TASPageControl(GetComponent(0)).Pages;
  Dlg.ShowModal;
  Dlg.Free;
end;

function TPagesEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog, paReadOnly];
end;

{ TActivPageEditor }

function TActivPageEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paValueList];
end;

procedure TActivPageEditor.GetValues(Proc: TGetStrProc);
var
  I                 : Integer;
begin
  for I := 0 to ASPageControl.Pages.Count - 1 do
    Proc(ASPageControl.Pages[I]);
end;

function TActivPageEditor.ASPageControl: TASPageControl;
begin
  Result := TASPageControl(GetComponent(0));
end;

{ TAboutEditor }

procedure TAboutEditor.Edit;
begin
  //inherited Edit;
  FormAbout := TFormAbout.Create(nil);
  try
    FormAbout.ShowModal;
  finally
    FormAbout.Free;
  end;
end;

function TAboutEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paReadOnly, paFullWidthName, paDialog];
end;

type
  TCollectionCracker = class(TCollection);
  TCustomASDBGridCracker = class(TASDBGrid);
  TPersistentCracker = class(TPersistent);
  { TASDBGridColumnsEditor }

procedure TASDBGridColumnsEditor.AddAllFieldsCmdExecute(Sender: TObject);
var
  msgValue          : Word;
  //    i:Integer;
  //    Col:TColumnEh;
  ASDBGrid      : TASDBGrid;
begin
  ASDBGrid := TASDBGrid(TCollectionCracker(Collection).GetOwner);
  if not Assigned(ASDBGrid) then
    Exit;
  if (ASDBGrid.Columns.State = csDefault) then
    ASDBGrid.Columns.State := csCustomized
  else
  begin
    TCustomASDBGridCracker(ASDBGrid).BeginLayout;
    try
      if (ASDBGrid.Columns.Count > 0) then
      begin
        msgValue := MessageDlg('删除已存在的列吗?',
          mtConfirmation, [mbYes, mbNo, mbCancel], 0);
        case msgValue of
          mrYes: ASDBGrid.Columns.Clear;
          mrCancel: Exit;
        end;
      end;
      //ASDBGrid.Columns.Add
      ////ASDBGrid.Columns.AddAllColumns(False);
    finally
      TCustomASDBGridCracker(ASDBGrid).EndLayout;
      UpdateListbox;
    end;
  end;
  Designer.Modified;
end;

procedure TASDBGridColumnsEditor.RestoreDefaultsCmdExecute(Sender: TObject);
var
  i                 : Integer;
  ASDBGrid      : TASDBGrid;
begin
  ASDBGrid := TASDBGrid(TCollectionCracker(Collection).GetOwner);
  if not Assigned(ASDBGrid) then
    Exit;
  if (ListView1.SelCount > 0) then
  begin
    for i := 0 to ListView1.SelCount - 1 do
      ASDBGrid.Columns[i].RestoreDefaults;
    Designer.Modified;
    UpdateListbox;
  end;
end;

procedure TASDBGridColumnsEditor.AddAllFieldsCmdUpdate(Sender: TObject);
var
  ASDBGrid      : TCustomASDBGrid;
begin
  ASDBGrid := TCustomASDBGrid(TCollectionCracker(Collection).GetOwner);
  AddAllFieldsCmd.Enabled := Assigned(ASDBGrid) and
    Assigned(ASDBGrid.DataSource) and
    Assigned(ASDBGrid.Datasource.Dataset) and
    (ASDBGrid.Datasource.Dataset.FieldCount > 0);
end;

procedure TASDBGridColumnsEditor.RestoreDefaultsCmdUpdate(Sender: TObject);
begin
  RestoreDefaultsCmd.Enabled := ListView1.Items.Count > 0;
end;

function TASDBGridColumnsEditor.CanAdd(Index: Integer): Boolean;
var
  ASDBGrid      : TASDBGrid;
begin
  Result := False;
  ASDBGrid := TASDBGrid(TCollectionCracker(Collection).GetOwner);
  if Assigned(ASDBGrid) then
    Result := (ASDBGrid.Columns.State = csCustomized);
end;

{ TASDBGridColumnsProperty }

procedure TASDBGridColumnsProperty.Edit;
var
  Obj               : TPersistent;
begin
  Obj := GetComponent(0);
  while (Obj <> nil) and not (Obj is TComponent) do
    Obj := TPersistentCracker(Obj).GetOwner;
  ShowCollectionEditorClass(Designer, TASDBGridColumnsEditor,
    TComponent(Obj),
    //    TCustomDBGridEh(Obj).Columns, 'Columns', [coAdd, coDelete, coMove]);
    TCollection(GetOrdValue), 'Columns', [coAdd, coDelete, coMove]);
end;

function TASDBGridColumnsProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog, paReadOnly {, paSubProperties}];
end;

function TASDBGridColumnsProperty.GetValue: string;
begin
  Result := Format('(%s)', [GetPropType^.Name]);
end;

{ TASDBGridEditor }

procedure TASDBGridEditor.ExecuteVerb(Index: Integer);
begin
  case Index of
    0:
      ShowCollectionEditorClass(Designer, TASDBGridColumnsEditor, Component,
        TASDBGrid(Component).Columns, 'Columns', [coAdd, coDelete, coMove]);
  end;
end;

function TASDBGridEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := '列编辑器 ...';
  end;
end;

function TASDBGridEditor.GetVerbCount: Integer;
begin
  Result := 1;
end;

{ TASPageControlEditor }

procedure TASPageControlEditor.ExecuteVerb(Index: Integer);
var
  Dlg               : TFormPagesEditor;
begin
  case Index of
    0:
      begin
        Dlg := TFormPagesEditor.Create(nil);
        Dlg.PageStrs := TASPageControl(Component).Pages;
        Dlg.ShowModal;
        Dlg.Free;
      end;
  end;
end;

function TASPageControlEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := '页面编辑器 ...';
  end;
end;

function TASPageControlEditor.GetVerbCount: Integer;
begin
  Result := 1;
end;

end.

⌨️ 快捷键说明

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