This is the grid code adapted and stripped down to the basics, with your own code. It's working code.
Code: Select all
EnableExplicit
#Win = 1
#Grid = 2
Global oldCallback,LIColor,Oldr,Oldc,editflag
Procedure LIcallback(hwnd, msg, wparam, lparam)
Define result.i
; Define *NMHDR.NMHDR
; Define *phdn.NMHEADER
; Define r.RECT
Define pInfo.LVHITTESTINFO
Define col, row
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_LBUTTONDOWN
SetGadgetState(#Grid,-1)
pInfo.LVHITTESTINFO
pInfo\pt\x = (lParam & $FFFF)
pInfo\pt\y = (lParam>> 16 & $FFFF)
SendMessage_(GadgetID(#Grid),#LVM_SUBITEMHITTEST,0,@pInfo)
SetGadgetItemColor(#Grid,OLdr,#PB_Gadget_FrontColor,#Black ,Oldc)
SetGadgetItemColor(#Grid,Oldr, #PB_Gadget_BackColor, LIColor,Oldc)
SetGadgetItemColor(#Grid,pInfo\iItem,#PB_Gadget_FrontColor,#White ,pInfo\iSubItem)
SetGadgetItemColor(#Grid,pInfo\iItem, #PB_Gadget_BackColor,GetSysColor_(#COLOR_HIGHLIGHT),pInfo\iSubItem)
Oldr = pInfo\iItem
Oldc = pInfo\iSubItem
Debug "Row = " + Oldr + ", Col = " + Oldc
EndSelect
ProcedureReturn result
EndProcedure
Procedure Main()
Protected i
If OpenWindow(#Win, 100, 100, 400, 300, "#GridGadget Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
LoadFont(0,"Tahoma",10)
ListIconGadget(#Grid, 10, 10, 380, 280, "Column 1", 100)
; **
; ** Set callback for grid cell selection
; **
oldCallback = SetWindowLongPtr_(GadgetID(#Grid), #GWL_WNDPROC, @LIcallback())
SetGadgetFont(#Grid,FontID(0))
SetGadgetFont(#Grid,FontID(0))
If GetGadgetColor(#Grid, #PB_Gadget_BackColor) < 0
LIColor = #White
Else
LIColor = GetGadgetColor(#Grid, #PB_Gadget_BackColor)
EndIf
AddGadgetColumn(#Grid, 1, "Column 2", 100)
AddGadgetColumn(#Grid, 2, "Column 3", 100)
;
For i = 0 To 9
AddGadgetItem(#Grid, -1, "Row " + Str(i) + #LF$ + "Item 1" + #LF$ + "Item 2")
Next
EndIf
EndProcedure
Main()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow