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

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

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

Beitrag 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
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

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

Beitrag 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 ?
Purebasic 5.51
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

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

Beitrag 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 ??
Purebasic 5.51
Antworten