Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Datentyp von Litbox.Items (https://www.delphipraxis.net/192723-datentyp-von-litbox-items.html)

idefix2 14. Mai 2017 07:52

Datentyp von Litbox.Items
 
TListbox.Items ist vom Typ TStrings. Aber das ist ein abstrakter Typ. Welcher Typ wird da tatsächlich erzeugt?
Ich würde gerne die Liste sortiert haben, aber ein Listbox.Items.sorted gibt es natürlich nicht, weil die Eigenschaft in TStrings noch nicht definiert ist. Kann ich ohne gröbere Umwege (ständiges Hin- und herkopieren zwischen Listbox.Items und einer separaten sortierten Stringlist) zu einer sortierten Listbox kommen, die sortiert bleibt, wenn Elemente hinzugefügt werden?

Bernhard Geyer 14. Mai 2017 08:41

AW: Datentyp von Litbox.Items
 
TListBox.Items stellen nur einen Wrapper um die Implementierung des Windows-Controls dar.
Wenn MS hier keine Funktion zum sortieren vorgesehen hast must du das in Delphi nachbilden.
Oder ein Controll nehmen das komplett in Delphi entwickelt wurde und die Sortierung vorsieht.

himitsu 14. Mai 2017 09:38

AW: Datentyp von ListBox.Items
 
Zitat:

Welcher Typ wird da tatsächlich erzeugt?
Delphi-Quellcode:
ShorMessage(ListBox1.Items.ClassName);
:zwinker:

In einen TStringList umkopieren, sortieren und Zurück ginge auch.

oder
Delphi-Quellcode:
uses System.Generics.Collections;
var Temp: TArray<string>;

Temp := ListBox1.Items.ToStringArray;
TArray.Sort<string>(Temp);
ListBox1.Items.Clear;
ListBox1.Items.AddStrings(Temp);
oder
Delphi-Referenz durchsuchenTListBox.Sorted :roll:

idefix2 14. Mai 2017 10:33

AW: Datentyp von Litbox.Items
 
Zitat:

Zitat von himitsu (Beitrag 1371325)
Zitat:

Welcher Typ wird da tatsächlich erzeugt?
Delphi-Quellcode:
ShorMessage(ListBox1.Items.ClassName);
:zwinker:

Danke. Mit der Frage war natürlich weniger der Name des Typs gemeint, sondern eher, was der Typ eigentlich kann, speziell in Bezug auf das Sortieren.
TListBoxStrings ist leider in meiner Dokumentation nicht berücksichtigt und auch Google liefert keine hilfreichen Ergebnisse.

Zitat:

In einen TStringList umkopieren, sortieren und Zurück ginge auch.
Das geht natürlich immer. Meine Frage war ja explizit: ohne gröbere Umwege (ständiges Hin- und herkopieren zwischen Listbox.Items und einer separaten sortierten Stringlist)

Zitat:

oder
Delphi-Referenz durchsuchen: TListBox.Sorted
:?:


Zitat:

Zitat von Bernhard Geyer (Beitrag 1371321)
TListBox.Items stellen nur einen Wrapper um die Implementierung des Windows-Controls dar.
Wenn MS hier keine Funktion zum sortieren vorgesehen hast must du das in Delphi nachbilden.
Oder ein Controll nehmen das komplett in Delphi entwickelt wurde und die Sortierung vorsieht.

Danke. Ich wollte nur sichergehen, dass ich da nichts übersehen habe, wenn ich jetzt das Pferd von hinten aufzäume.

himitsu 14. Mai 2017 12:07

AW: Datentyp von Litbox.Items
 
Genauso wie TMemoStrings kann der Typ selber nichts.
Er stellt nur eine Schnittstelle zwischen TStrings, also dem Standard-StringListenTyp des Delphi, zur Speicherschnittstelle der Komponente her.
Genauso ist TStringList auch nur eine Schnittstelle zu einem String-Array im Arbeitsspeicher.


TMemo: SendMessage WM_SETTEXT EM_GETLINE EM_GETLINECOUNT ...

TListBox: SendMessage LB_SETITEMDATA LB_GETITEMDATA LB_GETTEXT LB_GETCOUNT ...

Im Falle von TListBox hätte man auch TStringList.Sorted im TListBoxStrings implementieren und an den WindowStyle LBS_SORT weiterleiten können, aber das wäre zu umständlich,
bzw. man hatte Sort direkt im Interface des TStrings bereitstellen müssen, da die öffentliche Schnittstelle des ListBox.Items absichtlich nur TStrings und nicht TListBoxStrings ist.

Zitat:

Zitat von idefix2
Zitat:

Zitat von himitsu

:?:

Hast da mal reingeschaut?
Bevor du noch was übersiehst. :zwinker:

Zitat:

TListBoxStrings ist leider in meiner Dokumentation nicht berücksichtigt und auch Google liefert keine hilfreichen Ergebnisse.
Da ist ein interner und nicht öffentlicher Typ, welcher halt auch nicht offiziell dokumentiert ist. :angle:
Aber im Grunde muß man halt nur wissen was TStrings macht und das Interne ist im Normalfall allen egal.

idefix2 14. Mai 2017 22:17

AW: Datentyp von Litbox.Items
 
Zitat:

Hast da mal reingeschaut?
Bevor du noch was übersiehst.
Ok, ich stelle jetzt zu meiner Verblüffung fest, das es TListbox.sorted doch gibt. Offensichtlich hat bei mir die automatische Codevervollständigung gesponnen, weil "Tlistbox.so" war natürlich das erste, was ich im Programm nach dem Create der Listbox eingegeben habe (Die Listbox erstelle ich dynamisch), und nachdem er mir die Eigenschaft sorted da nicht angeboten hat, habe ich angenommen, dass TListbox eine Eigenschaft mit dem Namen nicht hat und nach anderen Möglichkeiten, die Listbox zu sortieren, gesucht. Jetzt funktioniert es aber, keine Ahnung, was da war. Ist offensichtlich keine gute Idee, sich auf diese IDE-Feature zu verlassen.

haentschman 15. Mai 2017 05:13

AW: Datentyp von Litbox.Items
 
Moin...:P
Soviel negatives zum frühen Morgen...:roll: Aber das Problem sitzt imho 80cm vor dem Bilschirm. 8-)
Zitat:

