ListView Spaltenbreite anpassen

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

Post Reply
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

ListView Spaltenbreite anpassen

Post by lagraf »

Hallo,
ist es in VO 2.8 möglich, die Breite der Columns eines ListViews, der anhand eines CSV Files gefüllt wird, so anzupassen, dass alle Werte komplett angezeigt und nicht abgeschnitten werden?
LG Franz
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

ListView Spaltenbreite anpassen

Post by wriedmann »

Hallo Franz,
klar geht das:

Code: Select all

method AutoSize() as void pascal class EnhListView
local nI as dword

self:SuspendUpdate()
for nI := self:ColumnCount downto 1
  self:ColumnAutoSize( self:GetColumn( nI ):NameSym ) 
next
self:RestoreUpdate()
return

Code: Select all

method ColumnAutoSize( symColumn as symbol ) as void pascal class EnhListView
local nIndex as int
local nWidth as int

nIndex := Int( self:__GetColumnIndexFromSymbol( symColumn ) ) - 1
ListView_SetColumnWidth( self:handle(), int(nIndex), shortint( _cast, LVSCW_AUTOSIZE ) )
nWidth := ListView_GetColumnWidth( self:Handle(), nIndex )
ListView_SetColumnWidth( self:handle(), int(nIndex), shortint( _cast, LVSCW_AUTOSIZE_USEHEADER ) )
if nWidth > ListView_GetColumnWidth( self:Handle(), nIndex )
  ListView_SetColumnWidth( self:handle(), nIndex, shortint( _cast, LVSCW_AUTOSIZE ) )
endif
return
HTH
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

ListView Spaltenbreite anpassen

Post by lagraf »

Hallo Wolfgang,
wie wird der EnhListView verwendet? Ich muss im Prog normalerweise den LV vorab mit seinen Spalten und einer geschätzen Größe anlegen:

Code: Select all

LOCAL oCol AS ListViewColumn
oCol := ListViewColumn{5, #SPALTE}
oCol:Caption := "Spalte"
SELF:oDClvwData:AddColumn(oCol)
Wenn ich dann die Daten einlese, können 2 Fälle vorkommen:
- die Werte sind viel zu klein für die definierte Größe, Platz wird verschwendet
- die Werte sind zu groß und werden nicht komplett angezeigt

In beiden Fällen sollen die Spaltenbreiten angepaßt werden, sodaß einerseits kein Platz verschwendet wird, aber trotzdem alle Werte komplett angezeigt werden (wie in Calc/Excel die Funktion "Optimale Spaltenbreite").

Wird nach Einlesen der Daten die Methode AutoSize() aufgerufen, damit sich die Breite der Spalten den darin enthaltenen Werten anpaßt?
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

ListView Spaltenbreite anpassen

Post by wriedmann »

Hallo Franz,
ich verwende (wie für fast alle meine Controls) eine eigene Klasse, in diesem Fall die Klasse EnhListView.
Und nach dem Einlesen aller Daten führe ich die Methode AutoSize() aus.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

ListView Spaltenbreite anpassen

Post by lagraf »

Hallo Wolfgang,
genau das habe ich gemeint: Nach dem Einlesen die Methode AutoSize() aufrufen. Die bei der Definition der Columns festgelegten Größen spielen dann eigentlich keine Rolle.

Ich habs eingebaut und es funktioniert, danke!
LG Franz
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

ListView Spaltenbreite anpassen

Post by wriedmann »

Hallo Franz,
genau, die Größen spielen keine Rolle mehr.
Normalerweise baue ich bei diesen ListViews dann als letzte Spalte eine leere Spalte mit Breite 1 und einem Leerzeichen als Caption ein, damit wirklich jede Spalte den PLatz belegt, den sie braucht.
Dieses AutoSize funktioniert sehr gut bei bestimmten Ausgaben (mache ich ganz viel, um das Kopieren der Daten nach Excel zu erlauben), aber für "normale" Anzeigen ist das eigentlich nicht sehr benutzerfreundlich - da ist es besser, beim Schließen die Spaltenbreiten zu speichern und beim Öffnen wiederherzustellen, denn manche Spalten sollen gar nicht in voller Breite angezeigt werden.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

ListView Spaltenbreite anpassen

Post by lagraf »

Ich baue damit einen Importdialog für den Import von Artikel- und Lieferscheindaten (wie der Textimport Dialog in Excel/Calc). Die Lieferanten meiner Kunden schaffen es nämlich nicht, immer ein definiertes Standardformat zu liefern, sodaß ich oft meine Importvorlagen fürs Programm abändern muss.

In diesem Dialog öffnen meine Kunden diese Daten ihrer Lieferanten und können dann interaktiv durch Änderungen (Zeichensatz, Spaltentrennzeichen, Texttrenner, etc) schauen, welche Einstellungen sie brauchen, um diese Datei zu importieren.

Für diesen Fall ist die autom. Spaltenbreite optimal.
Post Reply