adbtmple.pas

来自「delphi编程控件」· PAS 代码 · 共 600 行 · 第 1/2 页

PAS
600
字号
unit adbtmple;
(*
 COPYRIGHT (c) RSD Software 1997 - 98
 All Rights Reserved.
*)

{$I aclver.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  adbtempl, StdCtrls, ExtCtrls, aoutlbar, DB, adbtplcn, Menus, ComCtrls,
  adbgrfed, adbgrid, adbpanel{$IFDEF DELPHI4}, ImgList{$ENDIF};

type
  TFAutoRepositoryEditor = class(TForm)
    Panel1: TPanel;
    Button3: TButton;
    PageControl1: TPageControl;
    TS1: TTabSheet;
    Panel3: TPanel;
    GBDefField: TGroupBox;
    Bevel1: TBevel;
    LCFieldName: TLabel;
    LFieldName: TLabel;
    Bevel3: TBevel;
    LFieldType: TLabel;
    LCFieldType: TLabel;
    Bevel4: TBevel;
    LDefControlName: TLabel;
    LCDBDefControlName: TLabel;
    Bevel5: TBevel;
    LDefControlType: TLabel;
    LCDBDefControlType: TLabel;
    BFAdd: TButton;
    BFDelete: TButton;
    BFClear: TButton;
    BFCustomizeDefControl: TButton;
    GBDefDataSet: TGroupBox;
    LDataSetName: TLabel;
    Bevel2: TBevel;
    LDSDataSetName: TLabel;
    BDSAdd: TButton;
    BDSDelete: TButton;
    Store: TAutoOutLookBarStore;
    StoreItem1: TAutoOutLookStoredItem;
    ImageList1: TImageList;
    Panel2: TPanel;
    Bar: TAutoOutLookBar;
    TS2: TTabSheet;
    BViewDefControl: TButton;
    Label9: TLabel;
    Label10: TLabel;
    Bevel6: TBevel;
    LDataSetClass: TLabel;
    LDSDataSetClass: TLabel;
    Bevel7: TBevel;
    GBGridLayouts: TGroupBox;
    GridTemplateList: TListBox;
    BAddGridTemplate: TButton;
    BDeleteGridTemplate: TButton;
    BCustGridLayout: TButton;
    BHelp: TButton;
    GBPanelLayouts: TGroupBox;
    PanelTemplateList: TListBox;
    BAddPanelTemplate: TButton;
    BDeletePanelTemplate: TButton;
    BCustPanelLayout: TButton;
    BClose: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BDSAddClick(Sender: TObject);
    procedure BarChangeActiveGroup(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure BFAddClick(Sender: TObject);
    procedure BarChangeSelectedItem(Sender: TObject);
    procedure BFCustomizeDefControlClick(Sender: TObject);
    procedure BViewDefControlClick(Sender: TObject);
    procedure BDSDeleteClick(Sender: TObject);
    procedure BFDeleteClick(Sender: TObject);
    procedure BFClearClick(Sender: TObject);
    procedure BAddGridTemplateClick(Sender: TObject);
    procedure GridTemplateListClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BDeleteGridTemplateClick(Sender: TObject);
    procedure BCustGridLayoutClick(Sender: TObject);
    procedure PanelTemplateListClick(Sender: TObject);
    procedure BAddPanelTemplateClick(Sender: TObject);
    procedure BDeletePanelTemplateClick(Sender: TObject);
    procedure BCustPanelLayoutClick(Sender: TObject);
    procedure BCloseClick(Sender: TObject);
  private
    FRepository : TAutoRepository;
    FCurDefDataSet : TAutoDefDataSet;
    FCurDefDataField : TAutoDefField;
    FCurGridTemplate : TAutoDBGridTemplate;
    FCurPanelTemplate : TAutoDBPanelTemplate;    
    procedure DeleteDefField(Sender : TObject; AutoDefField : TAutoDefField);
    procedure GridTemplateChangeName(Sender : TObject);
    procedure PanelTemplateChangeName(Sender : TObject);    
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    DefControlsForm : TFAutoRepositoryDefControls;
    procedure ModifyDesigner;
    property CurDefDataSet : TAutoDefDataSet read FCurDefDataSet;
  published
    property Repository : TAutoRepository read FRepository write FRepository;
  end;

procedure ShowAutoRepositoryEditor(ARepository : TAutoRepository);

function DBDefControlTypeToString(ADBDefControlType : TAutoDBDefControlType) : String;
function FieldTypeToString(AFieldType : TFieldType) : String;

implementation
uses adbtplds, adbtplfd, atmplvdc, TypInfo, DsgnIntf, adbgrded, adbpaned,
     autostrs, audbstrs, aclconst;

{$R *.DFM}
{$R *.res}
type
TDummyAutoDBDefControl = class(TAutoDBDefControl)
published
  property DBDefControlType;
end;

function DBDefControlTypeToString(ADBDefControlType : TAutoDBDefControlType) : String;
Var
  pInfo : PPropInfo;
begin
  Result := '';
  pInfo := GetPropInfo(TDummyAutoDBDefControl.ClassInfo, 'DBDefControlType');
  if(pInfo <> Nil) And (pInfo^.PropType^.Kind = tkEnumeration) then
    Result := GetEnumName(pInfo^.PropType{$IFDEF DELPHI3_0}^{$ENDIF}, Integer(ADBDefControlType));
end;

type
TDummyField = class(TField)
published
  property DataType;
end;

function FieldTypeToString(AFieldType : TFieldType) : String;
Var
  pInfo : PPropInfo;
begin
  Result := '';
  pInfo := GetPropInfo(TDummyField.ClassInfo, 'DataType');
  if (pInfo <> Nil) And (pInfo^.PropType^.Kind = tkEnumeration) then
    Result :=  GetEnumName(pInfo^.PropType{$IFDEF DELPHI3_0}^{$ENDIF},
                         Integer(AFieldType));
end;

function GetImageIndexByFieldType(AFieldType : TFieldType) : Integer;
const
  AImageIndexByFieldType : array [TFieldType] of Integer =
    (-1, //ftUnknown
     0, //ftString
     1, //ftSmallint
     1, //ftInteger
     1, //ftWord,
     4, //ftBoolean,
     2, //ftFloat,
     3, //ftCurrency,
     1, //ftBCD,
     5,     //ftDate,
     6, //ftTime,
     5, //ftDateTime,
     8, //ftBytes,
     8, //ftVarBytes,
     9, //ftAutoInc,
     7, // ftBlob,
     8, //ftMemo,
     7, //ftGraphic,
     8, //ftFmtMemo,
     7, //ftParadoxOle,
     7, //ftDBaseOle,
     7 //ftTypedBinary
     {$IFDEF DELPHI3_0}
     ,0 //  ftCursor
     {$ENDIF}
     {$IFDEF DELPHI4}
     ,0, 0, 0, 0, 0, 0, 0
     {$ENDIF}
);
begin
  Result := AImageIndexByFieldType[AFieldType]; 
end;

procedure ShowAutoRepositoryEditor(ARepository : TAutoRepository);
Var
  AForm : TFAutoRepositoryEditor;
  i, j : Integer;
  group : TAutoOutLookGroup;
  item : TAutoOutLookItem;
begin
  AForm := TFAutoRepositoryEditor.Create(Nil);
  AForm.Repository := ARepository;
  AForm.Caption := LoadStr(ACDB_REPOSITORYCAPTION) + ARepository.Name;
  ARepository.DesignerForm := AForm;
  ARepository.OnDeleteDefField := AForm.DeleteDefField;
  for i := 0 to ARepository.DefDataSets.Count - 1 do begin
    group := AForm.Bar.Groups.Add;
    group.Caption := ARepository.DefDataSets[i].DataSet.Owner.Name + '.'
                  + ARepository.DefDataSets[i].DataSet.Name;
    for j := 0 to ARepository.DefDataSets[i].DefFields.Count - 1 do begin
      item := AForm.Bar.Groups[i].Items.Add;
      item.ItemObject := ARepository.DefDataSets[i].DefFields[j];
      item.StoredItem := AForm.StoreItem1;
      item.Caption := ARepository.DefDataSets[i].DefFields[j].DataField;
      if(ARepository.DefDataSets[i].DefFields[j].Field <> Nil) then
        item.LargeImage := GetImageIndexByFieldType(ARepository.DefDataSets[i].DefFields[j].Field.DataType);
    end;
  end;
  for i := 0 to ARepository.GridTemplateCount - 1 do begin
    AForm.GridTemplateList.Items.AddObject(ARepository.GridTemplates[i].Name, ARepository.GridTemplates[i]);
    ARepository.GridTemplates[i].OnChangeName := AForm.GridTemplateChangeName;
  end;
  for i := 0 to ARepository.PanelTemplateCount - 1 do begin
    AForm.PanelTemplateList.Items.AddObject(ARepository.PanelTemplates[i].Name, ARepository.PanelTemplates[i]);
    ARepository.PanelTemplates[i].OnChangeName := AForm.PanelTemplateChangeName;
  end;  

  AForm.BDSDelete.Enabled := AForm.Bar.ActiveGroup <> Nil;
  AForm.BarChangeSelectedItem(Nil);
  AForm.GridTemplateListClick(Nil);
  AForm.PanelTemplateListClick(Nil);
  AForm.BarChangeActiveGroup(Nil);
  AForm.Show;
end;

procedure TFAutoRepositoryEditor.GridTemplateChangeName(Sender : TObject);
Var
  i, Index : Integer;
begin
  for i := 0 to GridTemplateList.Items.Count - 1 do
    if(TAutoDBGridTemplate(GridTemplateList.Items.Objects[i]) = TAutoDBGridTemplate(Sender)) then
      break;
  if(i > -1) And (i < GridTemplateList.Items.Count) then begin
    Index := GridTemplateList.ItemIndex;
    GridTemplateList.Items[i] := TComponent(Sender).Name;
    if(Index > -1) then
      GridTemplateList.ItemIndex := Index;
  end;
end;

procedure TFAutoRepositoryEditor.PanelTemplateChangeName(Sender : TObject);
Var
  i, Index : Integer;
begin
  for i := 0 to PanelTemplateList.Items.Count - 1 do
    if(TAutoDBPanelTemplate(PanelTemplateList.Items.Objects[i]) = TAutoDBPanelTemplate(Sender)) then
      break;
  if(i > -1) And (i < PanelTemplateList.Items.Count) then begin
    Index := PanelTemplateList.ItemIndex;
    PanelTemplateList.Items[i] := TComponent(Sender).Name;
    if(Index > -1) then
      PanelTemplateList.ItemIndex := Index;
  end;
end;

procedure TFAutoRepositoryEditor.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if(Operation = opRemove) And (AComponent = Repository) then
    Close;
end;

procedure TFAutoRepositoryEditor.ModifyDesigner;
begin
  if(Repository.Designer <> Nil) then
{$IFDEF DELPHI4}IFormDesigner{$ELSE}TFormDesigner{$ENDIF}(Repository.Designer).Modified;
end;

procedure TFAutoRepositoryEditor.FormClose(Sender: TObject;
  var Action: TCloseAction);
Var
  i : Integer;
begin
  Action := caFree;
  Repository.DesignerForm := Nil;
  Repository.Designer := Nil;
  Repository.OnDeleteDefField := Nil;
  if Not (csDestroying in Repository.ComponentState) then begin
    for i := 0 to Repository.GridTemplateCount - 1 do
      Repository.GridTemplates[i].OnChangeName := Nil;
    for i := 0 to Repository.PanelTemplateCount - 1 do
      Repository.PanelTemplates[i].OnChangeName := Nil;
  end;
end;

procedure TFAutoRepositoryEditor.DeleteDefField(Sender : TObject; AutoDefField : TAutoDefField);
Var
  i, j : Integer;
begin
  for i := 0 to Bar.GroupCount - 1 do begin
    j := 0;
    while(j < Bar.Groups[i].Items.Count) do
      if(Bar.Groups[i].Items[j].ItemObject = AutoDefField) then

⌨️ 快捷键说明

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