Code: Select all
Global oldCallback,rowheight
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)
SetGadgetItemState(0, pInfo\iItem, #PB_ListIcon_Checked|#PB_ListIcon_Selected)
r.RECT
r\top = pInfo\iSubItem
r\left = #LVIR_BOUNDS
SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r)
HideWindow(0,0)
MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,rowheight, 1)
Debug GetGadgetState(0)
Case #WM_VSCROLL,#WM_MOUSEWHEEL
HideWindow(0,1)
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)
*phdn.NMHEADER = lParam
If *phdn\iItem = 0
ProcedureReturn 1
EndIf
EndIf
Case #WM_NCACTIVATE
If wParam = 0
ProcedureReturn 1
EndIf
Case #WM_MOVE
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, GetGadgetState(0), r.rect)
If r\top > GadgetHeight(0)-30
r\top-GadgetHeight(0)-30
EndIf
MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,rowheight, 1)
Case #WM_SIZE
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(10)-20,WindowHeight(10)-50 )
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 | #PB_Window_SizeGadget)
ListIconGadget(0, 10, 10, 620, 450, "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
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, 0, r.RECT)
rowheight = r\bottom-r\top+2
OpenWindow(0,0,0,0,0,"",#PB_Window_BorderLess, WindowID(10))
SetWindowColor(0, GetSysColor_(#COLOR_HIGHLIGHT))
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE, GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE)| #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0), GetSysColor_(#COLOR_HIGHLIGHT),10,#LWA_ALPHA)
oldCallback = SetWindowLongPtr_(GadgetID(0), #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
EndSelect
EndSelect
Until Quit = 1