Code: Select all
Global oldCallback
Procedure LVcallback(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldCallback, hWnd, uMsg, wParam, lParam)
Select uMsg
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, 620, 400,"Syncronize ListIcon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, 300, 380, "Column 0", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection|#LVS_NOCOLUMNHEADER)
ListIconGadget(1, 310, 10, 300, 380, "Column 0", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection|#LVS_NOCOLUMNHEADER)
For n = 0 To 1
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
oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @LVcallback())
oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LVcallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 0
EndSelect
EndSelect
Until Quit = 1