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