Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Steuerelementefeld zur Entwicklungszeit (https://www.delphipraxis.net/78629-steuerelementefeld-zur-entwicklungszeit.html)

Guido Eisenbeis 8. Okt 2006 12:39


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.

DGL-luke 8. Okt 2006 13:31

Re: Steuerelementefeld zur Entwicklungszeit
 
Du redest von "array of TControl"? Würde ich so machen:

Delphi-Quellcode:
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;
"Sammelt" alle Controls, die in einem Container (Parent) liegen und von einer bestimmten Klasse (OfClass) sind. Sollte es.

Guido Eisenbeis 8. Okt 2006 23:50

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.

Marphy 9. Okt 2006 13:01

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: Control-Array / Laden von Controls zur Laufzeit (das waren noch Zeiten... :wink:)

Ereignisse kannst du ganz normal zuweisen über
Delphi-Quellcode:
MyControls[i].OnMyEvent := MyEventHandler;
Grüße, Marco

Guido Eisenbeis 9. Okt 2006 22:36

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 Control-Array / Laden von Controls zur Laufzeit verstehe, entspricht das einer VB-Collection!?


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: Accessing a group of design-time created components using an array
Run - Time : Accessing a group of run-time created components using an array

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.

Marphy 10. Okt 2006 11:54

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

Guido Eisenbeis 10. Okt 2006 21:44

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 17:39 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