Fenster schwarz nach Standby
Re: Fenster schwarz nach Standby
Mittlerweile weiß ich, warum das Fenster schwarz blieb. Der Code enthält ein finales FlipBuffers(), was zunächst am Ende weiter flippte. Danach habe ich nur noch ein einziges Mal flippen lassen. Und dann kam nach dem Aufwecken aus dem Energiesparmodus das Fenster mit der Programm-Oberfläche zurück. So wie es soll. Aber dann gleich beim Drücken des Start-Buttons (mein Programm) wurde das Fenster - schwarz. Es wurde ja schließlich dann auch wieder erneut FlipBuffers() abgearbeitet. Wie kommt man denn dann aus dem Dilemma raus?
1. Energiesparmodus abschalten, ha ha.
2. ?
3. ?
Von mir aus kann mein Programm nach dem Wiederaufwecken aus dem Energiesparmodus heraus wieder genauso aussehen wie frisch zum Start, Hauptsache ich werde das schwarze Fenster los.
Den Code oder Teile davon kann ich jetzt hier vom Handy aus leider nicht einstellen, für generelle Tipps wäre ich aber dankbar.
Noch eine zusätzliche Frage: Gibt es evtl. irgendwo eine Liste, wo man einsehen kann, zu weichem Event was gehört? Also z.B. 512 für Maus-Bewegung usw.? Danke.
1. Energiesparmodus abschalten, ha ha.
2. ?
3. ?
Von mir aus kann mein Programm nach dem Wiederaufwecken aus dem Energiesparmodus heraus wieder genauso aussehen wie frisch zum Start, Hauptsache ich werde das schwarze Fenster los.
Den Code oder Teile davon kann ich jetzt hier vom Handy aus leider nicht einstellen, für generelle Tipps wäre ich aber dankbar.
Noch eine zusätzliche Frage: Gibt es evtl. irgendwo eine Liste, wo man einsehen kann, zu weichem Event was gehört? Also z.B. 512 für Maus-Bewegung usw.? Danke.
Zuletzt geändert von Re42 am 29.01.2022 12:49, insgesamt 1-mal geändert.
- HeX0R
- Beiträge: 2960
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Fenster schwarz nach Standby
Ich kann Dir bei Deinem Problem leider nicht helfen, weil ich Deiner Erklärung überhaupt nicht folgen kann.
Aber was die Events (unter Windows zumindest) betrifft, schau mal da:
viewtopic.php?f=8&t=14974
Aber was die Events (unter Windows zumindest) betrifft, schau mal da:
viewtopic.php?f=8&t=14974
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
Re: Fenster schwarz nach Standby
Danke, aber diese Seite kannte ich schon. Hat mir auch etwas geholfen, aber Events wie 800 oder gar 49299 tauchen da nicht auf. In meinem Code taucht auch Event 30 auf, obwohl der mit Time Change überhaupt nichts zu tun hat. Da läuft nur ein Cursor, der über ElapsedMilliseconds() gesteuert wird. Daß man überhaupt Probleme bekommt mit dem Energiesparmodus, ist in meinen Augen ein Windows-Armutszeugnis. Ich habe aber immerhin einen Kompromiß gefunden, mit Mausklick und Taste ESC mein Programm in den Grundzustand zurückversetzen zu können. Man darf ja dann erstmal auf das Fenster klicken, nichtmal der Fokus bleibt dem Fenster erhalten, wenn der Energiesparmodus kommt, eine Sauerei ist das. In meinem täglichen Leben begrüße ich Energie sparen sehr, aber so wie Windows das präsentiert, nicht.
- HeX0R
- Beiträge: 2960
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Fenster schwarz nach Standby
Also Windows grundsätzlich zu verfluchen finde ich etwas voreilig.
Das Beispiel der PB Hilfe zeigt ja schon, dass der Energiesparmodus per se, gar keinen Einfluss hat.
Du machst da irgendwas anders, und vermutlich ist da auch der Hund begraben.
Aber solange genau das keiner sieht, wird Dir auch keiner helfen können.
Das Beispiel der PB Hilfe zeigt ja schon, dass der Energiesparmodus per se, gar keinen Einfluss hat.
Du machst da irgendwas anders, und vermutlich ist da auch der Hund begraben.
Aber solange genau das keiner sieht, wird Dir auch keiner helfen können.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
Re: Fenster schwarz nach Standby
Windows verfluchen tue ich nicht, aber etwas Kritik darf ja sein. Meinen Code hatte ich vom Aufbau her in der Tat geändert, und zwar genau so, wie das für WindowedScreen() beschrieben wird. Das Energiesparmodus-Problem war dadurch aber nicht gelöst worden. Es gibt aber auch noch etwas weiteres, was mysteriös ist: Wenn ich die Event-Abfrage so mache, daß nur Events abgefragt werden, die größer als 0 sind, läuft Event 13104 genau einmal auf und weiter geht's. Wenn ich allerdings die Abfrage mit Repeat ... Until event=0 mache, läuft Event 13104 immer weiter auf, ein graues Fenster erscheint und da drauf dann der blaue Warte-Kringel. Das geht dann immer so weiter. Mein Code läuft wirklich gut, nur die Sache mit dem Energiesparmodus gibt mir Rätsel auf.
Mit fällt da jetzt nur noch ein, was wohl passieren würde, wenn man WindowedScreen komplett neu starten könnte, eben wie das beim Starten des Programms ja auch passiert. Aber einen #PB_Event_CloseWindowedScreen gibt es nicht,
was evtl. ja auch gute Gründe hat.
Ich werde morgen noch eine weitere Untersuchung machen und dann evtl. mal Code-Teile hier einstellen. Aber was? Der Konflikt hat mit FlipBuffers() zu tun und darauf kann ich nicht verzichten. Danke nochmals.
Mit fällt da jetzt nur noch ein, was wohl passieren würde, wenn man WindowedScreen komplett neu starten könnte, eben wie das beim Starten des Programms ja auch passiert. Aber einen #PB_Event_CloseWindowedScreen gibt es nicht,
was evtl. ja auch gute Gründe hat.
Ich werde morgen noch eine weitere Untersuchung machen und dann evtl. mal Code-Teile hier einstellen. Aber was? Der Konflikt hat mit FlipBuffers() zu tun und darauf kann ich nicht verzichten. Danke nochmals.
Re: Fenster schwarz nach Standby
Siehe PB Hilfe WindowEvent()
So sollte der Loop aussehen
Sonst Kringel (o)
So sollte der Loop aussehen
Code: Alles auswählen
;Hauptschleife
Repeat
Repeat
;Fenster-Ereignisse
;====================================
;Versuche alle Möglichkeiten, aber nur eine zu einem Zeitpunkt
Event = WindowEvent() ; Animation
; Event = WaitWindowEvent() ; Animation wird blockiert
; Event = WaitWindowEvent(1) ; Animation, aber einer 1ms langen unnötigen Verzögerung; und darüber hinaus ist es ein
; schlechter Weg, um Ereignisse zu programmieren, weil die Warteschlange nicht leer ist
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event=0
FlipBuffers() ; ==> Mit WindowEvent(), FlipBuffers() gibt die CPU für das Multitasking frei, so dass Delay(1)
; nicht erforderlich ist.
ClearScreen(RGB(135, 206, 235))
ExamineKeyboard() ;Keyboard
; DisplaySprite(...) ;Anzeige des Sprites
; etc
Until KeyboardPushed(#PB_Key_Escape)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Fenster schwarz nach Standby
Da gibt es in der Tat Abweichungen von dem, was ich gemacht habe und da dämmert mir jetzt etwas. Ich werde das heute noch bearbeiten und melde mich dann später nochmal. Danke erstmal!
Re: Fenster schwarz nach Standby
Mittlerweile hatte ich die Event-Abfrage so verändert, wie das in der PureBasic-Hilfe drin steht, allerdings ist es nach wie vor nicht möglich, die Eventabfrage mit Repeat ... Until event = 0 zu machen, weil dann wieder der blaue Wartekringel kommt. Man kann die Abfrage ja aber auch so verändern, daß nur Events abgefragt werden, die größer als 0 sind, das klappt gut. Debugge ich dagegen jeden Event, dann ist die Reihenfolge 13104, 13115, 0 usw.
Der Aufbau meines Codes sieht jetzt so aus:
Mir ist klar, daß nach der Rückkehr aus dem Energiesparmodus mein Code ja immernoch die Repeat-Schleife durchläuft und dann natürlich Zeichenelemente wie Linien, Boxen usw. nicht nochmal gezeichnet werden können nach der Rückkehr aus dem Energiesparmodus, insofern muß ich mich für mein gestriges Meckern über Windows nun teilweise entschuldigen. Mein Programm ist allerdings kein Programm mit Animationen, sondern da gibt es eine feste Oberfläche, wo sich allenfalls Farben verändern, aber vor allem werden da Musiknoten erzeugt. So, und wenn ich dann ClearScreen() anlege, sind die Noten natürlich alle weg. Und genau das selbe passiert natürlich auch dann, wenn ich bei jedem Repeat das Fenster neu zeichnen lasse. Und jetzt?
Mir würde es völlig reichen, wenn nach dem Wiederaufwecken aus dem Energiesparmodus die Programmoberfläche wieder so aussieht, als wäre das Programm frisch gestartet. Hauptsache ich sehe dann wieder die Programmoberfläche und kann weiter normal damit arbeiten, ohne daß dann ein schwarzes Fenster kommt wegen FlipBuffers(). Die Programmoberfläche darf also nur dann neu gezeichnet werden, wenn der Energiesparmodus einsetzt oder beendet wird. Aber dazu muß ja dann irgendwie in der Eventabfrage erkannt werden, daß genau das passiert! Welche Event-Nummern laufen dann auf? Und dann kann auch ClearScreen() dazu kommen. Es muß doch irgendwie möglich sein, bei meinem Programmtyp mit dem Energiesparmodus umgehen zu können. Danke für weitere Infos.
Der Aufbau meines Codes sieht jetzt so aus:
Code: Alles auswählen
Init-Befehle für Sprites, Keyboard, Maus, Sound
LoadSound()
Procedure() (zum Töne abspielen)
If OpenWindow()
If OpenWindowedScreen()
Sprites ladan
StartDrawing(Screenoutput))
Linien, Boxen, was halt gebraucht wird als Fensterinhalt
StopDrawing()
Diverse DIMs
Repeat
event = WindowEvent() ; eigentlich WaitW.. mit timeout
If event > 0
Select event
Case #PB_Event_LeftClick
.....
EndSelect()
EndIf
FlipBuffers()
(ClearScreen())
ExemineKeyboard()
TransparentSpriteColor()
DisplayTransparentSprites
;Der restliche Code
......
Until event = #PB_Event _CloseWindow
Endif
Endif
Mir würde es völlig reichen, wenn nach dem Wiederaufwecken aus dem Energiesparmodus die Programmoberfläche wieder so aussieht, als wäre das Programm frisch gestartet. Hauptsache ich sehe dann wieder die Programmoberfläche und kann weiter normal damit arbeiten, ohne daß dann ein schwarzes Fenster kommt wegen FlipBuffers(). Die Programmoberfläche darf also nur dann neu gezeichnet werden, wenn der Energiesparmodus einsetzt oder beendet wird. Aber dazu muß ja dann irgendwie in der Eventabfrage erkannt werden, daß genau das passiert! Welche Event-Nummern laufen dann auf? Und dann kann auch ClearScreen() dazu kommen. Es muß doch irgendwie möglich sein, bei meinem Programmtyp mit dem Energiesparmodus umgehen zu können. Danke für weitere Infos.
- HeX0R
- Beiträge: 2960
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 - Kontaktdaten:
Re: Fenster schwarz nach Standby
Was immer Du da tust, Du machst irgendwas falsch!
Welche Events da so abgefeuert werden interessiert überhaupt nicht, weil das Programm einfach weiterläuft.
Und in einem WindowedScreen muss man ständig alles neu zeichnen, daher hatte ich ja auch Canvas empfohlen, da musst Du das nur machen, wenn sich was verändert hat.
Hier ein Beispiel, wie Du siehst, läuft das nach dem Aufwecken einfach weiter, ohne dass irgendwelche Events irgendjemanden interessieren.
Welche Events da so abgefeuert werden interessiert überhaupt nicht, weil das Programm einfach weiterläuft.
Und in einem WindowedScreen muss man ständig alles neu zeichnen, daher hatte ich ja auch Canvas empfohlen, da musst Du das nur machen, wenn sich was verändert hat.
Hier ein Beispiel, wie Du siehst, läuft das nach dem Aufwecken einfach weiter, ohne dass irgendwelche Events irgendjemanden interessieren.
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480)
LoadFont(0, "Arial", 14)
;Init Sprites
For i = 1 To 10
CreateSprite(i, 120, 24, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(i))
RoundBox(0, 0, 120, 24, 15, 15, $DE0C30)
DrawingFont(FontID(0))
a$ = "Button_" + RSet(Str(i), 2, "0")
DrawText(60 - TextWidth(a$) / 2, 12 - TextHeight(a$) / 2, a$, RGB(Random($FF, $80), Random($FF, $80), Random($FF, $80)), $DE0C30)
StopDrawing()
EndIf
TransparentSpriteColor(i, 0)
Next i
Repeat
Repeat
Select WaitWindowEvent(5)
Case #PB_Event_CloseWindow
Break 2
Case 0
Break
EndSelect
ForEver
FlipBuffers()
ClearScreen(RGB(135, 206, 235))
ExamineKeyboard()
For i = 1 To 5
DisplayTransparentSprite(i, -115 + i * 125, 50)
Next i
For i = 6 To 10
DisplayTransparentSprite(i, -115 + (i - 5) * 125, 110)
Next i
Until KeyboardPushed(#PB_Key_Escape)
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}
Re: Fenster schwarz nach Standby
Hallo,
tritt das Problem nur bei deinem "WindowedScreen"-Programm auf?
-> Oder tritt das Problem bei irgend einem beliebigen "WindowedScreen"-Programm auch auf?
tritt das Problem nur bei deinem "WindowedScreen"-Programm auf?
-> Oder tritt das Problem bei irgend einem beliebigen "WindowedScreen"-Programm auch auf?
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat