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/)
-   -   Delphi Wie Spaltenbreite bei virtuellem ListView einstellen? (https://www.delphipraxis.net/128820-wie-spaltenbreite-bei-virtuellem-listview-einstellen.html)

Thomas-B 6. Feb 2009 21:44


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

omata 7. Feb 2009 19:33

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
 
klick

Thomas-B 7. Feb 2009 19:46

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

omata 7. Feb 2009 19:52

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.

Thomas-B 7. Feb 2009 20:50

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

omata 8. Feb 2009 00:30

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
 
Ich verstehe es zwar nicht wirklich, aber lass mal die +1 weg...
Delphi-Quellcode:
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption := DupeString('Test ', item.index mod divisor);
end;
...dann geht es.

Thomas-B 8. Feb 2009 07:37

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!

alzaimar 8. Feb 2009 08:03

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 MSDN-Hilfe).

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.

Thomas-B 8. Feb 2009 10:33

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?
 
Das funktioniert wirklich perfekt -- vielen Dank für Deine Hilfe!

Thomas

himitsu 25. Jul 2012 10:00

AW: Wie Spaltenbreite bei virtuellem ListView einstellen?
 
Vieles ausprobiert und überall die Tipps halfen nix.
Delphi-Quellcode:
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
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)

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