Fehler bei GetGadgetState()

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Fehler bei GetGadgetState()

Beitrag von PureLust »

Und noch ein kleiner Bug der mir aufgefallen ist.

Und zwar liefert GetGadgetState() im FullScreen-Modus kein Ergebnis mehr nachdem ein SetActiveGadget() ausgeführt wurde.

Für jeden der etwas der englischen Sprache mächtig ist habe ich mal einen kleinen Beispielcode beigepackt, der den Fehler demonstriert.
Einfach immer die Cursortasten (rauf/runter) benutzen um den TrackBar-Wert zu ändern.
An sonsten einfach den Anweisungen auf dem Bildschirm folgen.

Auch diesen Bug hatte ich bereits zur Beta-Phase per Mail an André geschickt und kein Feedback erhalten.
Daher nun also auch diesen Bug mal als offiziellen Forumsbeitrag.

Code: Alles auswählen

;
; 
; Little 'quick & durty' example, to demonstrate 
; that 'SetActiveGadget()' or 'TrackBarGadget()' 
; makes some Trouble, if a Full-Screen is active. 
; 
; Just start and follow the instructions displayed on the Screen. 
; 
Enumeration 
#Key_Esc 
#Key_CsrUp 
#Key_CsrDown 
#Key_Space 
#Key_F 
#GadgetTrackbar 
#GadgetActivate 
EndEnumeration 
InitSprite() 
InitKeyboard() 
OpenWindow(0,1,1,800,400,"kjhkj") 
CreateGadgetList(WindowID(0)) 
TrackBarGadget(#GadgetTrackbar,650,20,20,360,0,300,#PB_TrackBar_Vertical) 
AddKeyboardShortcut(0,#PB_Shortcut_Escape ,#Key_ESC) 
AddKeyboardShortcut(0,#PB_Shortcut_Up     ,#Key_CsrUp) 
AddKeyboardShortcut(0,#PB_Shortcut_Down   ,#Key_CsrDown) 
AddKeyboardShortcut(0,#PB_Shortcut_Space  ,#Key_Space) 
AddKeyboardShortcut(0,#PB_Shortcut_F      ,#Key_F) 
OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0) 
Repeat 
   Event = WindowEvent() 
   Menu  = EventMenu() 
   If FullScreen 
      ExamineKeyboard() 
      If KeyboardPushed(#PB_Key_Escape) 
         Event = #PB_Event_Menu 
         Menu  = #Key_ESC 
      ElseIf KeyboardPushed(#PB_Key_Up) 
         Event = #PB_Event_Menu 
         Menu  = #Key_CsrUp 
      ElseIf KeyboardPushed(#PB_Key_Down) 
         Event = #PB_Event_Menu 
         Menu  = #Key_CsrDown 
      ElseIf KeyboardPushed(#PB_Key_Space) 
         Event = #PB_Event_Menu 
         Menu  = #Key_Space 
      ElseIf KeyboardPushed(#PB_Key_F) 
         Event = #PB_Event_Menu 
         Menu  = #Key_F 
      EndIf 
   EndIf 
   If Event 
      Select Event 
      Case #PB_Event_Menu 
         Select Menu 
         Case #Key_ESC 
            Quit = 1 
         Case #Key_CsrUp 
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)+1) 
         Case #Key_CsrDown 
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)-1) 
         Case #Key_Space 
            SetActiveGadget(#GadgetTrackbar) 
         Case #Key_F 
            CloseScreen() 
            FullScreen = 1-FullScreen 
            If FullScreen 
               OpenScreen(640,480,32,"Test") 
            Else 
               OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0) 
            EndIf 
         EndSelect 
      Case #PB_Event_CloseWindow 
         Quit = 1 
      EndSelect 
   EndIf 
   ClearScreen(0) 
   StartDrawing(ScreenOutput()) 
   DrawText(10,10,"Trackbar-Value : "+Str(GetGadgetState(#GadgetTrackbar))+"   "+Str(ElapsedMilliseconds()),$ffffff,0)   ; <<<< Zeile geändert !!!
   If Not FullScreen 
      DrawText(10,50,"1. Use CsrUp / CsrDown to change Trackbar Values", $ffffff,0) 
      DrawText(10,80,"2. Press 'f' to switch to Full-Screen Mode", $ffffff,0) 
   Else 
      DrawText(10, 50,"1. Use CsrUp / CsrDown to see, that Trackbar still works", $ffffff,0) 
      DrawText(10, 80,"2. Press 'Space' to activate TrackbarGadget, using 'SetActiveGadget()'", $ffffff,0) 
      DrawText(10,110,"3. Use CsrUp / CsrDown to see, that Trackbar-Value does NOT change anymore", $ffffff,0) 
      DrawText(10,140,"4. Press 'f' to leave Full-Screen Mode", $ffffff,0) 
      DrawText(10,310,"PS: The Problem seems to be in READING the Value using 'GetGadgetState()'", $ffffff,0) 
      DrawText(40,340,"because you will still change the Value, but you cannot READ", $ffffff,0) 
      DrawText(40,370,"it anymore with 'GetGadgetState()'.", $ffffff,0) 
   EndIf 
   StopDrawing() 
   FlipBuffers(2) 
   Delay(2) 
Until Quit 
CloseScreen() 
CloseWindow(0)
Grüße, PureLust.
Zuletzt geändert von PureLust am 07.06.2006 02:18, insgesamt 2-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Code convertiert zu 3.94: (funtzt auch nicht)

Code: Alles auswählen

;
; Little 'quick & durty' example, to demonstrate
; that 'SetActiveGadget()' or 'TrackBarGadget()'
; makes some Trouble, if a Full-Screen is active.
;
; Just start and follow the instructions displayed on the Screen.
;
Enumeration
#Key_Esc
#Key_CsrUp
#Key_CsrDown
#Key_Space
#Key_F
#GadgetTrackbar
#GadgetActivate
EndEnumeration
InitSprite()
InitKeyboard()
OpenWindow(0,1,1,800,400,#PB_Window_SystemMenu,"kjhkj")
CreateGadgetList(WindowID(0))
TrackBarGadget(#GadgetTrackbar,650,20,20,360,0,300,#PB_TrackBar_Vertical)
AddKeyboardShortcut(0,#PB_Shortcut_Escape ,#Key_ESC)
AddKeyboardShortcut(0,#PB_Shortcut_Up     ,#Key_CsrUp)
AddKeyboardShortcut(0,#PB_Shortcut_Down   ,#Key_CsrDown)
AddKeyboardShortcut(0,#PB_Shortcut_Space  ,#Key_Space)
AddKeyboardShortcut(0,#PB_Shortcut_F      ,#Key_F)
OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0)
Repeat
   Event = WindowEvent()
   Menu  = EventMenuID()
   If FullScreen
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_Escape)
         Event = #PB_Event_Menu
         Menu  = #Key_ESC
      ElseIf KeyboardPushed(#PB_Key_Up)
         Event = #PB_Event_Menu
         Menu  = #Key_CsrUp
      ElseIf KeyboardPushed(#PB_Key_Down)
         Event = #PB_Event_Menu
         Menu  = #Key_CsrDown
      ElseIf KeyboardPushed(#PB_Key_Space)
         Event = #PB_Event_Menu
         Menu  = #Key_Space
      ElseIf KeyboardPushed(#PB_Key_F)
         Event = #PB_Event_Menu
         Menu  = #Key_F
      EndIf
   EndIf
   If Event
      Select Event
      Case #PB_Event_Menu
         Select Menu
         Case #Key_ESC
            Quit = 1
         Case #Key_CsrUp
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)+1)
         Case #Key_CsrDown
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)-1)
         Case #Key_Space
            ActivateGadget(#GadgetTrackbar)
         Case #Key_F
            CloseScreen()
            FullScreen = 1-FullScreen
            If FullScreen
               OpenScreen(640,480,32,"Test")
            Else
               OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0)
            EndIf
         EndSelect
      Case #PB_Event_CloseWindow
         Quit = 1
      EndSelect
   EndIf
   ClearScreen(0,0,0)
   StartDrawing(ScreenOutput())
   Locate(10,10)
   DrawingMode(1)
   FrontColor(255,255,255)
      DrawText("Trackbar-Value : "+Str(GetGadgetState(#GadgetTrackbar)))
   If FullScreen=0
   Locate(10,50)
      DrawText("1. Use CsrUp / CsrDown to change Trackbar Values")
      Locate(10,80)
      DrawText("2. Press 'F' to switch to Full-Screen Mode")
   Else
   Locate(10,50)
      DrawText("1. Use CsrUp / CsrDown to see, that Trackbar still works")
      Locate(10,80)
      DrawText("2. Press 'Space' to activate TrackbarGadget, using 'SetActiveGadget()'")
      Locate(10,110)
      DrawText("3. Use CsrUp / CsrDown to see, that Trackbar-Value does NOT change anymore")
      Locate(10,140)
      DrawText("4. Press 'F' to leave Full-Screen Mode")
      Locate(10,310)
      DrawText("PS: The Problem seems to be in READING the Value using 'GetGadgetState()'")
      Locate(40,340)
      DrawText("because you will still change the Value, but you cannot READ")
      Locate(40,370)
      DrawText("it anymore with 'GetGadgetState()'.")
   EndIf
   StopDrawing()
   FlipBuffers(2)
   Delay(2)
Until Quit
CloseScreen()
CloseWindow(0)
Aufgrund dessen, das die Taste f Auch nicht mehr funktioniert
nehme ich an, das einfach der Focus auf das Gadget gesetzt wird, und er gar nicht mehr auf den Screen zeichnen kann.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Hallo Macros,

das 'f' nicht mehr funktinoiert kann ich nicht nachvollziehen - bei mir kannst Du mit 'f' zu jederzeit zwischen Vollbild und Windowed-Mode hin und herschalten.

Das der Focus auf das Gadget geschaltet wird ist natürlich klar, aber warum sollte er dann nicht mehr auf den Screen zeichnen können?

Um diese Sache aber mal zu überprüfen, habe ich in Zeile 77 noch 'ne kleine Veränderung vorgenommen, so dass nun ein permanenter Zähler mitläuft.
Hieran kann man dann erkennen, dass Du mit Deiner Vermutung scheinbar richtig lagst und er nicht mehr auf den Screen zeichnen kann.

Die Frage ist nur: WARUM NICHT ???

Denn im Windowed-Mode läuft der Zähler ja auch permanent mit.
Hätte Jemand evt. eine plausible Erklärung dafür?

ThanX und Gruß,
PureLust.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Ich tippe darauf, dass das falsche FENSTER den Focus erhält.

Wenn Du OpenWindowedScreen() aufruft, wird ein Screen auf dem erstellten Window 0 erzeugt, somit hat auch Dein Window automatische immer den Focus (und SetActiveGadget macht das, was es soll). Wenn Du OpenScreen aufrufst, wird zusätzlich zu Deinem Window 0 ein zweites Vollbild-Fenster erzeugt (siehst Du, wenn Du Alt-Tab drückst). Wenn Du jetzt ein SetActiveGadget machst, verliert das Vollbild den Focus und Du setzt den Focus auf Dein Window 0. Deshalb aktualisiert er Dein Vollbild nicht mehr.

Versuch mal das (aber wie Du schon geschrieben hast: quick & dirty):

Code: Alles auswählen

; 
; 
; Little 'quick & durty' example, to demonstrate 
; that 'SetActiveGadget()' or 'TrackBarGadget()' 
; makes some Trouble, if a Full-Screen is active. 
; 
; Just start and follow the instructions displayed on the Screen. 
;
Global WindowID
 
Enumeration 
#Key_Esc 
#Key_CsrUp 
#Key_CsrDown 
#Key_Space 
#Key_F 
#GadgetTrackbar 
#GadgetActivate 
EndEnumeration 
InitSprite() 
InitKeyboard() 
OpenWindow(0,1,1,800,400,"kjhkj") 
CreateGadgetList(WindowID(0)) 
TrackBarGadget(#GadgetTrackbar,650,20,20,360,0,300,#PB_TrackBar_Vertical) 
AddKeyboardShortcut(0,#PB_Shortcut_Escape ,#Key_ESC) 
AddKeyboardShortcut(0,#PB_Shortcut_Up     ,#Key_CsrUp) 
AddKeyboardShortcut(0,#PB_Shortcut_Down   ,#Key_CsrDown) 
AddKeyboardShortcut(0,#PB_Shortcut_Space  ,#Key_Space) 
AddKeyboardShortcut(0,#PB_Shortcut_F      ,#Key_F) 
OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0) 
Repeat 
   WindowID = ScreenID()
   Event = WindowEvent() 
   Menu  = EventMenu() 
   If FullScreen 
      ExamineKeyboard() 
      If KeyboardPushed(#PB_Key_Escape) 
         Event = #PB_Event_Menu 
         Menu  = #Key_ESC 
      ElseIf KeyboardPushed(#PB_Key_Up) 
         Event = #PB_Event_Menu 
         Menu  = #Key_CsrUp 
      ElseIf KeyboardPushed(#PB_Key_Down) 
         Event = #PB_Event_Menu 
         Menu  = #Key_CsrDown 
      ElseIf KeyboardPushed(#PB_Key_Space) 
         Event = #PB_Event_Menu 
         Menu  = #Key_Space 
      ElseIf KeyboardPushed(#PB_Key_F) 
         Event = #PB_Event_Menu 
         Menu  = #Key_F 
      EndIf 
   EndIf 
   If Event 
      Select Event 
      Case #PB_Event_Menu 
         Select Menu 
         Case #Key_ESC 
            Quit = 1 
         Case #Key_CsrUp 
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)+1) 
         Case #Key_CsrDown 
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)-1) 
         Case #Key_Space 
            SetActiveGadget(#GadgetTrackbar) 
         Case #Key_F 
            CloseScreen() 
            FullScreen = 1-FullScreen 
            If FullScreen 
               OpenScreen(640,480,32,"Test")
               WindowID = ScreenID()
            Else 
               OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0)
               WindowID = ScreenID()
            EndIf 
         EndSelect 
      Case #PB_Event_CloseWindow 
         Quit = 1 
      EndSelect 
   EndIf 
   SetFocus_(WindowID)
   ClearScreen(0) 
   StartDrawing(ScreenOutput()) 
   DrawText(10,10,"Trackbar-Value : "+Str(GetGadgetState(#GadgetTrackbar))+"   "+Str(ElapsedMilliseconds()),$ffffff,0)   ; <<<< Zeile geändert !!! 
   If Not FullScreen 
      DrawText(10,50,"1. Use CsrUp / CsrDown to change Trackbar Values", $ffffff,0) 
      DrawText(10,80,"2. Press 'f' to switch to Full-Screen Mode", $ffffff,0) 
   Else 
      DrawText(10, 50,"1. Use CsrUp / CsrDown to see, that Trackbar still works", $ffffff,0) 
      DrawText(10, 80,"2. Press 'Space' to activate TrackbarGadget, using 'SetActiveGadget()'", $ffffff,0) 
      DrawText(10,110,"3. Use CsrUp / CsrDown to see, that Trackbar-Value does NOT change anymore", $ffffff,0) 
      DrawText(10,140,"4. Press 'f' to leave Full-Screen Mode", $ffffff,0) 
      DrawText(10,310,"PS: The Problem seems to be in READING the Value using 'GetGadgetState()'", $ffffff,0) 
      DrawText(40,340,"because you will still change the Value, but you cannot READ", $ffffff,0) 
      DrawText(40,370,"it anymore with 'GetGadgetState()'.", $ffffff,0) 
   EndIf 
   StopDrawing() 
   FlipBuffers(2) 
   Delay(2) 
Until Quit 
CloseScreen() 
CloseWindow(0)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

seh ich das richtig, dass du versuchst nen zweiten screen zu öffnen?

geht in PB nicht, immer nur ein screen zur zeit möglich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

@Kaeru Gaman:
Das versucht er nicht. Er schließt den "alten" vorher mittels CloseScreen()
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok... hab ich dann übersehen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Halle real,

mit dem Window-Focus scheinst Du wohl recht zu haben.
Dennoch sind mir 2 Dinge ein wenig unverständlich:

1. Warum sollte einen Vollbild-Screen nicht mehr aktualisieren, wenn dieser nicht mehr den Focus hat?

2. Auch dies scheint nicht immer konsistent der Fall zu sein !!!
Ich habe nachfolgenden Code mal so abgeändert, das der Focus permanent auf das Fenster (also nicht den Screen) gelenkt wird.
Auch wird nun der aktuelle Modus angegeben in dem er sich zum Zeitpunkt des Draws befindet (also FullScreen oder Windowed-Screen).
Hieran kann man erkennen, dass der erste Frame im FullScreen-Modus sehrwohl gezeichnet wird.
Weiterhin machte es mich etwas stutzig, dass der Screen noch ab und zu refreshed wird, wenn man mit der Maus klickt.
Aus diesem Grund habe ich noch eine Anzeige hinzugefügt, die angibt ob der Screen aktiv ist oder nicht (Abfrage per "IsScreenActive()").
Dies zeigt, dass doch scheinbar eine Ausgabe und ein Refresh stattfinden kann wenn der Screen nicht aktiv ist.
Womit wiederum doppeltes Gewicht auf oben genannte Frage in Punkt 1. fällt.

Alles in allem meiner Meinung nach ein sehr unlogisches und inkonsistentes Verhalten.
Oder hab ich da immer noch irgendwo einen Denkfehler? :roll:

Code: Alles auswählen

; 
; 
; Little 'quick & durty' example, to demonstrate 
; that 'SetActiveGadget()' or 'TrackBarGadget()' 
; makes some Trouble, if a Full-Screen is active. 
; 
; Just start and follow the instructions displayed on the Screen. 
; 
Global WindowID 
  
Enumeration 
#Key_Esc 
#Key_CsrUp 
#Key_CsrDown 
#Key_Space 
#Key_F 
#GadgetTrackbar 
#GadgetActivate 
EndEnumeration 
InitSprite() 
InitKeyboard() 
OpenWindow(0,1,1,800,400,"kjhkj") 
CreateGadgetList(WindowID(0)) 
TrackBarGadget(#GadgetTrackbar,650,20,20,360,0,300,#PB_TrackBar_Vertical) 
AddKeyboardShortcut(0,#PB_Shortcut_Escape ,#Key_ESC) 
AddKeyboardShortcut(0,#PB_Shortcut_Up     ,#Key_CsrUp) 
AddKeyboardShortcut(0,#PB_Shortcut_Down   ,#Key_CsrDown) 
AddKeyboardShortcut(0,#PB_Shortcut_Space  ,#Key_Space) 
AddKeyboardShortcut(0,#PB_Shortcut_F      ,#Key_F) 
OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0) 
Repeat 
   ;WindowID = ScreenID() 
   WindowID = WindowID(0)    ; <<<< Zeile geändert !!! 
   Event = WindowEvent()
   Repeat : LastEvent : If LastEvent <> 0 : Event = LastEvent : EndIf : Until LastEvent=0   ; <<< Eventbuffer leeren, der sich während des Delay(50) aufgebaut haben kann
   Menu  = EventMenu() 
   If FullScreen 
      ExamineKeyboard() 
      If KeyboardPushed(#PB_Key_Escape) 
         Event = #PB_Event_Menu 
         Menu  = #Key_ESC 
      ElseIf KeyboardPushed(#PB_Key_Up) 
         Event = #PB_Event_Menu 
         Menu  = #Key_CsrUp 
      ElseIf KeyboardPushed(#PB_Key_Down) 
         Event = #PB_Event_Menu 
         Menu  = #Key_CsrDown 
      ElseIf KeyboardPushed(#PB_Key_Space) 
         Event = #PB_Event_Menu 
         Menu  = #Key_Space 
      ElseIf KeyboardPushed(#PB_Key_F) 
         Event = #PB_Event_Menu 
         Menu  = #Key_F 
      EndIf 
   EndIf 
   If Event 
      Select Event 
      Case #PB_Event_Menu 
         Select Menu 
         Case #Key_ESC 
            Quit = 1 
         Case #Key_CsrUp 
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)+1) 
         Case #Key_CsrDown 
            SetGadgetState(#GadgetTrackbar,GetGadgetState(#GadgetTrackbar)-1) 
         Case #Key_Space 
            SetActiveGadget(#GadgetTrackbar) 
         Case #Key_F 
            CloseScreen() 
            FullScreen = 1-FullScreen 
            If FullScreen 
               OpenScreen(640,480,32,"Test") 
               WindowID = ScreenID() 
            Else 
               OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0) 
               WindowID = ScreenID() 
            EndIf 
         EndSelect 
      Case #PB_Event_CloseWindow 
         Quit = 1 
      EndSelect 
   EndIf 
   SetFocus_(WindowID)
   Delay(50)   ; <<<< Zeile hinzugefügt !!!
   ClearScreen(0) 
   StartDrawing(ScreenOutput()) 
   DrawText(10,10,"Trackbar-Value : "+Str(GetGadgetState(#GadgetTrackbar))+"   "+Str(ElapsedMilliseconds()),$ffffff,0)   ; <<<< Zeile geändert !!! 
   DrawText(260,10,"Screen "+StringField("Inactive|Active",1+IsScreenActive(),"|"),$ffffff,0)   ; <<<< Zeile hinzugefügt !!! 
   DrawText(380,10,"Mode : "+StringField("Windowed-Screen|FullScreen",1+FullScreen,"|"),$ffffff,0)   ; <<<< Zeile hinzugefügt !!! 
   
   LineXY(Random(640),Random(400),Random(640),Random(400),RGB(128,0,255))
   If Not FullScreen 
      DrawText(10,50,"1. Use CsrUp / CsrDown to change Trackbar Values", $ffffff,0) 
      DrawText(10,80,"2. Press 'f' to switch to Full-Screen Mode", $ffffff,0) 
   Else 
      DrawText(10, 50,"1. Use CsrUp / CsrDown to see, that Trackbar still works", $ffffff,0) 
      DrawText(10, 80,"2. Press 'Space' to activate TrackbarGadget, using 'SetActiveGadget()'", $ffffff,0) 
      DrawText(10,110,"3. Use CsrUp / CsrDown to see, that Trackbar-Value does NOT change anymore", $ffffff,0) 
      DrawText(10,140,"4. Press 'f' to leave Full-Screen Mode", $ffffff,0) 
      DrawText(10,310,"PS: The Problem seems to be in READING the Value using 'GetGadgetState()'", $ffffff,0) 
      DrawText(40,340,"because you will still change the Value, but you cannot READ", $ffffff,0) 
      DrawText(40,370,"it anymore with 'GetGadgetState()'.", $ffffff,0) 
   EndIf 
   StopDrawing() 
   FlipBuffers(0) 
   Delay(2) 
Until Quit 
CloseScreen() 
CloseWindow(0)
Grüße, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Du hast diese

Code: Alles auswählen

            If FullScreen 
               OpenScreen(640,480,32,"Test") 
               WindowID = ScreenID() 
            Else 
               OpenWindowedScreen(WindowID(0),0,0,600,400,0,0,0) 
               WindowID = ScreenID() 
            EndIf
Passage übersehen. In diesem Moment (bis zum nächsten Schleifendurchlauf) enthält WindowID doch den Wert des Vollscreens, zeichnet also einen Frame des Vollscreens.

Wenn Du die Maus klickst ist es logisch, dass der Vollscreen aktualisiert wirst, weil Du damit den Focus manuell auf den Vollscreen legst, bis er beim nächsten Schleifendurchlauf wieder auf das Window 0 gelegt wird.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

real hat geschrieben:Du hast diese ... Passage übersehen. In diesem Moment (bis zum nächsten Schleifendurchlauf) enthält WindowID doch den Wert des Vollscreens, zeichnet also einen Frame des Vollscreens.
Ist mir inzwischen auch schon aufgefallen - dies erklärt, warum nach dem Fullscreen der erste Frame gezeichnet wird ("IsScreenActive()" gibt ja zu diesem Zeitpunkt auch noch ein AKTIV zurück).
real hat geschrieben:Wenn Du die Maus klickst ist es logisch, dass der Vollscreen aktualisiert wirst, weil Du damit den Focus manuell auf den Vollscreen legst, bis er beim nächsten Schleifendurchlauf wieder auf das Window 0 gelegt wird.
Das war auch mein erster Gedanke .... aber das scheint nicht ganz so zu stimmen.
Denn warum gibt "IsScreenActive()" dann aus, dass der Screen NICHT aktiv ist?
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Gesperrt