Autor Beitrag
Brother John
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 28

WinXP
Turbo Delphi Explorer Win32
BeitragVerfasst: Mo 18.06.07 15:25 
Hi.

Ich habe in mehreren Formularen eine ganze Reihe von Comboboxen, die mit sämtlichen ISO-639-2-Sprachen (etwa 480 Stück) gefüllt sind. Am liebsten wäre es mir, diese Liste einmal zentral zu verwalten und auch zu jeder Zeit nur einmal im Speicher zu halten.

Deswegen die Frage. Funktioniert eine solche Konstruktion?
Unit 1:
ausblenden Delphi-Quelltext
1:
2:
var
  LargeList: TStringList;

Unit 2:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Form1.FormCreate(Sender: TObject);
begin
  ComboBox.Items := LargeList;
end;

Die Funktionalität passt. Die Combobox ist dann mit allen Einträgen bestückt. Auch beim Zerstören des Formulars bleibt die LargeList am Leben. So weit, so gut. Nur habe ich den Verdacht, dass irgendwo irgendwann Speicherlecks entstehen. Und wenn dem so ist, kann ich das vermeiden?

_________________
Grüße
Brother John
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 18.06.07 15:44 
Hmmm,

so etwas würde Probleme beim Freigeben der Combo Boxen geben. Beim Free der ersten box würde die Liste mit Frei gegeben werden, bei der Zweiten gibt es dann eine Exception.

Ansonsten wird es sicher schwierig bis unmöglich das ganze an dem property vorbei direkt auf die Variable um zu leiten. Da müsstest du dir wahrscheinlich eine eigene Version von tCustomComboBox ableiten oder so.

Gruß
Klabautermann
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 18.06.07 16:34 
user profile iconKlabautermann hat folgendes geschrieben:
so etwas würde Probleme beim Freigeben der Combo Boxen geben. Beim Free der ersten box würde die Liste mit Frei gegeben werden, bei der Zweiten gibt es dann eine Exception.

Ansonsten wird es sicher schwierig bis unmöglich das ganze an dem property vorbei direkt auf die Variable um zu leiten. Da müsstest du dir wahrscheinlich eine eigene Version von tCustomComboBox ableiten oder so.


Nein, das gibt normalerweise kein Problem. Setter von Objekt-Properties sind in der VCL durchgehend über Assign implementiert. Daswegen funktioniert eine Zuweisung eines anderen Objekts ohne dass es Speicherlecks oder mehrfache Freigaben gibt.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Brother John Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 28

WinXP
Turbo Delphi Explorer Win32
BeitragVerfasst: Mo 18.06.07 18:09 
Stefan, das leuchtet mir ein. Denn die LargeList hat das Zerstören der ComboBox ja einwandfrei überlebt. Das heißt dann also, dass bei
ComboBox.Items := LargeList;
und
ComboBox.Items.Assign(LargeList);
exakt das Selbe passiert, richtig? Dann werde ich wohl das bisschen mehr Speicher und Rechenzeit akzeptieren. Eine eigene Combobox abzuleiten, die ich dann im Turbo Explorer nicht mal visuell verwenden könnte, ist definitiv keine Alternative.

P.S.: Ich merke gerade, bei Turbo Delphi sind ja sämtliche VCL-Quellen dabei! *froi* Da hätte ich auch selber nachschauen können.

_________________
Grüße
Brother John