![]() |
Gruppen von Controls erzeugen - dynamisch vs. ?
Hallo,
es sollen eine Reihe von gleichförmigen Controls erzeugt werden (30-50 mal eine Gruppe von rund 10 Komponenten: Edit-Felder, Comboboxen natürlich mit Inhalten, etc. das alles versehen mit Events.) Bis dato hab ich das mit dynamisch erzeugten Controls gelöst. Das klappt auch soweit, aber am Ende: so richtig elegant und bequem ist das nicht. Ich finde es schwierig, ohne FindComponent zu arbeiten und das ist bekanntermaßen empfindlich und langsam. Beim Erzeugen braucht es schon Regelwerk was die Eigenschaften der Controls angeht, Positionen, Abstände, etc. Wenn die Anzahl an diesen Komponenten verändert wird, geht das mit einer unbedeutenden aber merklichen Verzögerung einher, es ist relativ viel Aufwand, dass das klappt. Kurz: so richtig ideal erscheint mir das nicht. Was wären Alternativen? Die Gruppe von Controls auf einen Frame packen und den dynamisch erzeugen? Doch einfach alle Design-Time erzeugen und einfach mit visible arbeiten? Oder gibt es noch andere elegante Methoden, Objekte zur Laufzeit zu erzeugen, die dann ohne Findcomponent auskommen? Danke für Inspiration! ;-) |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Dafür bietet sich die seit Delphi 10.4 enthaltene
![]() |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Zitat:
|
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Wenn du schon die Controls dynamisch erzeugts, was spricht dagegen die erzeugten Instanzen einem Array zuzuweisen und über das Array auf die Werte der Controls zugreifen.
Delphi-Quellcode:
Auf die entsprechende Komponente greifst du dann über das Array zu.type TAutolackComponentRow = record Farbname:TEdit; Matt:TCheckbox; Preis:TEdit; end; type TmyForm = class(TForm) procedure FormCreate(Sender: TObject); private fControlRows:Array[0..10] of TAutolackComponentRow; public end; procedure TmyForm.FormCreate(Sender: TObject); var a:Integer; begin for a:=0 to 10 do begin fControlRows[a].Farbname := TEdit.Create(self) // parent, Position setzen etc fControlRows[a].Matt := TCheckbox.Create(self) // parent, Position setzen etc fControlRows[a].Preis := TEdit.Create(self) // parent, Position setzen etc end; end;
Delphi-Quellcode:
fControlRows[1].Farbname.text := 'Blau'; fControlRows[5].Matt.checked := true; fControlRows[7].Preis.checked := '10,25'; for a:=0 to 10 do begin fControlRows[a].Preis.left := 30; fControlRows[a].Preis.top := 25 * a; end; |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Hi zusammen
Und was ist der Unterschied zu TObjectList, ausser dass diese Objekte verschiedener Vorfahren verwalten kann (TControl, TGraphicConrtol etc)? Zitat:
Gruss Delbor |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Zitat:
|
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Zitat:
![]() ![]() |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Zitat:
Zitat:
Wenn ich ein paar Edits zweidimensional auf einem Form plaziere, kann ich über ein zweidimensionales Edit einfacher drauf zugreifen. Beim Erzeugen der Controls kann ich die Arraygröße abfragen. Dann muss ich nur noch das Array vergrößern und du und hast die Menge der Edits angepasst. Ist aber letztendlich Geschmackssache. |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Danke Euch!
Hab das jetzt umgestellt auf die Array-Methode. Das passt hier tatsächlich ganz gut, weil auch die Daten in einem Array landen und das eine gewisse logische Parallele ergibt. In jedem Fall macht es den Code so viel besser lesbar: aus:
Delphi-Quellcode:
SomeClass.SomeArray.ValueTypeID[i] := (FindComponent('cmb_value_' + IntToStr(i) + '_TypeID') As TComboBox).ItemIndex;
wird:
Delphi-Quellcode:
SomeClass.SomeArray.ValueTypeID[i] := MyInputArray[i].ValueTypeID.ItemIndex;
deutlich schneller ist es außerdem. :thumb: |
AW: Gruppen von Controls erzeugen - dynamisch vs. ?
Zitat:
Es ist also ein wenig eingeschränkt was da geht. Das ist aber deshalb so programmiert worden, damit es sehr schnell geht und auch Listen mit tausenden Controls flüssig aufgebaut werden. Das Erzeugen eines Window Handles dauert scheinbar geraume Zeit... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 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