Offensichtlich hat bei mir die automatische Codevervollständigung gesponnen, weil "Tlistbox.so" war natürlich das erste, was ich im Programm nach dem Create der Listbox eingegeben habe
...die QV sprinnt nicht nicht. Wenn du wirklich TListBox.sort eingegeben hast, statt dem Instanznamen, brauchst du nicht wundern.
Zitat:

Ist offensichtlich keine gute Idee, sich auf diese IDE-Feature zu verlassen.
...erstmal immer an die eigenen Fehler denken und ausschließen. 8-)
PS: Die QV vom CNPack ist besser und schneller.

idefix2 15. Mai 2017 10:12

AW: Datentyp von Litbox.Items
 
Habe mich hier verschrieben. Eingegeben habe ich richtig den Namen der Listbox, denn es sind nach der Eingabe vom "." eine Menge Vorschläge gekommen (wenn man den Typnamen statt des Variablennamens eingibt, wird diese Vorschlagsbox gar nicht angezeigt), nach ".s" waren es schon viel weniger, und nach ".so" war die Liste der Vorschläge leer. An dem Punkt habe ich dann begonnen, nach anderen Möglichkeiten zu suchen.

An das CNPack habe ich noch nicht gedacht, danke für den Hinweis.

haentschman 15. Mai 2017 10:17

AW: Datentyp von Litbox.Items
 
Ahhh jetzt ja...:P
Zitat:

und nach ".so" war die Liste der Vorschläge leer.
...das kann auch vorkommen wenn der Quelltext auch an anderer Stelle (vorher im Text) Fehler hat. :wink: Das kann die QV nicht auflösen...

idefix2 15. Mai 2017 12:31

AW: Datentyp von Litbox.Items
 
Irgend einen Grund wird es gehabt haben. Aber nachdem er nach ".s" noch Members gefunden hat, die mit s anfangen, aber sorted nicht dabei war, nehme ich eher nicht an, dass ein Quelltextfehler an einer anderen Stelle schuld war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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