Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Spalten in Listbox ?


hansa - Do 12.02.04 13:13
Titel: Spalten in Listbox ?
Hi,

TListBox hat ja die Eigenschaft "Columns". Nur, wie spreche ich die an ? Die Items kann ich doch nur mit dem Stringlisten-Editor eingeben. Und wo sind die Spalten ??


Delete - Do 12.02.04 15:30

Gar nicht. Setzt mal die eigenschaft Columsn auf 2 oder drei und lade mal 20 Items rein, dann siehst du was das ist. Nimm einen Listview mit dem Style Report.
Zitat:

Use Columns to specify the number of columns, in a multi-column list box, that are visible without having to use the horizontal scrollbar.


hansa - Do 12.02.04 16:51

Wozu ist dann Columns überhaupt vorhanden ? Nur wegen HorScrollBars ?:?


Klabautermann - Do 12.02.04 18:00

Wie Luckie sagte,

die Funktion die du suchst bietet die Listbox nciht, für diese Funktion ist tListView da. Sprich du verwendest einfach die Falsche Komponente. TListBox bietet nur eine Möglichkeit die Einträge nebeneinander anzuodnen, aber nicht mehrere Spalten für einen Eintrag zu machen.

Gruß
Klabautermann


Popov - Do 12.02.04 18:26

Also gehen, geht das schon! Nur ist die Eigenschaft "Columns" für etwas anderes gedacht. Soviel zu den schlechten Nachrichten.

Um in ListBox in Spalten etwas auszugeben gibt es zwei Möglichkeiten:

1. Tabulatoren nutzen. Nur so einfach ist das nicht, d.h. es reicht nicht einfach nur Tabs einzusetzten. Du mußt per Api der Listbox mitteilen ab welchen Pixel der 2'te, 3'te usw. Tab ist. Wenn die Listbox das weiß, dann kannst du deine Tabs im Item-String einbauen. Das ganze hat einen Hacken. Geht der Text einer Spalte über die Tablänge hinaus, dann verschiebt sich alles in den Tabs. Dann kann der Wert aus Spalte 2 in Spalte 3 landen. Die Spalten-Werte sind also nicht absolut. Deshalb hab ich die Möglichkeit 2 entwickelt:

2. Hier ist man der Herr in seiner Badewanne, denn alles wird alleine gemacht. Im Draw-Ereignis der Listbox loge ich mich ein und übernehme die Kontrolle über die Canvas. Per TextOut und der Möglichkeit in einem Rect Bereich etwas auszugeben, zeichne ich den Text einer Spalte immer ab dem Pixel, ab dem sie stehen soll. Dazu nutze ich THeaderControl. Mit der Komponente bestimme ich die Position der Spalten. Das Ergebnis ist nicht kompliziert, man muß aber vorher ein wenig mit dem Draw Ereignis experimentieren. Das Ergebnis ist wunderbar und sieht in etwa so aus wie ListView.


hansa - Fr 13.02.04 21:50

Luckie hat folgendes geschrieben:
Gar nicht. Setzt mal die eigenschaft Columsn auf 2 oder drei und lade mal 20 Items rein, dann siehst du was das ist. Nimm einen Listview mit dem Style Report.


Bei ListView schreibt er alles in eine Zeile. Ich brauche aber Spalten. Von Columns ist nichts zu sehen. Und was ist Style Report ??

Moderiert von user profile iconPeter Lustig: Quote-Tags korrigiert


ErnestoChe - Fr 13.02.04 23:31

Hallo,

@hansa
ViewStyle im Objektinspektor auf vsReport stellen. Dann kannst du über die Eigenschaft Columns ebenfalls im Objektinspektor Spalten hinzufügen. Eine ListView ist das Control was du in deinem Windows-Explorer auf der rechten Seite hast, wenn du Ansicht auf Detail stellst.

@Popov
Sorry, aber bloß weil es über fünf Ecken irgendwie geht, muss man es ja nicht gleich tun, wenn es bereits ein Control gibt, welches dieses Verhalten von Haus aus exakt bietet. Ausserdem kann man die ListView bequem über zwei verschachtelte Spalten durchlaufen um sie z.B. zu speichern oder zu drucken. Desweiteren hat man noch die Spaltenköpfe, die man Klicken kann, um zum Beispiel eine Sortier-Funktion für die Spalte zu starten.

MFG

- Ernesto -