AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zur Laufzeit Comboboxen hinzufügen

Ein Thema von KomischerKautz · begonnen am 14. Feb 2020 · letzter Beitrag vom 21. Feb 2020
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.923 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:07
Zitat:
[...] Comboboxen hinzufügen, dabei soll bei jedem weiteren Click eine neue Combobox unter der vorherigen angehängt werden.
Noch erfüllt keins der Beispiele diese Anforderung. Das Prinzip ist aber ersichtlich.
Für meins dann so in etwa... bezeichner könnten falsch sein, immer noch nur notepad..
Delphi-Quellcode:
var
  Form1: TForm1;
  cbList: TList;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  cbList := TList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cb: TComboBox;
begin
  cb := TComboBox.Create(self);
  cb.Parent := self;
  cb.Top := (cbList.Count * (cb.Height + 3));
  // weitere eigenschaften setzen
  cbList.Add(cb);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer;
begin
// einfach mal testen ob's nötig ist, ich möchte mich nicht festlegen
  for i := 0 to cbList.Count-1 do
    TComboBox(cbList[i]).Free;
  cbList.Free;
end;
Im FormCreate Liste erzeugen und im FormClose freigeben? Viel Spaß bei der Fehlersuche. Und wie schon mehrfach erwähnt muss man die Komponenten nicht selbst freigeben, wenn man ihnen einen Owner und/oder einen Parent zugewiesen hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.348 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:24
Moin...
...nur zur Sicherheit: Delphi-Version: 7
Hast du die Möglichkeit auf die aktuelle Community Edition zu wechseln? Ich tippe darauf, daß du mit dem Lernen noch am Anfang stehst.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
185 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:28
Seit wann ist der Parent für die Freigbae zuständig?! Das wird über den Owner gesteuert und nicht über den Parent. Wenn der Parent freigegeben wird, ist das enhaltene Objekt nach wie vor vorhanden und kann einfach an einen anderen Parent angehängt werden. Würde das durch den Parent gesteuert, würde viel eigener Code nicht mehr laufen, da ich in der Regel solche Sachen selber im Constructor erstelle und ich da keinen Owner im Create angebe. So hat man die volle Kontrolle über den Lebenszyklus einer eigenen Komponente und kann diese im Destructor der Komponente, innerhalb derer man das Object ertstellt hat, wieder freigeben. Mit dem Parent den man setzt hat das eigentlich nichts zu tun.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.923 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:35
Aus der Vcl.Controls.pas (Destruktor von TWinControl):
Zitat:
Delphi-Quellcode:
  I := ControlCount;
  while I <> 0 do
  begin
    Instance := Controls[I - 1];
    Remove(Instance);
    Instance.Destroy;
    I := ControlCount;
  end;
Besser erst nachsehen, bevor man Behauptungen aufstellt. Ich hatte mir vor Jahren mal die Mühe gemacht, seit wann das so ist, und konnte ähnlichen Code bereits in Delphi 6 finden, ältere Versionen hatte ich nicht untersucht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.267 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:37
Seit wann ist der Parent für die Freigbae zuständig?! Das wird über den Owner gesteuert und nicht über den Parent
Leider schon immer. Ich war auch geschockt, beim Versuch zur Laufzeit eine Komponente zeitweise auf eine andere Form zu verschieben. (muß man erst den Parent abhängen und dann die Form freigeben)

Der Schuldige:
Delphi-Quellcode:
destructor TWinControl.Destroy;
begin
  ...
  I := ControlCount;
  while I <> 0 do
  begin
    Instance := Controls[I - 1];
    Remove(Instance);
    Instance.Destroy; <<<<<
    I := ControlCount;
  end;
  ...
end;
.Controls für Parent und .Components bei Owner

Logisch ist es ein reiner Fail, aber ich vermute es ist als Kackfix gedacht, für zur Laufzeit erstellte Komponenten, wo die Entwickler zu doof sind den Owner anzugeben.
Ich hätte lieber das Speicherleck, als unverständlich verschwindende Komponenten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (14. Feb 2020 um 14:41 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.529 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#16

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:42
TWinControl kapselt ein Control der Win32-API. Diese kennen keinen Owner, sondern nur eine Parent, der für beides zuständig ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.267 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 14:51
TWinControl ist aber nicht unbedingt an die Lebensdauer des eingebetten Controls gekoppelt.
Der Innere kann sogar zwischendurch mal verschwinden und wird neu erstellt. (drum halten die Delphi-Controls auch alle Daten doppelt)
Stell mal bei einer Form das StayOnTop um und erlebe, wie das Fenster und sein Inhalt freigebeben und neu erstellt wird ... drum darf man sowas wie z.B. eigene Registrierungen für Drag&Drop nicht im Constructor machen, sondern besser in CreateWnd bzw. CreateWindowHandle.
Ich sehe da keinen Grund, dieses Verhalten daher im Delphi nachbauen zu müssen, wo es dort ja schließlich den Owner gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
615 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 18:53
Man sollte aber noch den Parent setzen, damit sie auch gezeichnet wird und den Owner, damit der Owner das Zerstören übernimmt.
Hast du dir das erste Codebeispiel mal angeschaut?
Das wird dort beides gesetz. Einmal per COnstructor und dann noch separat
der Parent per Zuweisung.

Das einzige was einen stören könnte wäre, dass der COde als Prozedur und nicht als Methode umgesetzt ist.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.586 Beiträge
 
Delphi 2006 Professional
 
#19

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 19:37
Das hat er nach meinem Hinweis nachträglich eingefügt.

Vergleiche:
Timestamp seines Beitrages
Timestamp meines Beitrages
Timestamp seines Änderung

Und er hat den Änderungsgrund sogar genannt.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (14. Feb 2020 um 19:47 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
615 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 15. Feb 2020, 12:18
Super! Das funktioniert einwandfrei. Vielen Dank für euere Hilfe!
Nun abschließend noch; den Inhalt von Comboboxen fülle ich ja normalerweise in der StringList der Combobox in den Properties. Das funktioniert hier wie es scheint nicht, da ja noch keine Combobox vorhanden ist, welche ich füllen kann.
Wie kann ich nun den Inhalt aller erzeugter Comboboxen vorbestimmen?
Wie schon geschrieben über die Items:

Combo.Items.Add('erster Eintrag');
Combo.Items.Add('zweiter Eintrag');
Combo.ItemIndex := 1; // Vorselektion 2. Eintrag, falls gewünscht
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf