Slider Update?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Firstdeathmaker

Betreff: Slider Update?

BeitragDi, Aug 05, 2008 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab ein Problem mit dem Update des Sliders. Bei meinem unten angeführten Program hab ich einen Slider und ein Canvas (soll später eine Liste enthalten). Ich hab den Slider mit dem Canvas verbunden, dabei ergibt sich aber das Problem, dass der Slider erst ein EVENT_GADGETACTION emittiert, wenn er losgelassen wird, und davor garnichts passiert. Das Window sollte aber schon beim reinen Bewegen des Sliders verschoben werden. Wie mach ich das?


Code: [AUSKLAPPEN]


SuperStrict

Import MaxGUI.MaxGUI
Import MaxGUI.Drivers

Local window:TGadget = CreateWindow:TGadget( "Title" , ClientWidth(Desktop()) / 4 , ClientHeight(Desktop()) / 4 , ClientWidth(Desktop()) / 2 , ClientHeight(Desktop()) /2, Null, 13)
Local canvas:TGadget = CreateCanvas:TGadget( 10 , 10 , ClientWidth(window) - 40 , ClientHeight(window) - 20 , window)
   Local canvasContentY:Float

Local slider:TGadget = CreateSlider:TGadget( ClientWidth(window) - 30 ,10, 20,ClientHeight(window) - 20,window,SLIDER_VERTICAL)
SetSliderRange(slider,0,100)


CreateTimer 60

Repeat
   WaitEvent()
   Select EventID()
      Case EVENT_WINDOWCLOSE
         End
      
      Case EVENT_TIMERTICK
         RedrawGadget canvas
         
      Case EVENT_GADGETPAINT
         SetGraphics CanvasGraphics(canvas)
         Cls
            DrawText "Hello World" , 10 , - canvasContentY
            
            DrawText "Hello New World" , 10 ,100- canvasContentY
            
            DrawText "Hello Brave New World" , 10 ,200- canvasContentY
         Flip
         
      Case EVENT_GADGETACTION
      
         Select TGadget(EventSource() )
            Case slider
               canvasContentY = EventData() * 10
         
         
         
         End Select
   
   End select
   
   
Forever
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

D2006

Administrator

BeitragDi, Aug 05, 2008 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Tjaja, auch den alten Hasen hier im Forum kann man die Suche immer mal ans Herz legen. Wink

https://www.blitzforum.de/foru...hp?t=20004
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Firstdeathmaker

BeitragDi, Aug 05, 2008 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
oh *schäm*, hab zwar die suche benutzt, aber das oben angegebene nicht gefunden.

Danke!
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

d-bug

BeitragDi, Aug 05, 2008 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Problematisch wird die Geschichte mit den EventHooks allerdings, wenn du Cross-Plattform planst!

Selbige sorgen nämlich dafür, dass du unter OSX mannigfaltige Probleme mit Comboboxen, modalen Systemdialogen und ähnlichem Gelumpe bekommst. Dieses Problem ist schon seit gut einem Jahr bekannt und wurde noch nicht gefixt! Kleiner Workaround, für Sonderfälle ist es den Eventhook vorher pausieren zu lassen, bevor man einen Requester oder ähnliches öffnet. Pausieren heißt in dem Fall, einfach eine Pausen-Variable zu definieren und wenn diese dann True ist direkt das Event zurückzugeben

Code: [AUSKLAPPEN]
   Function EventHook:Object (ID:Int, Data:Object, Context:Object)

      Local Event:TEvent = TEvent(Data)
      If (ID <> EmitEventHook) Or (Not Event) Return Data


      If MyType.OnHookIdle() = True Return Data '<-- Hier wird die Pause abgefangen.
      
      Select Event.ID
         Case EVENT_GADGETPAINT
            Select Event.Source
               Case MyType.Canvas
                  MyType.OnPaint () 'OnIrgendwas ist bei mir immer eine Methode die auf einen Event reagiert
            End Select
         Case EVENT_GADGETACTION
            Select Event.Source
               Case MyType.Scrollbar
                  MyType.OnScroll ()
                  RedrawGadget (MyType.Canvas)
            End Select
      End Select
      
      Return Data
   End Function


So in etwa sieht der passende Hook bei mir aus.

cheers

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group