- Speedy Hal & Val Scrolling
- Can use more CheckBoxes Columns
- Can use any other objects smoothly
Have fun
Code: Select all
#CDDS_ITEMPREPAINT = #CDDS_ITEM|#CDDS_PREPAINT
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM|#CDDS_ITEMPREPAINT
Global Header,oldproc,Header_H,Index
Global w.RECT,rc.RECT,lv.RECT
ExamineDesktops()
Procedure Hheight(hwnd, msg, wParam, lParam)
result = CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)
Select msg
Case #HDM_LAYOUT
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = 40
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = 40
EndIf
EndSelect
ProcedureReturn result
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
Select *NMHDR\code
Case #NM_CUSTOMDRAW
*LVCDHeader.NMLVCUSTOMDRAW = lParam
Select *LVCDHeader\nmcd\dwDrawStage
Case #CDDS_PREPAINT
;result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
result = #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
Row = *LVCDHeader\nmcd\dwItemSpec
If Row & 1 = 0
*LVCDHeader\clrTextBk = $D6FFFF
Else
*LVCDHeader\clrTextBk = $CEF6F5
EndIf
result = #CDRF_NEWFONT
EndSelect
EndSelect
*nmHEADER.HD_NOTIFY = lParam
Select *nmHEADER\hdr\code
Case #HDN_ITEMCHANGING
If *nmHEADER\iItem = 0 Or *nmHEADER\iItem = 1
HideGadget(2,1)
HideGadget(3,1)
EndIf
Case #HDN_ITEMCHANGED
r1.RECT\top = 1
r1.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(1), #LVM_GETSUBITEMRECT, 1, r1)
r2.RECT\top = 2
r2.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(1), #LVM_GETSUBITEMRECT, 2, r2)
If r1\left > 0
MoveWindow_(GadgetID(2),r1\left+1,Header_H,20,lv\bottom - lv\top,1)
EndIf
MoveWindow_(GadgetID(3),r2\left+1,Header_H,20,lv\bottom - lv\top,1)
If r2\left - r1\Left > 20
HideGadget(2,0)
HideGadget(3,0)
Else
HideGadget(3,0)
EndIf
EndSelect
Case #WM_SIZE,#WM_MOVE,#WM_PAINT
GetClientRect_(WindowID(0),w.RECT)
MoveWindow_(GadgetID(0),10,10,w\right-w\left-20,w\bottom-w\top-60,1)
MoveWindow_(GadgetID(4),10,w\bottom-35,80,24,1)
MoveWindow_(GadgetID(5),100,w\bottom-35,80,24,1)
GetClientRect_(GadgetID(1),lv.RECT)
MoveWindow_(Header,0,GetGadgetAttribute(0,#PB_ScrollArea_Y),DesktopWidth(0),Header_H,1)
RedrawWindow_(GadgetID(1),#Null,#Null,#RDW_INVALIDATE|#RDW_UPDATENOW)
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 640, 340, "ListIcon Gadget",#PB_Window_Invisible| #PB_Window_SystemMenu |#PB_Window_MaximizeGadget |#PB_Window_MinimizeGadget |#PB_Window_SizeGadget| #PB_Window_ScreenCentered)
ScrollAreaGadget(0, 0,0,0,0,DesktopWidth(0),DesktopHeight(0),50,#PB_ScrollArea_Flat)
SetGadgetColor(0,#PB_Gadget_BackColor,$D6FFFF)
ListIconGadget(1,0, 0,1940, 1200, "Column 0",100,#LVS_EX_DOUBLEBUFFER|#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
imageList = ImageList_Create_(1,24, #ILC_COLOR32, 0, 0)
SendMessage_(GadgetID(1), #LVM_SETIMAGELIST, #LVSIL_SMALL, imageList)
SetWindowLongPtr_(GadgetID(1),#GWL_EXSTYLE,0)
For i = 1 To 6
AddGadgetColumn(1, i, "Column " + Str(i), 100)
Next
For i = 0 To 500
AddGadgetItem(1, i, "Item "+Str(i)+Chr(10)+Space(6)+"Item "+Str(i)+Chr(10)+Space(6)+"Item "+Str(i)+Chr(10)+"Item "+Str(i)+Chr(10)+"Item 7")
Next
Header = SendMessage_(GadgetID(1), #LVM_GETHEADER, 0, 0)
oldproc = SetWindowLongPtr_(Header, #GWL_WNDPROC, @Hheight())
SendMessage_(GadgetID(1), #LVM_SCROLL, 0, 0)
SetGadgetColor(1,#PB_Gadget_BackColor,$EAFEFE)
SetGadgetColor(1,#PB_Gadget_LineColor,$C5C5C5)
GetWindowRect_(Header,r.RECT)
Header_H = r\bottom-r\top
ListIconGadget(2,101, Header_H, 20, 1200, "Column 1",20,#LVS_EX_DOUBLEBUFFER|#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes|#LVS_NOCOLUMNHEADER) ;Height - 20 for the hidden Hal ScrollBar
SendMessage_(GadgetID(2), #LVM_SETIMAGELIST, #LVSIL_SMALL, imageList)
SetParent_(GadgetID(2),GadgetID(1))
SetWindowLongPtr_(GadgetID(2),#GWL_EXSTYLE,0)
SetGadgetColor(2,#PB_Gadget_BackColor,$EAFEFE)
SetGadgetColor(2,#PB_Gadget_LineColor,$C5C5C5)
For i = 0 To 500
AddGadgetItem(2, i, " "+Chr(10)+"")
Next
ListIconGadget(3,201, Header_H, 20, 1200, "Column 2",20,#LVS_EX_DOUBLEBUFFER| #WS_EX_TOPMOST |#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes|#LVS_NOCOLUMNHEADER) ;Height - 20 for the hidden Hal ScrollBar
SendMessage_(GadgetID(3), #LVM_SETIMAGELIST, #LVSIL_SMALL, imageList)
SetParent_(GadgetID(3),GadgetID(1))
SetWindowLongPtr_(GadgetID(3),#GWL_EXSTYLE,0)
SetGadgetColor(3,#PB_Gadget_BackColor,$EAFEFE)
SetGadgetColor(3,#PB_Gadget_LineColor,$C5C5C5)
For i = 0 To 500
AddGadgetItem(3, i, ""+Chr(10)+"")
Next
ImageList_Destroy_(imageList)
CloseGadgetList()
ButtonGadget(4,10,305,80,24,"Previous Page")
ButtonGadget(5,100,305,80,24,"Next Page")
SetWindowCallback(@WndProc())
HideWindow(0,0)
Repeat
ShowScrollBar_(GadgetID(1),#SB_BOTH,0)
ShowScrollBar_(GadgetID(2),#SB_BOTH,0)
ShowScrollBar_(GadgetID(3),#SB_BOTH,0)
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case 4
Index = Index - 50
If Index < 0
Index = 0
EndIf
SendMessage_(GadgetID(1),#LVM_ENSUREVISIBLE,Index,1)
SendMessage_(GadgetID(2),#LVM_ENSUREVISIBLE,Index,1)
SendMessage_(GadgetID(3),#LVM_ENSUREVISIBLE,Index,1)
Case 5
Index = Index + 50
SendMessage_(GadgetID(1),#LVM_ENSUREVISIBLE,Index,1)
SendMessage_(GadgetID(2),#LVM_ENSUREVISIBLE,Index,1)
SendMessage_(GadgetID(3),#LVM_ENSUREVISIBLE,Index,1)
EndSelect
EndSelect
ForEver
EndIf