Hi
# 1 :
Crazy idea looks to me a cross platform solution(can be managed to be faster)
Code: Select all
OpenWindow(0,0,0,640,480,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)
ListIconGadget(0,10,10,620,460,"",0,#PB_ListIcon_GridLines| #PB_ListIcon_FullRowSelect)
AddGadgetColumn(0,1,"Column 1",210)
AddGadgetColumn(0,2,"Column 2",200)
AddGadgetColumn(0,3,"Column 3",200)
For i = 0 To 16
linestr.s = LSet(Str(i),3," ")
AddGadgetItem(0, -1, Chr(10)+"Text on Line "+linestr+" in Column 1"+Chr(10)+"Text on Line "+linestr+" in Column 2"+Chr(10)+"Text on Line "+linestr+" in Column 3")
Next
BColor = GetGadgetColor(0, #PB_Gadget_BackColor)
FColor = GetGadgetColor(0, #PB_Gadget_FrontColor)
HColor = $FF9933
Dim Cell(3)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_LeftClick
Row = GetGadgetState(0)
SetGadgetState(0,-1)
Cell(0) = GetGadgetItemAttribute(0,0,#PB_ListIcon_ColumnWidth,0) +GetGadgetItemAttribute(0,0,#PB_ListIcon_ColumnWidth,1)
Cell(1) = cell(0) + GetGadgetItemAttribute(0,0,#PB_ListIcon_ColumnWidth,2)
Cell(2) = Cell(1) +GetGadgetItemAttribute(0,0,#PB_ListIcon_ColumnWidth,3)
If WindowMouseX(0) < Cell(0)
Column = 1
ElseIf WindowMouseX(0) > Cell(0) And WindowMouseX(0) < Cell(1)
Column = 2
Else
Column = 3
EndIf
SetGadgetItemColor(0,OldRow,#PB_Gadget_FrontColor,FColor ,OldColumn)
SetGadgetItemColor(0,OldRow, #PB_Gadget_BackColor, BColor,OldColumn)
SetGadgetItemColor(0,Row,#PB_Gadget_FrontColor,$FFFFFF ,Column)
SetGadgetItemColor(0,Row, #PB_Gadget_BackColor,HColor,Column)
OldRow = Row
OldColumn = Column
EndSelect
EndSelect
EndSelect
Until Quit = 1
#2 :
Subclass the ListIcon Gadget
Code: Select all
Global oldCallback,Oldr,Oldc,pInfo.LVHITTESTINFO
Procedure LIcallback(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldCallback, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONDOWN
pInfo\pt\x = (lParam & $FFFF)
pInfo\pt\y = (lParam>> 16 & $FFFF)
SendMessage_(GadgetID(0),#LVM_SUBITEMHITTEST,0,@pInfo)
SetGadgetItemColor(0,OLdr,#PB_Gadget_FrontColor,#Black , Oldc)
SetGadgetItemColor(0,Oldr, #PB_Gadget_BackColor, GetSysColor_(#COLOR_WINDOW),Oldc)
SetGadgetItemColor(0,pInfo\iItem,#PB_Gadget_FrontColor, #White ,pInfo\iSubItem)
SetGadgetItemColor(0,pInfo\iItem, #PB_Gadget_BackColor,GetSysColor_(#COLOR_HIGHLIGHT), pInfo\iSubItem)
Oldr = pInfo\iItem
Oldc = pInfo\iSubItem
Debug "Row :"+Str(Oldr)
Debug "Column :"+Str(Oldc)
Debug GetGadgetItemText(0, pInfo\iItem,pInfo\iSubItem)
EndSelect
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,640,480,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)
ListIconGadget(0,10,10,620,460,"",0,#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Column 1",210)
AddGadgetColumn(0,2,"Column 2",200)
AddGadgetColumn(0,3,"Column 3",200)
For i = 0 To 16
linestr.s = LSet(Str(i),3," ")
AddGadgetItem(0, -1, Chr(10)+"Text on Line "+linestr+" in Column 1"+Chr(10)+"Text on Line "+linestr+" in Column 2"+Chr(10)+"Text on Line "+linestr+" in Column 3")
Next
oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @LIcallback())
Repeat
Event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
Edit :Code modified