Re: Synchronised Scroll Bars Swimming
Posted: Thu Mar 13, 2014 1:26 pm
Hi KCC
Full sync. of 2 ListIcons.
Full sync. of 2 ListIcons.
Code: Select all
Global oldCallback
Procedure LVcallback(hwnd, msg, wparam, lparam)
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_NOTIFY
Protected *nmHEADER.HD_NOTIFY = lParam
Select *nmHEADER\hdr\code
Case #HDN_ENDTRACK,#HDN_DIVIDERDBLCLICK
If hwnd = GadgetID(0)
Columnw = SendMessage_(GadgetID(0), #LVM_GETCOLUMNWIDTH, *nmHEADER\iItem,0)
SendMessage_(GadgetID(1), #LVM_SETCOLUMNWIDTH, *nmHEADER\iItem,Columnw)
ElseIf hwnd = GadgetID(1)
Columnw = SendMessage_(GadgetID(1), #LVM_GETCOLUMNWIDTH, *nmHEADER\iItem,0)
SendMessage_(GadgetID(0), #LVM_SETCOLUMNWIDTH, *nmHEADER\iItem,Columnw)
EndIf
EndSelect
Case #WM_VSCROLL,#WM_MOUSEWHEEL
If hwnd = GadgetID(1)
Item_Sp = SendMessage_(GadgetID(1), #LVM_GETITEMSPACING, 1, 0) >> 16
SelItem = GetScrollPos_(GadgetID(1),#SB_VERT) - GetScrollPos_(GadgetID(0),#SB_VERT)
SendMessage_(GadgetID(0), #LVM_SCROLL, 0, SelItem * Item_Sp)
ElseIf hwnd = GadgetID(0)
Item_Sp = SendMessage_(GadgetID(0), #LVM_GETITEMSPACING, 1, 0) >> 16
SelItem = GetScrollPos_(GadgetID(0),#SB_VERT) - GetScrollPos_(GadgetID(1),#SB_VERT)
SendMessage_(GadgetID(1), #LVM_SCROLL, 0, SelItem * Item_Sp)
EndIf
Case #WM_HSCROLL
If hwnd = GadgetID(1)
SelItem = GetScrollPos_(GadgetID(1),#SB_HORZ) - GetScrollPos_(GadgetID(0),#SB_HORZ)
SendMessage_(GadgetID(0), #LVM_SCROLL, SelItem , 0)
ElseIf hwnd = GadgetID(0)
SelItem = GetScrollPos_(GadgetID(0),#SB_HORZ) - GetScrollPos_(GadgetID(1),#SB_HORZ)
SendMessage_(GadgetID(1), #LVM_SCROLL, SelItem , 0)
EndIf
Case #WM_KEYDOWN ,#WM_MENUSELECT
If wParam=#VK_UP Or wParam=#VK_DOWN
If hwnd = GadgetID(1)
Item_Sp = SendMessage_(GadgetID(1), #LVM_GETITEMSPACING, 1, 0) >> 16
SelItem = GetScrollPos_(GadgetID(1),#SB_VERT) - GetScrollPos_(GadgetID(0),#SB_VERT)
SendMessage_(GadgetID(0), #LVM_SCROLL, 0, SelItem * Item_Sp)
ElseIf hwnd = GadgetID(0)
Item_Sp = SendMessage_(GadgetID(0), #LVM_GETITEMSPACING, 1, 0) >> 16
SelItem = GetScrollPos_(GadgetID(0),#SB_VERT) - GetScrollPos_(GadgetID(1),#SB_VERT)
SendMessage_(GadgetID(1), #LVM_SCROLL, 0, SelItem * Item_Sp)
EndIf
ElseIf wParam=#VK_LEFT Or wParam=#VK_RIGHT
If hwnd = GadgetID(1)
SelItem = GetScrollPos_(GadgetID(1),#SB_HORZ) - GetScrollPos_(GadgetID(0),#SB_HORZ)
SendMessage_(GadgetID(0), #LVM_SCROLL, SelItem , 0)
ElseIf hwnd = GadgetID(0)
SelItem = GetScrollPos_(GadgetID(0),#SB_HORZ) - GetScrollPos_(GadgetID(1),#SB_HORZ)
SendMessage_(GadgetID(1), #LVM_SCROLL, SelItem , 0)
EndIf
EndIf
EndSelect
ProcedureReturn result
EndProcedure
OpenWindow(0, 0, 0, 600, 430,"Syncronize ListIcon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, 580, 200, "Column 0", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
ListIconGadget(1, 10, 220, 580, 200, "Column 0", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @LVcallback())
oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LVcallback())
For n = 0 To 1
For i=1 To 5
AddGadgetColumn(n,i,"Column "+Str(i),150)
Next
For i = 0 To 100
AddGadgetItem(n,-1,"Line " + Str(i) + " Column 0" + Chr(10) + "Line " + Str(i) + " Column 1"+ Chr(10) + "Line " + Str(i) + " Column 2"+ Chr(10) + "Line " + Str(i) + " Column 3"+ Chr(10) + "Line " + Str(i) + " Column 4"+ Chr(10) + "Line " + Str(i) + " Column 5")
Next i
Next
Repeat
Select WaitWindowEvent()
Case #WM_MOUSEMOVE
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1