Klar - aber das ist etwas aufwändiger..
Ich habe hier eine komplexe Erweiterung (komplett auf CB basierend) des LIG mit div. Editierfunktionen.
Darunter passe ich u.a. auch die Farben der einzelnen Spalten dynamisch an.
Im Prinzip funktioniert alles - allerdings habe ich gerade einen unschönen Bug entdeckt..
Ich fange u.a. auch die Cursortasten ab, um damit die Position in der LIG zu verändern.
In der Callback fange ich folgendes Event (nicht funktionaler Ausschnitt) ab:
Code: Alles auswählen
Case #WM_NOTIFY
*WmNotify=lParam
....
Select *WmNotify\code
....
Case #CDDS_ITEMPREPAINT
....
GetColFromCoord(ListIconGadget, *pnmcd, @CellInfo)
Die Prozedur "GetColFromCoord" sieht dann symbolisch wie folgt aus:
Code: Alles auswählen
Protected I.LVHITTESTINFO
....
I\pt\x = *pnmcd\rc\left - GetScrollPos_(GadgetID(Gadget), #SB_HORZ)
I\pt\y = *pnmcd\rc\top
....
SendMessage_(GadgetID(Gadget), #LVM_SUBITEMHITTEST, 0, @I)
....
Nach einiger Ursachenforschung habe ich nun festgestellt, dass "GetScrollPos_(GadgetID(Gadget), #SB_HORZ)"
zu diesem Zeitpunkt noch den alten (falschen) Wert liefert. D.h. ich bekomme bei der Berechnung der Spalte die
falschen Werte und ändere somit die Farben in der falschen Spalte.
Das ganze passiert aber nur, wenn ich per Cursor aus dem Sichtbereich springen "muss". Die Reihenfolge der
Events kann ich ja nicht beeinflussen. Wenn ich in der aktuellen Ansicht bleibe funktioniert die Zuweisung tadellos.
Auch ein Scrollen am Scrollbalken funktioniert. das Problem ist nur (per Debug-Ausgaben überprüft) die Reihenfolge
der eintreffenden Events.
Daher suche ich eine andere Möglichkeit die aktuell sichtbaren Spaltennummern zu extrahieren.
Den Originalcode darf ich leider nicht posten bzw. dieser ist auch nicht das Problem..
Danke.