Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array aus TComponents/TControl ? (https://www.delphipraxis.net/37366-array-aus-tcomponents-tcontrol.html)

zack0r 5. Jan 2005 00:57


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:
EditsLK: array[1..3] of TEdit;
vor.

Meine Procedure sieht folgendermaßen aus:
Delphi-Quellcode:
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.}
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:
Delphi-Quellcode:
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;
Leider gibt der Compiler jetzt nur "Inkompatible Typen" aus... :(
Hat vielleicht jemand ne Idee? Bin ich komplett aufm "Holzweg"? Kann mir jemand helfen?

Danke im Vorraus :)

Kamephis 5. Jan 2005 01:52

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);

zack0r 5. Jan 2005 17:39

Re: Array aus TComponents/TControl ?
 
ok danke es geht :)

zack0r 5. Jan 2005 19:36

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:
TGroupbox(groupboxes[1])
und mit
Delphi-Quellcode:
TGroupBox(Findcomponent('groupbox9'))
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?

Danke im vorraus :)

zack0r 9. Jan 2005 21:18

Re: Array aus TComponents/TControl ?
 
kann mir keiner helfen? kann jetz auch nicht mehr auf die Edit-Werte zugreifen. Wie mach ich das?

MFG

SirThornberry 9. Jan 2005 21:24

Re: Array aus TComponents/TControl ?
 
aber die Edits werden weiterhin angelegt? Also du musst den Parent der Edits schon auf die
Delphi-Quellcode:
TGroupbox(groupboxes[9])
setzen. Hast du den Parent von den Grupboxes auch gesetzt?

zack0r 9. Jan 2005 21:33

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:
TGroupBox(groupboxes[1])
aber wenn ich jetzt versucht berechnungen mit den inhalten der Editfelder durchzuführen passiert nicht. ich spreche die komponenten an mit
Delphi-Quellcode:
TEdit(EditsLK[i]).Text
MFG


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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