Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Parent Child Verbindungen, Objekte vom Parent im Child ? (https://www.delphipraxis.net/124802-parent-child-verbindungen-objekte-vom-parent-im-child.html)

hronny 25. Nov 2008 14:44


Parent Child Verbindungen, Objekte vom Parent im Child ?
 
Ich möchte ein Objekt erzeuge, dass z.B ein Panel über die komplette Form geht und darauf andere Objekte gelegt werden. Dazu habe ich diese Unit gebastelt:
Delphi-Quellcode:
type
  {* Eltern *}
  TVaterPanel = class(TControl)
  private
    FGridActive : Boolean;
   FGridSize  : Integer;
  protected
    ...
  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
    property GridActive: Boolean read FGridActive write FGridActive;
    property GridSize: Integer read FGridSize write FGridSize;
  end;
 
  {* Kind *}
  TKindControl = class(TControl)
  private
    ...
  protected
    ...
   procedure MouseDown (Button: TMouseButton; Shift: TShiftState;
                        X, Y: Integer); override;
   ...
  public
    ...
  end;
 
procedure Register;

implementation

constructor TVaterPanel.Create(Owner: TComponent);
begin
  inherited Create(Owner);
  FGridActive := False;
  FGridSize := 5;
end;

destructor TVaterPanel.Destroy;
begin
  inherited Destroy;
end;

procedure TKindControl.MouseDown (Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  {* Wenn im TVaterPanel.FGridActive = True ist, mache *}
    {* dies * }
  {* sonst *}
    {* das *}
  {* end *}
end;
dann die Unit einbinden und die Objekte zur Laufzeit erzeugen.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ...
  public
    vater: TVaterPanel;
    kind1: TKindControl;
    kind2: TKindControl;
    ...

  vater := TVaterPanel.Create( Self );
  vater.Left := 50;
  vater.Width := 200;
  vater.Height := 50;
  vater.Name := 'vater1';
  vater.Parent := Form1;

  kind1 := TKindControl.Create( Self );
  kind1.Left := 50;
  kind1.Top := 102;
  kind1.Width := 200;
  kind1.Height := 50;
  kind1.Name := 'kind1';
  kind1.Parent := vater;
Mein Problem ist ja, wie kann ich innerhalb der Unit an Parentobjekte ran?

mkinzler 25. Nov 2008 14:49

Re: Parent Child Verbindungen, Objekte vom Parent im Child ?
 
Sollten unter
Delphi-Quellcode:
vater.controls[]
findbar sein

DeddyH 25. Nov 2008 14:54

Re: Parent Child Verbindungen, Objekte vom Parent im Child ?
 
Ich bin nicht ganz sicher, ob ich Dich richtig verstanden habe, aber ich würde das Kindobjekt ein wenig erweitern.
Delphi-Quellcode:
TKindControl = class(TControl)
  private
    ...
    FVater: TVaterPanel;
  protected
    ...
   procedure MouseDown (Button: TMouseButton; Shift: TShiftState;
                        X, Y: Integer); override;
   ...
  public
    ...
    constructor Create(AOwner: TComponent; AVater: TVaterPanel);
    property Vater: TVaterPanel read FVaterPanel;
  end;

hronny 26. Nov 2008 08:14

Re: Parent Child Verbindungen, Objekte vom Parent im Child ?
 
Ja so ist es richtig, nur hab ich warscheinlich ein bisschen falsch ausgedrückt gehabt :wink: . Nun ist es so das ich das Kindcontrol erweitert habe um das property
Delphi-Quellcode:
TKindControl = class(TControl)
  private
    FVaterPanel: TVaterPanel;
  public
   property Vater: TVaterPanel read FVaterPanel write FVaterPanel;
   ...
Und in der Form weise ich dann das VaterPanel zu
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ...
    public
      vaterpanel: TVaterPanel;
      kindpanel1: TKindControl;
      kindpanel2: TKindControl;
    ...
procedure TForm1.Button1Click(Sender: TObject);
begin
  kindpanel1 := THighLightControl.Create( Self );
  kindpanel1.Left := 40;
  kindpanel1.Top := 20;
  kindpanel1.Width := 200;
  kindpanel1.height := 50;
  kindpanel1.Name := 'testpanel1';
  kindpanel1.Parent := Form1;
  kindpanell.vater := vaterpanel;
  kindpanel1.Visible := true;
end
Das gleiche mach ich dann mit den anderen kindpanels. Dann kann ich im KindControl auf die Eigenschaften vom Vater zurückgreifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz