![]() |
Wie Spaltenbreite bei virtuellem ListView einstellen?
Liste der Anhänge anzeigen (Anzahl: 1)
Liebe Delphi-Experten,
zuerst vielen Dank für die vielen nützlichen Tipps, die ich beim Lesen dieses Forums schon bekommen habe! Ich schreibe mit einer Frage zu TListView: Ich verwende eine virtuelle ListView, die ich im vsList-Modus betreibe. Die (vielen) Items werden wie gewünscht spaltenweise angezeigt, aber: Die Breite der Spalten ist recht "willkürlich", oft werden Items mit "..." gekürzt, weil die Spaltenbreite zu klein ist, manchmal sind die Spalten unnötig breit. Daher die Frage: Kann ich dem ListView irgendwie mitteilen, wie breit es die Spalten einstellen soll? (Ich kann das leicht vorher bestimmen, indem ich bei allen Einträgen canvas.TextWidth berechne und das Maximum nehme. Aber ich weiß eben nicht, wie ich diese Information an das ListView weitergeben könnte.) Zur Sicherheit: Ich meine nicht die Spalten im vsReport-Modus. Deren Breiten kann man natürlich mit column.width einstellen. Ich meine stattdessen die Spalten im vsList-Modus (die alle gleich breit sind.) Ich habe mit der Suchfunktion im Forum gesucht, wurde aber dazu leider nicht fündig. Es wäre toll, wenn jemand von Euch eine Idee hätte. (Zur Information: Ich arbeite mit Delphi 6 Personal Edition unter Windows XP.) Im Anhang ist ein Minimalprogramm, das das Problem verdeutlicht. Grüße, Thomas |
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
|
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Danke für den Link! Ich habe dort nachgesehen und es geht
mir wie dem dortigen Fragesteller "TUX_der_Pinguin": Ich habe die zwei Ideen ausprobiert und kann keine Änderung feststellen. Es könnte daran liegen, dass dieser Ansatz sich vielleicht eher auf den vsIcon-Modus bezieht. Grüße, Thomas |
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Liste der Anhänge anzeigen (Anzahl: 1)
Schade, ich hatte das selber gleich mal mit deinem Beispiel getestet und das klappte wunderbar. Ich habe das Beispiel mal angehängt. Naja, wenn das bei dir nicht geht weiss ich leider auch nicht weiter.
|
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
entschuldige, ich hatte es nicht bei meinem Minimalprogramm getestet, sondern gleich in dem größeren Programm, für das ich es bräuchte. Dort wird der Inhalt des ListView oft geändert und die Spaltenanpassung müsste dann immer mal wieder erfolgen -- das funktioniert leider nicht. Ich habe das Minimalprogramm (siehe Anhang) jetzt etwas erweitert, damit man das Problem erkennt. Grüße, Thomas |
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Ich verstehe es zwar nicht wirklich, aber lass mal die +1 weg...
Delphi-Quellcode:
...dann geht es.
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin Item.Caption := DupeString('Test ', item.index mod divisor); end; |
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Liste der Anhänge anzeigen (Anzahl: 1)
... leider eigentlich nicht.
Dann wird zwar zu Anfang die Spaltenbreite größer eingestellt (sogar in Wahrheit deutlich zu groß), aber bei mehrmaligem Drücken auf den Button wird die Breite nicht "nachgestellt" und der Text wird dann wieder mit "..." gekürzt (siehe Bild). Trotzdem danke für Deine Mühe! |
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Liste der Anhänge anzeigen (Anzahl: 1)
Die verwendete Nachricht an das Listview ist nur für den ListStyle 'vsIcon' gültig und definiert die Sektionsbreite, also die Breite in der das Icon samt Namen steht.
Für den Style 'vsList' sollte man LV_SETCOLUMNWIDTH verwenden (siehe ![]() Das angehängte Beispiel verdeutlicht die Verwendung. Der Einfachheit halber erfolgt die Berechnung der Breite (mit ListView.Canvas.TextWidth) im OnData-Ereignis. Weiterhin habe ich 10 Pixel dazugerechnet, da das ListView einen Zwischenraum zwischen den Spalten voraussetzt. Wie groß dieser genau ist, weiss ich nicht, aber die 10 Pixel reichen ja. |
Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
Das funktioniert wirklich perfekt -- vielen Dank für Deine Hilfe!
Thomas |
AW: Wie Spaltenbreite bei virtuellem ListView einstellen?
Vieles ausprobiert und überall die Tipps halfen nix.
Delphi-Quellcode:
Collumn 0 bis x sind ja eigentlich die Spalten von vsReport. (ob 0 wirklich auch für vsList gilt, weiß ich nicht, schien aber nicht so)
SendMessage(ListView1.Handle, LVM_SETCOLUMNWIDTH, 0, MakeLong(aWidth, 0));
ListView1.Perform(LVM_SETCOLUMNWIDTH, 0, MakeLong(aWidth, 0)); ListView_SetColumnWidth(ListView1.Handle, 0, aWidth); // Unit CommCtrl Für vsList half bei mir die Column -1 ( alle Columns? ), aber nicht alleine. Erst das umschalten des ViewStyles brachte letzendlich erfolg.
Delphi-Quellcode:
ListView_SetColumnWidth(ListView1.Handle, -1, aWidth);
//hier die Liste befüllen ListView1.ViewStyle := vsReport; ListView1.ViewStyle := vsList; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz