Grafikproblem PB

Anfängerfragen zum Programmieren mit PureBasic.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Grafikproblem PB

Beitrag 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 ?
Purebasic 5.51
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Grafikproblem PB

Beitrag von NicTheQuick »

Das passiert dann, wenn man (Wait)WindowEvent()' nicht oft genug aufruft, weil sonst nichts neu gezeichnet wird.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Grafikproblem PB

Beitrag von schleicher »

Ja das ist es. Danke
Purebasic 5.51
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Grafikproblem PB

Beitrag 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.
Zuletzt geändert von Tommy am 27.01.2015 11:02, insgesamt 2-mal geändert.
PB 5.41 x64
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Grafikproblem PB

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Grafikproblem PB

Beitrag von Tommy »

Ahh :allright:
Zuletzt geändert von Tommy am 27.01.2015 11:03, insgesamt 2-mal geändert.
PB 5.41 x64
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Grafikproblem PB

Beitrag 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 ?
Purebasic 5.51
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

Re: Grafikproblem PB

Beitrag 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
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
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Grafikproblem PB

Beitrag 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.
Purebasic 5.51
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

Re: Grafikproblem PB

Beitrag 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
Zuletzt geändert von ts-soft am 24.08.2014 23:42, insgesamt 2-mal geändert.
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
Antworten