Der ist ein bisschen kompliziert. Aber ich versuchs mal.
So erstelle ich das Panel. Diese Prozedur befindet sich in meiner
MDI-Form und soll in diversen Childs aufgerufen werden.
Delphi-Quellcode:
procedure Tfm_haupt.image_status_erstellen(myTop, myLeft : Integer; Besitzer: TComponent; Vater: TWinControl);
Var
PNL : TPanel;
begin
PNL := TPanel.create(Besitzer);
PNL.top := myTop;
PNL.left := myLeft;
PNL.Height := 256;
PNL.Width := 256;
PNL.Name := 'pnl_status';
PNL.Parent := Vater;
PNL.BevelOuter := bvNone;
PNL.Visible := true;
PNL.Caption := 'TESTTESTETESTSTSET';
end
Im Child (fm_personen) habe ich folgenden Code:
Delphi-Quellcode:
procedure Tfm_personen.Button1Click(Sender: TObject);
VAR PNL : TPanel;
begin
fm_haupt.image_status_erstellen(50, 25, fm_personen, pnl_Inhalt);
PNL := pnl_inhalt.FindChildControl('pnl_status') as TPanel;
end;
Das interessante ist: Die
MDI-Children werden alle von einem Formular (Tfm_vorlage) abgeleitet, welches ein pnl_Inhalt mit align := alClient beinhaltet.
Wenn ich was anderes als "pnl_Inhalt" als Parent übergebe (bspw. self, fm_personen oder fm_vorlage
), erhalte ich exceptions beim erstellen.
Mir ist mittlerweile klar, dass die Editfelder das Panel überlagern, da die Parents nicht übereinstimmen. Allerdings kann ich auch nix anderes als Parent angeben.
edit: wenn ich self übergebe, geht es doch. hatte noch ne ehemals auskommentierte zeile vergessen.