![]() |
Steuerelementefeld zur Entwicklungszeit
Hallo.
Zum Thema Steuerelemente (Edit, ListView, ...) zur Laufzeit erstellen, habe ich einige Postings gefunden. Die funktionieren auch. Dort steigt der Aufwand allerdings enorm, wenn ich die Controls mit mehreren Ereignissen ausstatten will. Auch um die Positionen der Controls zu "sehen", will ich diese zur Entwicklungszeit als Felder anlegen. Probiert habe ich nun schon einiges. Das wurde jedoch immer mit Exeptions nach dem Motto "Du kummst hier net rein!" quittiert. Also: wie erstelle ich Steuerelementefelder (Controlarrays) zur Entwicklungszeit? Guido. |
Re: Steuerelementefeld zur Entwicklungszeit
Du redest von "array of TControl"? Würde ich so machen:
Delphi-Quellcode:
"Sammelt" alle Controls, die in einem Container (Parent) liegen und von einer bestimmten Klasse (OfClass) sind. Sollte es.
function CollectControls(OfClass: TClass; Parent: TWinControl): array of TControl;
var arraypos: Integer; begin //Init Setlength(Result, Parent.ControlCount); arraypos := 0; //Controls durchsuchen, wenn richtige Klasse gefunden, array hinzufügen for i := 0 Parent.ControlCount -1 do if Parent.Controls[i] is OfClass then begin Result[arraypos] := Parent.Controls[i]; Inc(arraypos); end; //array trimmen Setlength(Result,arraypos+1); end; |
Re: Steuerelementefeld zur Entwicklungszeit
Hallo Lukas.
Zunächst mal danke für die Antwort! Morgen werde ich mir das mal genauer ansehen und ausprobieren. Wie handhabe ich das denn dann mit den Ereignissen? Gruß, Guido. |
Re: Steuerelementefeld zur Entwicklungszeit
Hallo Guido,
willst du nun Lauf- oder Entwicklungszeit? Die üblichen Ansätze und Lukas' Funktion funktionieren natürlich nur zur Laufzeit... Zum Thema siehe auch: ![]() Ereignisse kannst du ganz normal zuweisen über
Delphi-Quellcode:
Grüße, Marco
MyControls[i].OnMyEvent := MyEventHandler;
|
Re: Steuerelementefeld zur Entwicklungszeit
Hallo Lukas, hallo Marco.
Ein besonderer Gruß an Marco! Wir kennen uns schon aus "VB-Zeiten" :cheers: So wie ich den Thread ![]() Grundsätzlich an dieser Stelle vielen Dank für eure Hinweise! Die haben mich auf die richtige Spur gebracht. Um es herauszustellen: Mir geht es hauptsächlich um Steuerelementefelder (Control arrays) zur Design-Time. Dennoch ist das in Delphi sehr eng mit Verwaltungsroutinen zur Run-Time verbunden. Was ich erreichen will, ist das Platzieren und Einrichten von Controls zur Design-Time, die sich als Array verwalten und ansprechen lassen. Beispiel: Vier Editfelder "Edit1", "Edit2", "Edit3" und "Edit4", die sich verwalten lassen wie "Edit[1]", "Edit[2]", "Edit[3]" und "Edit[4]". Ich habe weiter recherchiert und insbesondere der Suchbegriff "Control array" brachte gute Ergebnisse. Design-Time: ![]() Run - Time : ![]() In diesen beiden Artikeln ist einiges an Information enthalten, die genau das oben beschriebene Thema betreffen. Und es gibt Demo zum Downloaden, was ich immer gut finde! Ich werde mich nun damit beschäftigen. Falls es Interessen an diesem Thema gibt und an einer Lösung meinerseits (die ich hoffentlich finde), dann meldet euch hier. Ich halte euch dann über meine Ergebnisse auf dem Laufenden. Guido. |
Re: Steuerelementefeld zur Entwicklungszeit
Hallo Guido,
nun, die ganzen Codes tun nichts anderes als ein Array bereitzustellen, das mit Objektreferenzen auf die einzelnen Komponenten gefüllt ist. D.h., was VB automatisch tut, muss in Delphi erst manuell vorbereitet werden. An sich ist daran aber nichts Besonderes... :gruebel: Gruß, Marco |
Re: Steuerelementefeld zur Entwicklungszeit
Hi Marco.
Das stimmt wohl soweit. Und wie immer im Leben: "Wenn man's weiß, ist's ganz leicht!" :-D In VB sind Control Arrays einfacher anzulegen. In Delphi ist das mit mehr Arbeit verbunden, birgt aber auch sehr mächtige Möglichkeiten. In den oben genannten Artikeln wird auch auf das "Sharen" von Eventhandler hingewiesen. Das wusste ich vorher auch nicht. Jetzt werde ich das in vollen Zügen benutzen. Grüße, Guido. PS: Ich hoffe, dass auch noch Antworten in meinem anderen Thread kommen. Da wo es um das Anordnen der Items in einem VELVEx geht. Matze und marabu haben in anderen Threads schon öfter Hilfe gegeben. Falls ihr das hier lest: Hiiieeelfe! *smile* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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