Page 1 of 1
ListView Spaltenbreite anpassen
Posted: Wed Dec 15, 2021 9:25 am
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
ListView Spaltenbreite anpassen
Posted: Wed Dec 15, 2021 9:29 am
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
ListView Spaltenbreite anpassen
Posted: Thu Dec 16, 2021 6:03 am
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?
ListView Spaltenbreite anpassen
Posted: Thu Dec 16, 2021 6:11 am
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
ListView Spaltenbreite anpassen
Posted: Thu Dec 16, 2021 7:15 am
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
ListView Spaltenbreite anpassen
Posted: Thu Dec 16, 2021 7:39 am
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
ListView Spaltenbreite anpassen
Posted: Thu Dec 16, 2021 8:56 am
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.