liegt es an PB ?, weil immer die ganze Liste bei Verwendung von SetGadgetItemColor neu gezeichnet wird oder wie kann man das Problem lösen ?
Code: Alles auswählen
Declare myCback(hwnd, message, wParam, lParam)
Structure myprgVar
win.i
lvnr.i
lvid.i
EndStructure
Global vlv.myprgvar
vlv\win = OpenWindow(0,50,50,640,480,"ListIcon Gadget",#PB_Window_SystemMenu)
;CreateGadgetList(vlv\win)
flags = #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines
vlv\lvnr = 1
vlv\lvid = ListIconGadget(1,10,12,600,400,"",0,flags)
AddGadgetColumn(1,1,"Spalte 1",140)
AddGadgetColumn(1,2,"Spalte 2",140)
AddGadgetColumn(1,3,"Spalte 3",140)
AddGadgetColumn(1,4,"Spalte 4",159)
For i = 1 To 62
nr$ = RSet(Str(i),3," ")
txt$ = #LF$+nr$+#LF$+"Text in Zeile "+nr$+#LF$+"Spalte 3"+#LF$+"Spalte 4"
AddGadgetItem(1, -1, txt$)
Next
SetWindowCallback(@myCback())
;=====================================================
Procedure myCback(hwnd, message, wParam, lParam)
result = #PB_ProcessPureBasicEvents
;*vlv ist global
Static iitem, isubitem, oldiitem, oldisubitem
If message = #WM_NOTIFY
*nmhdr.NMHDR = lParam
;Headerbreite sperren, egal welcher Header
If *nmhdr\code = #HDN_ITEMCHANGING: result = #True: EndIf
;Id der Liste abfragen
If *nmhdr\hwndFrom = vlv\lvid
*nmlv.NM_LISTVIEW = lParam
If *nmlv\hdr\code = #LVN_HOTTRACK
iitem = *nmlv\iitem
isubitem = *nmlv\isubitem
If iitem <> oldiitem Or isubitem <> oldisubitem
;DisableGadget(vlv\lvnr,1)
SetGadgetItemColor(vlv\lvnr,oldiitem,#PB_Gadget_BackColor,-1,oldisubitem)
SetGadgetItemColor(vlv\lvnr,iitem,#PB_Gadget_BackColor,#Red,isubitem)
oldiitem = iitem: oldisubitem = isubitem
;DisableGadget(vlv\lvnr,0)
EndIf
EndIf
EndIf
EndIf
ProcedureReturn result
EndProcedure
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
End