adbtempl.pas
来自「delphi编程控件」· PAS 代码 · 共 898 行 · 第 1/2 页
PAS
898 行
begin
Result := FRepository;
end;
function TAutoRepositoryChild.HasParent: Boolean;
begin
Result := True;
end;
procedure TAutoRepositoryChild.ReadState(Reader: TReader);
begin
inherited ReadState(Reader);
if Reader.Parent is TAutoRepository then Repository := TAutoRepository(Reader.Parent);
end;
procedure TAutoRepositoryChild.SetParentComponent(AParent: TComponent);
begin
if not (csLoading in ComponentState) then Repository := AParent as TAutoRepository;
end;
procedure TAutoRepositoryChild.SetName(const Value: TComponentName);
begin
inherited SetName(Value);
if(Assigned(FOnChangeName)) then
FOnChangeName(self);
end;
procedure TAutoRepositoryChild.SetRepository(Value : TAutoRepository);
begin
if(FRepository <> Value) then begin
RemoveFromRepository(FRepository);
FRepository := Value;
AddToRepository(FRepository);
end;
end;
{TAutoDBDefControl}
constructor TAutoDBDefControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDefControlType := adctUnknown;
end;
destructor TAutoDBDefControl.Destroy;
begin
if(FRepository <> Nil) then
FRepository.RemoveDBDefControl(self);
inherited Destroy;
end;
procedure TAutoDBDefControl.RemoveFromRepository(Value : TAutoRepository);
begin
if(Value <> Nil) then
Value.RemoveDBDefControl(self);
end;
procedure TAutoDBDefControl.AddToRepository(Value : TAutoRepository);
begin
if(Value <> Nil) then
Value.AddDBDefControl(self);
end;
function TAutoDBDefControl.CreateDBControl(AParent : TWinControl; ADataSource : TDataSource;
AField : String) : TWinControl;
begin
Result := Nil;
end;
function TAutoDBDefControl.CreateGridInplaceControl(AParent : TWinControl; ADataSource : TDataSource;
AField : String) : TWinControl;
begin
Result := Nil;
end;
function TAutoDBDefControl.CreateFilterControl(AParent : TWinControl; AField : TField) : TWinControl;
begin
Result := Nil;
end;
function TAutoDBDefControl.CreateLocateControl(AParent : TWinControl; AField : TField;
ACaseInsensitive : Boolean) : TWinControl;
begin
Result := Nil;
end;
procedure TAutoDBDefControl.DestroyControl(Value : TWinControl);
begin
end;
function TAutoDBDefControl.GetFilterControlValue(AControl : TWinControl) : Variant;
begin
Result := VarNull;
end;
procedure TAutoDBDefControl.SetFilterControlValue(AControl : TWinControl; Value : Variant);
begin
end;
function TAutoDBDefControl.UseMaxGridHeight : Boolean;
begin
Result := False;
end;
procedure TAutoDBDefControl.DrawOnGridCanvas(ACanvas : TCanvas; AFont : TFont;
ARect : TRect; AAlignment : TAlignment; AField : TField; Selected : Boolean);
begin
end;
{TAutoRepository}
constructor TAutoRepository.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FListDefControls := TList.Create;
FListDefGrids := TList.Create;
FListDefPanels := TList.Create;
FLinks := TList.Create;
FDefDataSets := TAutoDefDataSets.Create(self);
DesignerForm := Nil;
Designer := Nil;
end;
destructor TAutoRepository.Destroy;
begin
if(DesignerForm <> Nil) then
FreeNotification(DesignerForm);
DestroyDBDefControls;
FListDefControls.Free;
DestroyGridTemplates;
DestroyPanelTemplates;
FListDefGrids.Free;
FListDefPanels.Free;
FLinks.Free;
FDefDataSets.Free;
inherited Destroy;
end;
procedure TAutoRepository.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if(Operation = opRemove) and (AComponent is TDataSet) then
FDefDataSets.RemoveDataSet(TDataSet(AComponent));
end;
{$IFDEF DELPHI3_0}
procedure TAutoRepository.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
i: Integer;
begin
for i := 0 to FListDefControls.Count - 1 do
if DBDefControls[i].Owner = Root then Proc(DBDefControls[i]);
for i := 0 to FListDefGrids.Count - 1 do
if GridTemplates[i].Owner = Root then Proc(GridTemplates[i]);
for i := 0 to FListDefPanels.Count - 1 do
if PanelTemplates[i].Owner = Root then Proc(PanelTemplates[i]);
end;
{$ELSE}
procedure TAutoRepository.GetChildren(Proc: TGetChildProc);
var
i: Integer;
begin
for i := 0 to FListDefControls.Count - 1 do
if DBDefControls[i].Owner <> self then Proc(DBDefControls[i]);
for i := 0 to FListDefGrids.Count - 1 do
if GridTemplates[i].Owner <> self then Proc(GridTemplates[i]);
for i := 0 to FListDefPanels.Count - 1 do
if PanelTemplates[i].Owner <> self then Proc(PanelTemplates[i]);
end;
{$ENDIF}
procedure TAutoRepository.SetName(const Value: TComponentName);
var
OldName : TComponentName;
i : Integer;
procedure SetChildComponentName(AItem : TComponent);
Var
ItemName, NamePrefix : TComponentName;
begin
if AItem.Owner = Owner then begin
ItemName := AItem.Name;
NamePrefix := itemName;
if Length(NamePrefix) > Length(OldName) then begin
SetLength(NamePrefix, Length(OldName));
if CompareText(OldName, NamePrefix) = 0 then begin
System.Delete(itemName, 1, Length(OldName));
System.Insert(Value, itemName, 1);
try
AItem.Name := itemName;
except
on EComponentError do
end;
end;
end;
end;
end;
begin
OldName := Name;
inherited SetName(Value);
if (csDesigning in ComponentState) and (Name <> OldName) then begin
for i := 0 to DBDefControlCount - 1 do
SetChildComponentName(DBDefControls[i]);
for i := 0 to GridTemplateCount - 1 do
SetChildComponentName(GridTemplates[i]);
for i := 0 to PanelTemplateCount - 1 do
SetChildComponentName(PanelTemplates[i]);
end;
end;
function TAutoRepository.CreateDBDefControl(AControlType : TAutoDBDefControlType) : TAutoDBDefControl;
Var
i : Integer;
begin
Result := GetDBDefControlClass(AControlType).Create(self.Owner);
Result.Repository := self;
i := GetDBDefControlCount;
while i <> -1 do
try
Result.Name := Name + 'Control' + IntToStr(i);
i := -1;
except
Inc(i);
end;
end;
function TAutoRepository.CreateGridTemplate : TAutoRepositoryChild;
Var
i : Integer;
AGridTemplate : TAutoDBGridTemplate;
begin
AGridTemplate := TAutoDBGridTemplate.Create(self.Owner);
AGridTemplate.Repository := self;
i := GetGridTemplateCount;
while i <> -1 do
try
AGridTemplate.Name := Name + 'Grid' + IntToStr(i);
i := -1;
except
Inc(i);
end;
Result := AGridTemplate;
end;
function TAutoRepository.CreatePanelTemplate : TAutoRepositoryChild;
Var
i : Integer;
APanelTemplate : TAutoDBPanelTemplate;
begin
APanelTemplate := TAutoDBPanelTemplate.Create(self.Owner);
APanelTemplate.Repository := self;
i := GetPanelTemplateCount;
while i <> -1 do
try
APanelTemplate.Name := Name + 'Panel' + IntToStr(i);
i := -1;
except
Inc(i);
end;
Result := APanelTemplate;
end;
procedure TAutoRepository.AddObjectLink(AControl : TObject);
begin
if(FLinks.IndexOf(AControl) < 0) then
FLinks.Add(AControl);
end;
procedure TAutoRepository.DestroyObjectLink(AControl : TObject);
begin
FLinks.Remove(self);
end;
function TAutoRepository.GetDefDataSetCount : Integer;
begin
Result := FDefDataSets.Count;
end;
function TAutoRepository.GetDBDefControlCount : Integer;
begin
Result := FListDefControls.Count;
end;
function TAutoRepository.GetGridTemplateCount : Integer;
begin
Result := FListDefGrids.Count;
end;
function TAutoRepository.GetPanelTemplateCount : Integer;
begin
Result := FListDefPanels.Count;
end;
function TAutoRepository.GetDBDefControl(Index : Integer) : TAutoDBDefControl;
begin
if(Index > -1) And (Index < FListDefControls.Count) then
Result := TAutoDBDefControl(FListDefControls[Index])
else Result := Nil;
end;
function TAutoRepository.GetGridTemplate(Index : Integer) : TAutoRepositoryChild;
begin
if(Index > -1) And (Index < FListDefGrids.Count) then
Result := TAutoRepositoryChild(FListDefGrids[Index])
else Result := Nil;
end;
function TAutoRepository.GetPanelTemplate(Index : Integer) : TAutoRepositoryChild;
begin
if(Index > -1) And (Index < FListDefPanels.Count) then
Result := TAutoRepositoryChild(FListDefPanels[Index])
else Result := Nil;
end;
procedure TAutoRepository.SetDefDataSets(Value : TAutoDefDataSets);
begin
FDefDataSets.Assign(Value);
end;
procedure TAutoRepository.AddDBDefControl(ADBDefControl : TAutoDBDefControl);
begin
FListDefControls.Add(ADBDefControl);
end;
procedure TAutoRepository.AddGridTemplate(AGridTemplate : TAutoRepositoryChild);
begin
FListDefGrids.Add(AGridTemplate);
end;
procedure TAutoRepository.AddPanelTemplate(APanelTemplate : TAutoRepositoryChild);
begin
FListDefPanels.Add(APanelTemplate);
end;
procedure TAutoRepository.DestroyDBDefControls;
var
Item: TAutoDBDefControl;
begin
while FListDefControls.Count > 0 do
begin
Item := FListDefControls.Last;
RemoveDBDefControl(Item);
Item.Free;
end;
end;
procedure TAutoRepository.DestroyGridTemplates;
var
Item: TAutoRepositoryChild;
begin
while FListDefGrids.Count > 0 do
begin
Item := FListDefGrids.Last;
RemoveGridTemplate(Item);
Item.Free;
end;
end;
procedure TAutoRepository.DestroyPanelTemplates;
var
Item: TAutoRepositoryChild;
begin
while FListDefPanels.Count > 0 do
begin
Item := FListDefPanels.Last;
RemovePanelTemplate(Item);
Item.Free;
end;
end;
procedure TAutoRepository.RemoveDBDefControl(ADBDefControl : TAutoDBDefControl);
begin
RemoveDBDefControlFields(ADBDefControl);
FListDefControls.Remove(ADBDefControl);
end;
procedure TAutoRepository.RemoveGridTemplate(AGridTemplate : TAutoRepositoryChild);
begin
FListDefGrids.Remove(AGridTemplate);
end;
procedure TAutoRepository.RemovePanelTemplate(APanelTemplate : TAutoRepositoryChild);
begin
FListDefPanels.Remove(APanelTemplate);
end;
procedure TAutoRepository.RemoveDBDefControlFields(ADBDefControl : TAutoDBDefControl);
Var
i, j : Integer;
begin
for i := 0 to FDefDataSets.Count - 1 do begin
j := 0;
while j < FDefDataSets[i].FDefFields.Count do
if(FDefDataSets[i].FDefFields[j].DBDefControl = ADBDefControl) then
FDefDataSets[i].FDefFields[j].Free
else Inc(j);
end;
end;
function TAutoRepository.GetGridTemplateByDataSet(ADataSet : TDataSet) : TAutoRepositoryChild;
Var
i : Integer;
begin
Result := Nil;
for i := 0 to FListDefGrids.Count - 1 do
if(GridTemplates[i].GetDataSet = ADataSet) then begin
Result := GridTemplates[i];
break;
end;
end;
procedure TAutoRepository.GetGridTemplatesByDataSet(ADataSet : TDataSet; AList : TList);
Var
i : Integer;
begin
AList.Clear;
for i := 0 to FListDefGrids.Count - 1 do
if(GridTemplates[i].GetDataSet = ADataSet) then
AList.Add(GridTemplates[i]);
end;
function TAutoRepository.GetPanelTemplateByDataSet(ADataSet : TDataSet) : TAutoRepositoryChild;
Var
i : Integer;
begin
Result := Nil;
for i := 0 to FListDefPanels.Count - 1 do
if(PanelTemplates[i].GetDataSet = ADataSet) then begin
Result := PanelTemplates[i];
break;
end;
end;
procedure TAutoRepository.GetPanelTemplatesByDataSet(ADataSet : TDataSet; AList : TList);
Var
i : Integer;
begin
AList.Clear;
for i := 0 to FListDefPanels.Count - 1 do
if(PanelTemplates[i].GetDataSet = ADataSet) then
AList.Add(PanelTemplates[i]);
end;
initialization
Classes.RegisterClasses([TAutoDBDefControl]);
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?