![]() |
Elemente zur Laufzeit erzeugen
Hallo,
ich bin gerade dabei ein Programm zu schreiben, das fast alle Elemente zur Laufzeit selbst erzeugen soll (statt alles im Editor zusammenzuklicken). z.B.:
Delphi-Quellcode:
Es gibt dafür ein Konstanten-Array (GroupCoords ist ein Array mit Records mit L,T,W,H,N) mit den entsprechenden Daten.
for i:=1 to 4 do begin
GroupBoxX[i]:=tGroupBox.Create(TabSheet1); GroupBoxX[i].Parent:=TabSheet1; GroupBoxX[i].SetBounds( GroupCoords[i].L, GroupCoords[i].T, GroupCoords[i].W, GroupCoords[i].H ); GroupBoxX[i].Caption:=GroupCoords[i].N; GroupBoxX[i].Tag:=i; end; for i:=5 to 8 do begin GroupBoxX[i]:=tGroupBox.Create(TabSheet2); GroupBoxX[i].Parent:=TabSheet2; GroupBoxX[i].SetBounds( GroupCoords[i].L, GroupCoords[i].T, GroupCoords[i].W, GroupCoords[i].H ); GroupBoxX[i].Caption:=GroupCoords[i].N; GroupBoxX[i].Tag:=i; end; Leider muß ich bei Create und Parent das Ziel direkt angeben. Gibt es eine Möglichkeit, wie ich die beiden Angaben auch im Record unterbringen kann? Das würde den Code um einiges verkürzen. Vielen Dank Beste Grüße |
AW: Elemente zur Laufzeit erzeugen
Bastel dir einen eigenen "Constructor", für Ableitungen der gewünschten Komponenten,
bzw. als Class-Helper für alle TComponent.
Delphi-Quellcode:
Dort kannst du selbst entschreiden, was du wie übergeben willst ... auch Records.
type
TComponentCreateHelper = class helper for TComponent class function Create(...): TComponent; overload; static; // oder class function Create<T>(...): T; overload; static; end; |
AW: Elemente zur Laufzeit erzeugen
Du hast da im Prinzip das gleiche Problem wie der VCL DFM-File Loader. Im DFM-File ist der Name des Parent-Controls als Text gespeichert und wird beim Laden per FindComponent-Methode des Owner-Forms zu einer Objektreferenz aufgelöst. Du kannst das genauso machen: Speichere die Namen (Name-Property)von zu verwendendem Owner und Parent in Feldern des Records. Das Ganze ist aber ziemlich fragil wenn der Name einer der Komponenten im Designer geändert wird; bau da eine Fehlerbehandlung in deine Laderoutine ein falls FindComponent was nicht findet.
|
AW: Elemente zur Laufzeit erzeugen
Danke für die Anregungen.
Aber ich hab's nun doch etwas anders gelöst. Nochmals Danke. Beste Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz