Einzelnen Beitrag anzeigen

Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 12 Athens
 
#3

Re: Eigene Komponente mit TPanel erzeugt ChildControls nicht

  Alt 28. Mai 2009, 17:43
Also ich weiß nicht wie das mit dem "AcceptControls" in deinem Thread ausschaut. Aber ich leite die "Containerkomponente" ja von TCustomPanel ab und dieses sollte das bereits gesetzt haben. In Deinem Fall denke ich, ist das setzen des Wertes im Konstruktor nach dem inherited evtl. etwas spät - vielleicht in CreateParams?

Anyway, ich hab's im Konstruktor meiner Kompo nun so gemacht (Achtung Pseudocode aus dem Kopf - hab's gerade nicht hier greifbar):

Delphi-Quellcode:
type TSlidePanel = class(TCustomPanel)
  private
    FChild: TPanel;
 ...
  published
    property ControlPanel: TPanel read FChild write SetChild;
end;

procedure TSlidePanel.Create(AOwner: TComponent); // override !
var f: TCustomForm;
begin
  inherited Create(AOwner);
 ...
  if (csDesigning in ComponentState) and not assigned(FChild) then begin
    f:= nil;
    if assigned(AOwner) then begin
      if AOwner.inheritsFrom(TCustomForm) then
        f:= TCustomForm(AOwner)
      else
        f:= GetParentForm(AOwner);
    end else
      f:= GetParentForm(Self);
    if assigned(f) then begin
      FChild:= TPanel.Create(f);
      FChild.Parent:= Self;
      ...
      if f.Designer<>nil then
        f.Designer.Modified;
    end;
  end;
 ...
end;
...wobei FChild über eine public published property zugänglich ist.

So geht's eigentlich ganz gut. TPageControl scheint das Hinzufügen von TTabSheets auch ähnlich zu handhaben. Beim Hinzufügen im Designer der IDE wird autom. das ChildPanel als Objekt des besitzenden Forms erzeugt und steht mit allen hinzugefügten Objekten auch im DFM.


Michael
  Mit Zitat antworten Zitat