Seite 1 von 1

Position der Scrollbar in einem ListIconGadget ermitteln

Verfasst: 09.04.2014 21:35
von SBond
Hallo Leute,

gibt es eine Möglichkeit, die Position der Scrollbar in einem ListIconGadget zu ermitteln?
Ich möchte zwei ListIconGadget von der Position synchronisieren. Also wenn ich die erste herunter scrolle, dann soll die zweite auch herunterscrollen (auf die gleiche Position).

Über WinAPI kann ich die Position setzen, aber ich weiß nicht wie ich diese auslesen kann. Kann jemand helfen?


Code: Alles auswählen

OpenWindow(0,0,0,600,400,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

ListIconGadget(1, 10,10,285,380,"Irgendetwas",200, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
ListIconGadget(2,305,10,285,380,"Irgendetwas",200, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)

For i=1 To 100 Step 1
	AddGadgetItem(1,-1,"Item" + Str(i))
	AddGadgetItem(2,-1,"Item" + Str(i))
Next

SendMessage_(GadgetID(1), #LVM_SCROLL, 0, 500)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
viele Grüße,
SBond

Re: Position der Scrollbar in einem ListIconGadget ermitteln

Verfasst: 09.04.2014 21:42
von RSBasic
Mit:

Code: Alles auswählen

GetScrollPos_(GadgetID(#Gadget), #SB_VERT)
Bzw.: http://www.purebasic.fr/english/viewtop ... 88#p440288

Re: Position der Scrollbar in einem ListIconGadget ermitteln

Verfasst: 09.04.2014 21:47
von X360 Andy
Das hätte ich noch im Angebot

Code: Alles auswählen

LVM_GOI = SendMessage_(GadgetID(1),#LVM_GETTOPINDEX,0,0)
LVM_GCP = SendMessage_(GadgetID(1),#LVM_GETCOUNTPERPAGE,0,0)
 SendMessage_(GadgetID(2),#LVM_ENSUREVISIBLE,LVM_GOI+LVM_GCP - 1,0)

Re: Position der Scrollbar in einem ListIconGadget ermitteln

Verfasst: 09.04.2014 21:58
von SBond
super.

vielen Dank :)

Re: Position der Scrollbar in einem ListIconGadget ermitteln

Verfasst: 09.04.2014 23:31
von SBond
Zur Vollständigkeit die (mögliche) Lösung:

Code: Alles auswählen

Declare Synchronisation()

OpenWindow(0,0,0,600,400,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

ListIconGadget(1, 10,10,285,380,"Irgendetwas",200, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
ListIconGadget(2,305,10,285,380,"Irgendetwas",200, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)

For i=0 To 100 Step 1
   AddGadgetItem(1,-1,"Item" + Str(i))
   AddGadgetItem(2,-1,"Item" + Str(i))
Next


AddWindowTimer(0,1,10)
BindEvent(#PB_Event_Timer, @Synchronisation())

Repeat:Until WaitWindowEvent(20) = #PB_Event_CloseWindow



Procedure Synchronisation()
	
	Static Pos_List_A_old
	Static Pos_List_B_old
	
	Pos_List_A = SendMessage_(GadgetID(1),#LVM_GETTOPINDEX,0,0)
	Pos_List_B = SendMessage_(GadgetID(2),#LVM_GETTOPINDEX,0,0)
	
	PageCount_A = SendMessage_(GadgetID(1),#LVM_GETCOUNTPERPAGE,0,0)
	PageCount_B = SendMessage_(GadgetID(2),#LVM_GETCOUNTPERPAGE,0,0)
	
	If EventTimer() = 1
		
		If Pos_List_A <> Pos_List_A_old
			SendMessage_(GadgetID(2),#LVM_ENSUREVISIBLE,Pos_List_A + PageCount_A - 1, 0)
			SendMessage_(GadgetID(2),#LVM_ENSUREVISIBLE,Pos_List_A, 0)
			Pos_List_A_old = Pos_List_A
			Pos_List_B_old = Pos_List_B
			
		ElseIf Pos_List_B <> Pos_List_B_old
			SendMessage_(GadgetID(1),#LVM_ENSUREVISIBLE,Pos_List_B + PageCount_B - 1, 0)
			SendMessage_(GadgetID(1),#LVM_ENSUREVISIBLE,Pos_List_B, 0)
			Pos_List_A_old = Pos_List_A
			Pos_List_B_old = Pos_List_B
			
		EndIf
		
	EndIf
	
EndProcedure
nochmals Danke für eure Hilfe ;)