![]() |
Array aus TComponents/TControl ?
Hallo ich habe folgendes Problem:
ich wollte ne procedure schreiben, mit der ich verschiedene Komponenten zur Laufzeit (quasi dynamisch) erstelle. Die Komponenten, die ich erstellen will liegen in mehreren Arrays, der form
Delphi-Quellcode:
vor.
EditsLK: array[1..3] of TEdit;
Meine Procedure sieht folgendermaßen aus:
Delphi-Quellcode:
Mein Problem ist jetz, dass ich nicht weiss, wie ich die Variablen setzten soll. Weil so muss ich für jedes Komponentenarray, die ich eigentlich bequem per Procedure erstellen wollte, den selben Ablauf wie oben nochmal schreiben. Ich hab ein wenig rumprobiert und versucht ein array aus TControlClass zu machen:
procedure TForm1.CompCreate(Comp: string; settParent: TWinControl; settWidth: integer; settLeft: integer; settHeight: integer; settName: string; settText: string; settTop: integer; i: integer);
begin if Comp = 'EditsLK' then begin EditsLK[i] := TEdit.Create(self); with EditsLK[i] do begin Parent := settParent; Width := settWidth; Left := settLeft; Height := settHeight; Name := settName; Text := settText; Top := settTop; end; end; {....usw.}
Delphi-Quellcode:
Leider gibt der Compiler jetzt nur "Inkompatible Typen" aus... :(
procedure TForm1.CompCreate(Comp: TControl; CompArray: array of TControlClass; settParent: TWinControl; settWidth: integer; settLeft: integer; settHeight: integer; settName: string; settText: string; settTop: integer; i: integer);
begin CompArray[i] := Comp.Create(self); with CompArray[i] do begin Parent := settParent; Width := settWidth; Left := settLeft; Height := settHeight; Name := settName; Caption := settText; Top := settTop; end; end; Hat vielleicht jemand ne Idee? Bin ich komplett aufm "Holzweg"? Kann mir jemand helfen? Danke im Vorraus :) |
Re: Array aus TComponents/TControl ?
1) wenn Du die Componenten eh in einen Array verwaltest würde ich die Zuweisung des Komponentennamens weglassen, ist nur fehleranfällig
2) das führt in etwa zu folgenden, ungetesteten Codeschnippsel:
Delphi-Quellcode:
arrCtrl: array[1..3] of TControl procedure TForm1.CompCreate(CompClass: TControlClass; CompArray: array of TControl; settParent: TWinControl; settWidth: integer; settLeft: integer; settHeight: integer; settTop: integer; settText: string; i: integer); begin CompArray[i] :=CompClass.Create(self); with CompArray[i] do begin Parent := settParent; Width := settWidth; Left := settLeft; Height := settHeight; Top := settTop; if CompClass.ClassNameIs('TEdit') Then TEdit(CompArray[i]).Text := settText; if CompClass.ClassNameIs('TLabel') Then TLabel(CompArray[i]).Caption := settText; ... [weitergehende Eigenschaften müssen entsprechend auf der gecasteten Komp. zugewíesen werden] end; ... Aufruf sollte dann so gehen CompCreate(TEdit, arrCtrl, Panel1,10,10,21,10,'Text',1); |
Re: Array aus TComponents/TControl ?
ok danke es geht :)
|
Re: Array aus TComponents/TControl ?
Ok nächste Frage: Ich hab mit der Procedure jetz eine Groupbox erstellt, in der ich Edits und Labels anzeigen lassen will. Was muss ich für die (auch dynamisch erstellten) Edits und Labels als Parent einstellen? Habs Probiert mit
Delphi-Quellcode:
und mit
TGroupbox(groupboxes[1])
Delphi-Quellcode:
aber nichts tut sich. Wenn ich aber eine Groupbox zur Entwurfszeit erstelle und einfach den Namen angebe als Parent für die Edits & Labels werden sie ganz normal erstellt. Was mache ich falsch?
TGroupBox(Findcomponent('groupbox9'))
Danke im vorraus :) |
Re: Array aus TComponents/TControl ?
kann mir keiner helfen? kann jetz auch nicht mehr auf die Edit-Werte zugreifen. Wie mach ich das?
MFG |
Re: Array aus TComponents/TControl ?
aber die Edits werden weiterhin angelegt? Also du musst den Parent der Edits schon auf die
Delphi-Quellcode:
setzen. Hast du den Parent von den Grupboxes auch gesetzt?
TGroupbox(groupboxes[9])
|
Re: Array aus TComponents/TControl ?
erstellt wird jetz alles richtig, die groupboxes werden auf einem Tabsheet erstellt und die Edits & Labels mit Parent auf
Delphi-Quellcode:
aber wenn ich jetzt versucht berechnungen mit den inhalten der Editfelder durchzuführen passiert nicht. ich spreche die komponenten an mit
TGroupBox(groupboxes[1])
Delphi-Quellcode:
MFG
TEdit(EditsLK[i]).Text
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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