AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie Spaltenbreite bei virtuellem ListView einstellen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Spaltenbreite bei virtuellem ListView einstellen?

Ein Thema von Thomas-B · begonnen am 6. Feb 2009 · letzter Beitrag vom 25. Jul 2012
Antwort Antwort
Thomas-B

Registriert seit: 3. Feb 2008
10 Beiträge
 
Delphi 6 Personal
 
#1

Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 6. Feb 2009, 22:44
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
Angehängte Dateien
Dateityp: zip test_listview_columns_125.zip (1,1 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 7. Feb 2009, 20:33
klick
  Mit Zitat antworten Zitat
Thomas-B

Registriert seit: 3. Feb 2008
10 Beiträge
 
Delphi 6 Personal
 
#3

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 7. Feb 2009, 20:46
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
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 7. Feb 2009, 20:52
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.
Angehängte Dateien
Dateityp: zip test_listview_columns_777.zip (1,2 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
Thomas-B

Registriert seit: 3. Feb 2008
10 Beiträge
 
Delphi 6 Personal
 
#5

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 7. Feb 2009, 21:50
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
Angehängte Dateien
Dateityp: zip test_listview_columns_2_153.zip (1,3 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 8. Feb 2009, 01:30
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.
  Mit Zitat antworten Zitat
Thomas-B

Registriert seit: 3. Feb 2008
10 Beiträge
 
Delphi 6 Personal
 
#7

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 8. Feb 2009, 08:37
... 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!
Miniaturansicht angehängter Grafiken
test_2_201.png  
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 8. Feb 2009, 09:03
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.
Angehängte Dateien
Dateityp: zip test_listview_columns_2_837.zip (1,5 KB, 56x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Thomas-B

Registriert seit: 3. Feb 2008
10 Beiträge
 
Delphi 6 Personal
 
#9

Re: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 8. Feb 2009, 11:33
Das funktioniert wirklich perfekt -- vielen Dank für Deine Hilfe!

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#10

AW: Wie Spaltenbreite bei virtuellem ListView einstellen?

  Alt 25. Jul 2012, 11:00
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 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