Seite 1 von 1

Explorertreegdaget nach SetScrollPos sanft aktualisieren?

Verfasst: 11.11.2007 17:52
von CNESM
Hallo Leute,

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
Nach einem Klick auf den Button "Scroll" sollte der Explorertreegadget automatisch bis zum Ende scrollen. Leider reicht hier der Befehl SetScrollPos_ wohl nicht aus. In der Vergangenheit habe ich das mit einem einfachen, aber vielleicht etwas radikalen Befehl #WM_SETREDRAW gelöst.

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?

Verfasst: 11.11.2007 19:26
von Fluid Byte

Code: Alles auswählen

OpenWindow(0,0,0,400,330,"ExplorerTreeGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ExplorerTreeGadget(0,0,0,400,300,GetTemporaryDirectory(),#PB_Explorer_NoFiles)
ButtonGadget(1,5,305,200,20,"Scroll")

Repeat
	EventID = WaitWindowEvent()

	If EventID = #PB_Event_Gadget And EventGadget() = 1
		GetScrollRange_(GadgetID(0),#SB_VERT,@lpMin,@lpMax)
		 
		SendMessage_(GadgetID(0),#WM_VSCROLL,#SB_THUMBPOSITION | lpMax << 16,0)
	EndIf
Until EventID  = #PB_Event_CloseWindow

Verfasst: 12.11.2007 09:45
von CNESM
Wenn ich mir dein Beispiel so anschaue ist es simpel und funktionell, aber denkt ihr, ich wäre da allein drauf gekommen ? Niemals :mrgreen:
Was würde wir nur ohne unseren lieben Fluid Byte machen? :)

Danke für deine Hilfe !!

Verfasst: 12.11.2007 12:48
von Fluid Byte
CNESM hat geschrieben:Was würde wir nur ohne unseren lieben Fluid Byte machen? :)
Auf dem Feld verrecken (militärisch gesprochen)! :mrgreen:

Verfasst: 12.11.2007 13:19
von CNESM
Na, in diesem Fall trifft das nicht ganz zu :mrgreen: