Seite 2 von 2

Re: Zwei ListIcons verbunden - Nur warum Scrollt es Falsch ?

Verfasst: 22.05.2010 00:35
von al90
So, nach längerem suchen & Experimentieren habe ich nun endlich die Lösung gefunden. :D
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. :allright:

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

Re: Zwei ListIcons verbunden - Nur warum Scrollt es Falsch ?

Verfasst: 05.10.2016 23:42
von schleicher
Danke genau danach habe ich gesucht. Jetzt fehlt das gleiche nur bei Verwendung eines ListIconGadgets und einem ScrollAeraGadget. Wie muss der Api befehl lauten um bei dem ScrollAeraGadget die die scrollposition zu bekommen und wie die sendmassage um die scrollposition zu setzen ?

Re: Zwei ListIcons verbunden - Nur warum Scrollt es Falsch ?

Verfasst: 06.10.2016 20:09
von schleicher
Habs doch selbst herausgefunden. Für das setzen der Posistion des ScrollAreagadgets nicht Sendmessage verwenden sondern SetScrollpos_(GadgetID(1), #SB_Vert, pos, 1)
Die aktuelle Position kann weiterhin mit GetScrollpos_ ermittelt werden. Es bleibt nur noch ein Problem . Der Scrollbalken funktioniert, jedoch scollt der Inhalt des ScrollAreaGadget nicht mit .

Code: Alles auswählen

SendMessage_(GadgetID(#Scrollarea_list), #LVM_GETITEMPOSITION, v-1, pitem.POINT)
funktioniert leider nur zum Listicongadget. Scheitert wohl an dem #LVM_GETITEMPOSITION.
Gibs da ein andere Konstante für das ScrollAreaGadget ??