AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Elemente zur Laufzeit erzeugen

Ein Thema von em-sigma · begonnen am 2. Nov 2024 · letzter Beitrag vom 6. Nov 2024
Antwort Antwort
em-sigma

Registriert seit: 8. Jul 2004
40 Beiträge
 
Delphi 2005 Personal
 
#1

Elemente zur Laufzeit erzeugen

  Alt 2. Nov 2024, 19:55
Hallo,

ich bin gerade dabei ein Programm zu schreiben, das fast alle Elemente zur Laufzeit selbst erzeugen soll (statt alles im Editor zusammenzuklicken).

z.B.:
Delphi-Quellcode:
   for i:=1 to 4 do begin
      GroupBoxX[i]:=tGroupBox.Create(TabSheet1);
      GroupBoxX[i].Parent:=TabSheet1;
      GroupBoxX[i].SetBounds(
        GroupCoords[i].L,
        GroupCoords[i].T,
        GroupCoords[i].W,
        GroupCoords[i].H
      );
      GroupBoxX[i].Caption:=GroupCoords[i].N;
      GroupBoxX[i].Tag:=i;
   end;
   for i:=5 to 8 do begin
      GroupBoxX[i]:=tGroupBox.Create(TabSheet2);
      GroupBoxX[i].Parent:=TabSheet2;
      GroupBoxX[i].SetBounds(
        GroupCoords[i].L,
        GroupCoords[i].T,
        GroupCoords[i].W,
        GroupCoords[i].H
      );
      GroupBoxX[i].Caption:=GroupCoords[i].N;
      GroupBoxX[i].Tag:=i;
   end;
Es gibt dafür ein Konstanten-Array (GroupCoords ist ein Array mit Records mit L,T,W,H,N) mit den entsprechenden Daten.
Leider muß ich bei Create und Parent das Ziel direkt angeben.

Gibt es eine Möglichkeit, wie ich die beiden Angaben auch im Record unterbringen kann?
Das würde den Code um einiges verkürzen.

Vielen Dank
Beste Grüße
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)

Geändert von TBx ( 2. Nov 2024 um 20:06 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.009 Beiträge
 
Delphi 12 Athens
 
#2

AW: Elemente zur Laufzeit erzeugen

  Alt 2. Nov 2024, 21:05
Bastel dir einen eigenen "Constructor", für Ableitungen der gewünschten Komponenten,
bzw. als Class-Helper für alle TComponent.

Delphi-Quellcode:
type
  TComponentCreateHelper = class helper for TComponent
    class function Create(...): TComponent; overload; static;
    // oder
    class function Create<T>(...): T; overload; static;
  end;
Dort kannst du selbst entschreiden, was du wie übergeben willst ... auch Records.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
700 Beiträge
 
Delphi 12 Athens
 
#3

AW: Elemente zur Laufzeit erzeugen

  Alt 3. Nov 2024, 13:56
Du hast da im Prinzip das gleiche Problem wie der VCL DFM-File Loader. Im DFM-File ist der Name des Parent-Controls als Text gespeichert und wird beim Laden per FindComponent-Methode des Owner-Forms zu einer Objektreferenz aufgelöst. Du kannst das genauso machen: Speichere die Namen (Name-Property)von zu verwendendem Owner und Parent in Feldern des Records. Das Ganze ist aber ziemlich fragil wenn der Name einer der Komponenten im Designer geändert wird; bau da eine Fehlerbehandlung in deine Laderoutine ein falls FindComponent was nicht findet.
Peter Below

Geändert von TBx ( 3. Nov 2024 um 16:15 Uhr) Grund: Full-Quote entfernt
  Mit Zitat antworten Zitat
em-sigma

Registriert seit: 8. Jul 2004
40 Beiträge
 
Delphi 2005 Personal
 
#4

AW: Elemente zur Laufzeit erzeugen

  Alt Gestern, 16:25
Danke für die Anregungen.
Aber ich hab's nun doch etwas anders gelöst.
Nochmals Danke.

Beste Grüße
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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