Seite 1 von 2

Grafikproblem PB

Verfasst: 24.08.2014 22:05
von schleicher
Wenn ich ein Window offen habe und ein 2.Window darüber öffnen und dann das 2.Window geschlossen wird , dann bleibt da wo das 2. Window war nur weißes auf meinem 1.Window, bis ich mit der Maus draufklicke ( aus auch beim Debugger-Fenster so)
Kann man das unterbinden, oder ist das gar ein Grafikfehler, der von der Grafikkarte oder vom Betriebssystem produziert wird ?

Re: Grafikproblem PB

Verfasst: 24.08.2014 22:14
von NicTheQuick
Das passiert dann, wenn man (Wait)WindowEvent()' nicht oft genug aufruft, weil sonst nichts neu gezeichnet wird.

Re: Grafikproblem PB

Verfasst: 24.08.2014 22:17
von schleicher
Ja das ist es. Danke

Re: Grafikproblem PB

Verfasst: 24.08.2014 22:25
von Tommy
HalfOffTopic: Für welchen Zweck gibt es den überhaupt WindowEvent? Mit WindowEvent hat man doch nur Probleme. So oft man die Problemlösung mit WaitWindowEvent im Forum laß.
WaitWindowEvent ist auf jeden Fall die bessere Variante und man hat damit nie Probleme aber warum gibt es WindowEvent und wird nicht entfernt? Es wird sogar darauf hingewiesen:
Eine Applikation sollte möglichst immer WaitWindowEvent() anstelle von WindowEvent() verwenden
Kappier deshalb nicht wozu es noch WindowEvent gibt.

Re: Grafikproblem PB

Verfasst: 24.08.2014 22:32
von STARGÅTE
Ganz einfach: Für Screen-Basierende Windows.
Wenn du ein Spiel in einem Windowed-Screen erstellst, dann darf das Spiel ja nicht aufgehalten werden (wait) nur weil nix passiert.

Bei Spielen hast du dann halt die "typische" Doppelschleife:

Code: Alles auswählen

Repeat

	Repeat
		Select WindowEvent()
			Case #PB_Event_CloseWindow
				End
			Case #PB_Event_None
				Break
		EndSelect
	ForEver
	
	ClearScreen(0)
	
	FlipBuffers()
	
ForEver

Re: Grafikproblem PB

Verfasst: 24.08.2014 22:45
von Tommy
Ahh :allright:

Re: Grafikproblem PB

Verfasst: 24.08.2014 23:08
von schleicher
Das es nun an WaitWindowEvent liegt habe ich ja nun verstanden, aber ich kriegs nicht hin.

Ich möchte das gleich beim öffnen des Windows ein Bild ins CanvasGadged geladen wird. Ich habe das so gemacht, das gleich unter OpenWindow und der Gadgedlist das Laden des Bildes ausgeführt wird. Da hab ich nichts mit WaitWindowEvent.

Das kommt erst danach. Wie mache ich es nun richtig ?

Re: Grafikproblem PB

Verfasst: 24.08.2014 23:16
von ts-soft
Am besten Du nutzt nur einen EventLoop für alle Fenster!

Code: Alles auswählen

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Main
          Break
        Case #subFenster
          CloseWindow(#subFenster)
      EndSelect
      
    Case EventGadget()
      Case ...
    
    Case EventMenu()
      Case ...
    
  EndSelect
ForEver

Re: Grafikproblem PB

Verfasst: 24.08.2014 23:26
von schleicher
Hängt das grafische Problem denn damit zusammen ? Das darüberliegende Fenster wird mittels Button "OK" geschlossen
Der Button führt CloseWindow( aus.

Re: Grafikproblem PB

Verfasst: 24.08.2014 23:35
von ts-soft
Dein grafisches Problem kann zweierlei Gründe haben:

1. Es wird nicht durch Windows aktualisiert!
Das ist dadurch zu erreichen, das man nicht so lange aus der Ereignis-Schleife (EventLoop)
rausgeht! Nur in der Ereignisschleife wird z.B. Neugezeichnet, Text neu gesetzt usw.
Auch wenn Du das Ereignis nicht selber bearbeitest, so kann Windows dieses behandeln, aber
nur wenn es in der Ereignis-Schleife ist.

2. Die Grafik wurde direkt auf ein Fenster gemalt (kein CanvasGadget)
Hier ist auch die Ereignis-Schleife erforderlich, wobei das Neuzeichnen im Ereignis
#PB_Event_Repaint erfolgt.

Es ist auf jedenfall erforderlich, das alle "Aktiven" Fenster in einem EventLoop behandelt werden!
(Ausnahmen bestätigen die Regel :mrgreen: )
Das ganze Programm läuft also mehr oder weniger in der Ereignis-Schleife ab. Wenn es längere Zeit nicht
in dieses zurückkehrt, ist es "tod".


Gruß
Thomas