Absturz bei OpenScreen wenn minimiert

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Absturz bei OpenScreen wenn minimiert

Beitrag von Kai »

Sobald man in seiner Programmschleife die Drawing Befehle nutzt,
stürzt ja der Screen ab,
ist es nicht möglich zu überprüfen ob der screen minimiert ist und ggf.
dann die drawing Befehle ect. zu unterbrechen.
Weiß jemand Rat? /:->

Beispiel: Stürztz ab :freak:

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenScreen(1024, 768, 32, "Sprite")
  Repeat
    ExamineKeyboard()
    FlipBuffers()
    ClearScreen(0)
    
    StartDrawing(ScreenOutput())
     DrawingMode(1)
     DrawText(10,10,"TEST",RGB(255,255,255))
    StopDrawing()
    
    If KeyboardReleased(#PB_Key_Escape)
     End
    EndIf
  ForEver  
Else
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf
End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

    IF IsScreenActive()
      StartDrawing(ScreenOutput())
      DrawingMode(1)
      DrawText(10,10,"TEST",RGB(255,255,255))
      StopDrawing()
    EndIf
Kenn mich da zwar nicht gut aus , denke aber das es so gemacht wird.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yap grundsätzlich sollte IsScreenActive() funktionieren.

allerdings würde ich von riesigen Ifs abraten, das ist immer sehr unübersichtlich.

also, auch dein

Code: Alles auswählen

If OpenScreen(1024, 768, 32, "Sprite") 
würde ich ändern in

Code: Alles auswählen

If OpenScreen(1024, 768, 32, "Sprite") =0
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0) 
EndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Das war doch nurn Beispiel ausser Hilfe, ich mach das so oder so anders. :lol:

Aber, joa danke, werds ma zuhause testen obs geht.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Ich glaube nun hab ich aber nen Fehler entdeckt,
oder ich mach wieder etwas falsch.

Das folgende Beispiel zeigt alles:
Solange ich vor der Programmschleife ein Sprite mit PB_Any erstelle,
gibt FlipBuffers() nen Fehler mit InvalidMemory aus.
Mach ich mal wieder was falsch oder is das nen Bug?

Code: Alles auswählen

InitSprite()
InitKeyboard()

If OpenScreen(1024,768,32,"Test minimize") = #False
 MessageRequester("Fehler", "Konnte keinen Screen erstellen.", #MB_OK|#MB_ICONERROR)
EndIf

TestSpriteID = CreateSprite(#PB_Any, 200, 200) ;<-- Auskommentieren dann gehts!

Repeat
 ExamineKeyboard()
 FlipBuffers()
 ClearScreen(0)
 
 If IsScreenActive()

  StartDrawing(ScreenOutput())
   DrawingMode(1)
   DrawText(10, 10, "Test", RGB(255,255,255))  
  StopDrawing()

  If KeyboardReleased(#PB_Key_Escape)
   End
  EndIf
 
 EndIf
ForEver
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Bei mir gibts keinen IMA
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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 »

@ts-soft: Der IMA kommt, wenn man den Screen minimiert (z.B. durch Alt+Tab) und dann den Screen wiederherstellen will (Klick auf TL).

@Kai: Das mit dem Absturz bei minimiertem bzw. deaktiviertem Screen ist echt ein leidiges Thema. Habe selbst leider auch noch keine 100%ig funktionierende Lösung gefunden.
Ist meiner Meinung nach ein Problem bei PB wie es die Screens handled, aber ist wohl in der Priorität so niedrig, dass es nie gefixed bzw. die Ursache nie näher untersucht wurde. /:->
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Mittlerweile funktioniert das Switchen des Screens mit zur Handnahme von Screenactive recht gut. Früher hätte ich es als Buggy bezeichnet, mittlerweile nicht mehr. Man sollte nach Möglichkeit keinen Programmcode ausführen, wenn der Screen nicht active ist, viel mehr brauch man meines Wissens nicht mehr zu beachten.
Gesperrt