Code: Select all
Global oldCallback,id,run0,run1,run2,run3,r.RECT,r1.RECT,r2.RECT,r3.RECT
Procedure liCB(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldCallback, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONDOWN
pInfo.LVHITTESTINFO
pInfo\pt\x = lParam & $FFFF
pInfo\pt\y = lParam >> 16 & $FFFF
SendMessage_(hWnd, #LVM_SUBITEMHITTEST, 0, pInfo)
id = GetProp_(hWnd, "PB_ID")
SetGadgetItemState(id, pInfo\iItem, #PB_ListIcon_Checked|#PB_ListIcon_Selected)
If id = 0
run0 =1
r\top = pInfo\iSubItem
r\left = #LVIR_BOUNDS
SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r)
MoveWindow_(WindowID(id), GadgetX(id,#PB_Gadget_ScreenCoordinate), GadgetY(id,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(id)-20,24, 1)
ElseIf id = 1
run1 = 1
r1\top = pInfo\iSubItem
r1\left = #LVIR_BOUNDS
SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r1)
MoveWindow_(WindowID(id), GadgetX(id,#PB_Gadget_ScreenCoordinate), GadgetY(id,#PB_Gadget_ScreenCoordinate) + r1\top, GadgetWidth(id)-20,24, 1)
ElseIf id = 2
run2 = 1
r2\top = pInfo\iSubItem
r2\left = #LVIR_BOUNDS
SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r2)
MoveWindow_(WindowID(id), GadgetX(id,#PB_Gadget_ScreenCoordinate), GadgetY(id,#PB_Gadget_ScreenCoordinate) + r2\top, GadgetWidth(id)-20,24, 1)
ElseIf id = 3
run3 = 1
r3\top = pInfo\iSubItem
r3\left = #LVIR_BOUNDS
SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r3)
MoveWindow_(WindowID(id), GadgetX(id,#PB_Gadget_ScreenCoordinate), GadgetY(id,#PB_Gadget_ScreenCoordinate) + r3\top, GadgetWidth(id)-20,24, 1)
EndIf
Case #WM_VSCROLL,#WM_MOUSEWHEEL
id = GetProp_(hWnd, "PB_ID")
SendMessage_(hWnd, #LVM_GETITEMRECT, GetGadgetState(id), rc.rect)
If rc\top >= 24 And rc\top < GadgetHeight(id)-24
HideWindow(id,0)
MoveWindow_(WindowID(id),GadgetX(id, #PB_Gadget_ScreenCoordinate), GadgetY(id,#PB_Gadget_ScreenCoordinate) + rc\top, GadgetWidth(id)-20,24, 1)
Else
HideWindow(id,1)
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
If *NMHDR\hWndFrom = GetWindow_(GadgetID(0),#GW_CHILD) Or *NMHDR\hWndFrom = GetWindow_(GadgetID(1),#GW_CHILD) Or *NMHDR\hWndFrom = GetWindow_(GadgetID(2),#GW_CHILD) Or *NMHDR\hWndFrom = GetWindow_(GadgetID(3),#GW_CHILD)
*phdn.NMHEADER = lParam
If *phdn\iItem = 0
ProcedureReturn 1
EndIf
EndIf
Case #WM_NCACTIVATE
If wParam = 0
ProcedureReturn 1
EndIf
Case #WM_MOVE
If run0 = 1
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, GetGadgetState(0), r.rect)
MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,24, 1)
EndIf
If run1 = 1
SendMessage_(GadgetID(1), #LVM_GETITEMRECT, GetGadgetState(1), r1.rect)
MoveWindow_(WindowID(1),GadgetX(1, #PB_Gadget_ScreenCoordinate), GadgetY(1,#PB_Gadget_ScreenCoordinate) + r1\top, GadgetWidth(1)-20,24, 1)
EndIf
If run2 = 1
SendMessage_(GadgetID(2), #LVM_GETITEMRECT, GetGadgetState(2), r2.rect)
MoveWindow_(WindowID(2),GadgetX(2, #PB_Gadget_ScreenCoordinate), GadgetY(2,#PB_Gadget_ScreenCoordinate) + r2\top, GadgetWidth(2)-20,24, 1)
EndIf
If run3 = 1
SendMessage_(GadgetID(3), #LVM_GETITEMRECT, GetGadgetState(3), r3.rect)
MoveWindow_(WindowID(3),GadgetX(3, #PB_Gadget_ScreenCoordinate), GadgetY(3,#PB_Gadget_ScreenCoordinate) + r3\top, GadgetWidth(3)-20,24, 1)
EndIf
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Arial",12)
If OpenWindow(10, 0, 0, 640, 500, "Keep Selction", #PB_Window_Invisible| #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, 310, 200, "Column 0", 0,#PB_ListIcon_GridLines | #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0, 1, "Column 1" , 150)
AddGadgetColumn(0, 2, "Column 2" , 150)
AddGadgetColumn(0, 3, "Column 3" , 150)
For x = 0 To 100
AddGadgetItem(0, x,""+Chr(10)+ "Item "+Str(x)+Chr(10) + "Item "+Str(x)+Chr(10)+"Item "+Str(x))
If Mod(x,2) = 0
SetGadgetItemColor(0,x,#PB_Gadget_BackColor,$C9F5FD)
SetGadgetItemColor(0,x,#PB_Gadget_FrontColor,$242BFE,2)
Else
SetGadgetItemColor(0,x,#PB_Gadget_BackColor,$EAFEF2)
EndIf
Next
ListIconGadget(1, 320, 10, 310, 200, "Column 0", 0,#PB_ListIcon_GridLines| #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(1,FontID(0))
AddGadgetColumn(1, 1, "Column 1" , 150)
AddGadgetColumn(1, 2, "Column 2" , 150)
AddGadgetColumn(1, 3, "Column 3" , 150)
For x = 0 To 100
AddGadgetItem(1, x,""+Chr(10)+ "Item "+Str(x)+Chr(10) + "Item "+Str(x)+Chr(10)+"Item "+Str(x))
Next
ListIconGadget(2, 10, 220, 310, 200, "Column 0", 0,#PB_ListIcon_GridLines| #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(2,FontID(0))
AddGadgetColumn(2, 1, "Column 1" , 150)
AddGadgetColumn(2, 2, "Column 2" , 150)
AddGadgetColumn(2, 3, "Column 3" , 150)
For x = 0 To 100
AddGadgetItem(2, x,""+Chr(10)+ "Item "+Str(x)+Chr(10) + "Item "+Str(x)+Chr(10)+"Item "+Str(x))
Next
ListIconGadget(3, 320, 220, 310, 200, "Column 0", 0,#PB_ListIcon_GridLines| #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(3,FontID(0))
AddGadgetColumn(3, 1, "Column 1" , 150)
AddGadgetColumn(3, 2, "Column 2" , 150)
AddGadgetColumn(3, 3, "Column 3" , 150)
For x = 0 To 100
AddGadgetItem(3, x, ""+Chr(10)+"Item "+Str(x)+Chr(10) + "Item "+Str(x)+Chr(10)+"Item "+Str(x))
Next
ButtonGadget(4,10,470,100,20,"List Selected items")
For win = 0 To 3
OpenWindow(win,0,0,0,0,"",#PB_Window_BorderLess, WindowID(10))
SetWindowColor(win, GetSysColor_(#COLOR_HIGHLIGHT))
SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE, GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE)| #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(win), GetSysColor_(#COLOR_HIGHLIGHT),130,#LWA_ALPHA)
Next
oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @liCB())
oldCallback = SetWindowLongPtr_(GadgetID(2), #GWL_WNDPROC, @liCB())
oldCallback = SetWindowLongPtr_(GadgetID(3), #GWL_WNDPROC, @liCB())
HideWindow(10,0)
SetActiveWindow(10)
SetWindowCallback(@WndProc())
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 0 To 3
Debug EventGadget()
Debug GetGadgetState(EventGadget())
Case 4
Debug "========"
For item = 0 To 3
Debug GetGadgetState(item)
Debug "========"
Next
EndSelect
EndSelect
Until Quit = 1