Explorertreegdaget nach SetScrollPos sanft aktualisieren?

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Explorertreegdaget nach SetScrollPos sanft aktualisieren?

Beitrag 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?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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 !!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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:
Windows 10 Pro, 64-Bit / Outtakes | Derek
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Na, in diesem Fall trifft das nicht ganz zu :mrgreen:
Antworten