
Manchmal kann es so einfach sein, aber man kommt nicht gleich darauf.
Man braucht nur die variable NeueScrollPos - AlteScrollPos setzen und schon passt alles wunderbar.
Eventuell kanns ja noch jemand gebrauchen.

Code: Alles auswählen
Global Subclass1, Subclass2
Procedure.l ListIconProc1(Handle, Message, wParam, lParam)
Shared OldPosHORZ, pitem.POINT
If Message=#WM_VSCROLL
v=GetScrollPos_(GadgetID(0),#SB_VERT)
If v=0:v=-1:EndIf
SendMessage_(GadgetID(1), #LVM_GETITEMPOSITION, v-1, pitem.POINT)
SendMessage_(GadgetID(1), #LVM_SCROLL, 0, pitem\y)
ElseIf Message=#WM_HSCROLL
h=GetScrollPos_(GadgetID(0),#SB_HORZ)
pos=h-OldPosHORZ
OldPosHORZ=h
SendMessage_(GadgetID(1), #LVM_SCROLL, pos, 0)
EndIf
ProcedureReturn CallWindowProc_(Subclass1, Handle, Message, wParam, lParam)
EndProcedure
Procedure.l ListIconProc2(Handle, Message, wParam, lParam)
Shared OldPosHORZ, pitem.POINT
If Message=#WM_VSCROLL
v=GetScrollPos_(GadgetID(1),#SB_VERT)
If v=0:v=-1:EndIf
SendMessage_(GadgetID(0), #LVM_GETITEMPOSITION, v-1, pitem.POINT)
SendMessage_(GadgetID(0), #LVM_SCROLL, 0, pitem\y)
ElseIf Message=#WM_HSCROLL
h=GetScrollPos_(GadgetID(1),#SB_HORZ)
pos=h-OldPosHORZ
OldPosHORZ=h
SendMessage_(GadgetID(0), #LVM_SCROLL, pos, 0)
EndIf
ProcedureReturn CallWindowProc_(Subclass2, Handle, Message, wParam, lParam)
EndProcedure
OpenWindow(0, 160, 160, 812, 600, "ListIcons")
ListIconGadget(0, 5, 5, 400, 590, "Column", 800, #PB_ListIcon_FullRowSelect)
ListIconGadget(1, 407, 5, 400, 590, "Column", 800, #PB_ListIcon_FullRowSelect)
For x = 1 To 300
AddGadgetItem(0, -1, "Testzeile "+RSet(Str(x),3,"0")+" - ABCDEFGHIGKLMNOPQRSTUVWXYZ 1234567890")
AddGadgetItem(1, -1, "Testzeile "+RSet(Str(x),3,"0")+" - ABCDEFGHIGKLMNOPQRSTUVWXYZ 1234567890")
Next x
Subclass1 = SetWindowLong_(GadgetID(0), #GWL_WNDPROC, @ListIconProc1())
Subclass2 = SetWindowLong_(GadgetID(1), #GWL_WNDPROC, @ListIconProc2())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow