Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by jbg,
24. Mär 2006
TStrings is eine anstrakte Klasse, die bis auf die nötigen Methodendeklarationen nichts wirkliches zu bieten hat.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by jbg,
24. Mär 2006
Dann schau mal in den Quellcode von Classes.pas. TStringItem baut überhaupt nicht auf TStrings/TStringList auf. Das ist andersherum:
PStringItem = ^TStringItem;
TStringItem = record
FString: string;
FObject: TObject;
end;
Und was ist dann das:
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by jbg,
23. Mär 2006
Und warum nutzt TStringList dann bitte schön ein "händisches" dynamisches Array of TStringItem? Die Text- und CommaText-Eigenschaft durchläuft dieses Array und baut die Strings zu einem Gesamtstring zusammen. Also kann hier die Referenzzählung greifen.
Bei TListBox und TComboBox wird aber keine TStringList benutzt sondern eine spezielle TListBoxStrings bzw. TComboBoxStrings. Und die überlässt...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by jbg,
23. Mär 2006
Das wäre mir neu:
TCustomComboBoxStrings = class(TStrings);
TComboBoxStrings = class(TCustomComboBoxStrings);
Und TStrings speicher die Strings nicht selbst. TComboBoxStrings nutzt SendMessage um die Strings zu setzen bzw. zu lesen.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by jbg,
23. Mär 2006
Stimmt. Daran habe ich gar nicht gedacht, dass ComboBox.Items ja keine TStringList ist sondern eine TComboBoxStrings.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by jbg,
23. Mär 2006
Die Delphi-Strings haben einen Referenzzähler. Und bei "S1 := S2;" wird nichts kopiert, sondern einfach S1 auf Pointer(S2) gesetzt und der Referenzzähler um eins erhöht. Beim kopieren einer Stringliste passiert genau dasselbe. Man braucht also grob Count*SizeOf(TStringItem) = Count*8 Bytes für die Kopie. Und bei 8KB sollten doch wohl noch drinnen sein.