- Offizieller Beitrag
Hi,
irgendwie habe ich schon 'nen Knoten im Hirn - aber ich komme einfach auf keine Lösung.
Für die Formatierung von Listview-SubItem nutze ich als Informationsträger, ob ein SubItem benutzerdefiniert formatiert wurde, den IParam des Item. IParam erlaubt mir einen Integerwert zu speichern.
Um also Infos zu mehreren Spalten (SubItem) des Items zu hinterlegen speichere ich in IParam die Summe von 2^SpaltenIndex für jede betroffene Spalte.
Den Wert von IParam muß ich dann allerdings noch verschieben, damit es keine Kollisionen mit niedrigen Control-ID gibt. Dazu addiere ich einfach ein Shift von 9999.
Somit kann ich die Informationen für max. 30 Spalten (Index 0-29) hinterlegen - dann falle ich aus dem Integerbereich raus.
Und hier setzt nun meine Überlegung an: Wie kann ich mir den negativen Zahlenbereich mit 'einverleiben'?
Ich brauche irgendeine Möglichkeit um zu definieren:
Wenn IParam negativ ist, berechne mit Algorithmus X den Wert der für SpaltenIndex 0-29 zuständig ist. Als zweiter Wert ergibt sich ein 'Zeiger' auf 2 hoch 30 und höher. Denn intern kann ich ja mit größeren Zahlen rechnen, nur Speichern in IParam geht nicht.
Versucht habe ich schon einige Sachen, aber ich bekomme nichts eineindeutiges gebacken. Den Wert reinrechnen ist das Eine, ich muß ihn natürlich mit einer Umkehrmethode auch wieder zurückrechnen können.
Ziel ist immer die Abfragevariante (nach ermitteln des tatsächlichen IParam):
If BitAND($IParam, 2^$SpaltenIndex) Then
[/autoit]Hier mal noch ein kleines Skriptbsp. zum Durchspielen der Werte:
[autoit]#include <GuiListView.au3>
$gui = GUICreate('')
$lv = GUICtrlCreateListView('a|b|c', 10, 10, 200, 150)
$hLV = GUICtrlGetHandle($lv)
GUICtrlCreateListViewItem(' | | ', $lv) ; Anzahl Spalten z. Test unwichtig
$IParam = 0
$shift = 9999 ; IParam muß größer 9999 sein
For $i = 0 To 30 ; letzter gültiger Spalten-Index ist 29
ConsoleWrite('2 hoch ' & $i & @TAB & 2^$i & @CRLF)
$IParam += 2^$i
; für negativen Bereich wäre das dann
;~ $IParam -= 2^$i ; <== das funktioniert dann bis 30 und Shift wäre nich nötig
ConsoleWrite('set Summe $IParam: ' & $IParam & @CRLF)
_GUICtrlListView_SetItemParam($hLV, 0, $IParam+$shift)
ConsoleWrite('get Summe $IParam: ' & _GUICtrlListView_GetItemParam($hLV, 0)-$shift & @CRLF & @CRLF)
Next