um euch mein kleines Problem zu erläutern, habe ich euch mal nen Beispiel gebastelt:
Code: Alles auswählen
Enumeration
#Win_Main
EndEnumeration
Enumeration
#Container_0
#ExplorerTree_0
#ScrollBar_0
EndEnumeration
sInfo.SCROLLINFO
sInfo\cbSize = SizeOf(SCROLLINFO)
sInfo\fMask = #SIF_PAGE | #SIF_POS | #SIF_RANGE | #SIF_TRACKPOS
If OpenWindow(#Win_Main, 0, 0, 600, 300, "ExplorerTreeGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
ContainerGadget(#Container_0, 10, 10, 263, 200)
ExplorerTreeGadget(#ExplorerTree_0, 0, 0, GadgetWidth(#Container_0) + scrollBarWidth + 2, GadgetHeight(#Container_0),GetTemporaryDirectory(), #PB_Explorer_NoFiles)
CloseGadgetList()
ButtonGadget(30, 10, 250, 200, 20, "Scroll")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 30
SetScrollPos_(GadgetID(#ExplorerTree_0),#SB_VERT,500,1)
;SendMessage_(GadgetID(#ExplorerTree_0),#WM_SETREDRAW,1,0)
EndSelect
Case #PB_Event_CloseWindow
quit = #True
EndSelect
Until quit = #True
EndIf
Leider führt das bei einem kurz hintereinander erfolgenden Aufruf von SetScrollPos_ zu einem unangenehmen Flackern, was für die Augen sehr anstrengend ist.
Gibt es daher vielleicht eine andere Methode, bei der das Explorertreegdaget nicht unbedingt neu gezeichnet aber auf den aktuellen Scollbereich aktualisiert wird und dadurch ein Flackern unterbunden wird?