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 + -
显示快捷键?