Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zur Laufzeit Comboboxen hinzufügen (https://www.delphipraxis.net/203408-zur-laufzeit-comboboxen-hinzufuegen.html)

Luckie 15. Feb 2020 15:19

AW: Zur Laufzeit Comboboxen hinzufügen
 
Jetzt noch das Erstellen in eine separate Methode aufrufen, die von der Schaltfläche aufgerufen wird mit der Position usw. als Parameter und man kann den Code universell einsetzten.

DeddyH 15. Feb 2020 15:56

AW: Zur Laufzeit Comboboxen hinzufügen
 
Dann aber bitte die Liste noch als Feld es Formulars deklarieren, in dessen FormCreate erzeugen und im FormDestroy wieder freigeben, sonst bekommt man ganz schnell Kummer, wenn das Formular dynamisch erzeugt und freigegeben wird.

Luckie 15. Feb 2020 16:11

AW: Zur Laufzeit Comboboxen hinzufügen
 
Das gehört eigentlich nicht mehr dazu. Vielleicht will ja jemand die Comboboxen anders verwalten. In einem statischen Array oder in einer Objektliste oder...Aber das ist der Basiscode, den man auf alle Fälle benötigt.

KodeZwerg 17. Feb 2020 07:27

AW: Zur Laufzeit Comboboxen hinzufügen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1457597)
Delphi-Quellcode:
  cb := TComboBox.Create(cbPnl);
  cb.Parent := Self;

Sollte genau andersrum sein, Wein und Delphi verträgt sich nicht :-)
Also
Delphi-Quellcode:
  cb := TComboBox.Create(Self);
  cb.Parent := cbPnl;
Self steht in diesem Fall für's aktuelle Formular, wenn man den Schnippsel als methode verfrachtet sollte "Self" mit 'nem Formular-Bezeichner ausgetauscht werden und als Parent halt ein Control oder Formular angeben.

Joar, die cbList in Formular Klasse mit rein, das macht Sinn, mein Fehler! (keine Ironie)

Ich hätte gerne noch 'ne mini Erklärung warum Liste.Create/.Free eher in FormCreate/Destroy rein sollte.
initialization/finalization ist doch eigentlich 'ne super stelle dafür, finde ich.

haentschman 17. Feb 2020 07:37

AW: Zur Laufzeit Comboboxen hinzufügen
 
Zitat:

cbList in Formular Klasse mit rein, das macht Sinn
Zitat:

warum Liste.Create/.Free eher in FormCreate/Destroy rein sollte
...deswegen. :zwinker:

DeddyH 17. Feb 2020 07:39

AW: Zur Laufzeit Comboboxen hinzufügen
 
Wenn das Formular und die Liste unterschiedliche Lebenszyklen haben, dann hat man recht schnell tote Referenzen in der Liste. Sobald der Parent/Owner der ComboBoxen freigegeben wird, gibt dieser auch die ComboBoxen frei. Diese stehen aber weiterhin in der Liste. Da macht es doch eher Sinn, die Lebenszyklen der Liste und des Formulars anzugleichen, außerdem braucht man dann auch keine globale Variable mehr.

KodeZwerg 17. Feb 2020 07:45

AW: Zur Laufzeit Comboboxen hinzufügen
 
Super erläuterung und klar Formular Feld an Lebensdauer des Formulars binden macht Sinn.
Danke Euch!

himitsu 17. Feb 2020 12:08

AW: Zur Laufzeit Comboboxen hinzufügen
 
Eine TComponentList könnte man auch verwenden.
Wird eine Komponente (TComponent) freigegeben, dann wird sie autoamtisch aus der Liste entfernt.

TComponent haben ein Notify-System, um sich gegenseitig über ihre Freigabe zu informieren, z.B. Property auf nil zu setzen oder sich aus den Listen der Components und Controls ihrer Parents zu entfernen.

Und in den NextGen-Compilern (Android, iOS) gibt es Weak-Referenzen, die werden automatisch auf nil gesetzt, wenn man die Komponente freigibt.

KodeZwerg 17. Feb 2020 14:39

AW: Zur Laufzeit Comboboxen hinzufügen
 
Zitat:

Zitat von Luckie (Beitrag 1457602)
...in eine separate Methode aufrufen...

da hab ich mir auch shon ein paar gedanken gemacht aber weiß momentan noch nicht so genau wie man es am elegantesten löst.
ich würde mir eine separate unit erzeugen mit einer type dynCreate = record deklaration und darin funktionen wie "ComboBox" definieren, aber wie ich die verschiedensten möglichkeiten einer verwaltung implementiere, da bin ich ratlos.
für den TE sollte das bereits vorhandene ausreichen denk ich mal.

jus 18. Feb 2020 10:58

AW: Zur Laufzeit Comboboxen hinzufügen
 
Zitat:

Zitat von himitsu (Beitrag 1457686)
Eine TComponentList könnte man auch verwenden.
Wird eine Komponente (TComponent) freigegeben, dann wird sie autoamtisch aus der Liste entfernt.

TComponent haben ein Notify-System, um sich gegenseitig über ihre Freigabe zu informieren, z.B. Property auf nil zu setzen oder sich aus den Listen der Components und Controls ihrer Parents zu entfernen.
.....

Wie könnte so ein Notify-System aussehen? Ich bin schon paar paar Mal in fremde Sourcen darüber gestolpert, aber so richtig kapiert habe das nicht. Ich wäre sehr interesiert wie man das mit einer Liste mit Notify realisiert :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.
Seite 3 von 4     123 4      

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