Grafikproblem PB
-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz
Grafikproblem PB
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 ?
Kann man das unterbinden, oder ist das gar ein Grafikfehler, der von der Grafikkarte oder vom Betriebssystem produziert wird ?
Purebasic 5.51
- 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
Das passiert dann, wenn man (Wait)WindowEvent()' nicht oft genug aufruft, weil sonst nichts neu gezeichnet wird.
-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz
Re: Grafikproblem PB
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:
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:
Kappier deshalb nicht wozu es noch WindowEvent gibt.Eine Applikation sollte möglichst immer WaitWindowEvent() anstelle von WindowEvent() verwenden
Zuletzt geändert von Tommy am 27.01.2015 11:02, insgesamt 2-mal geändert.
PB 5.41 x64
Re: Grafikproblem PB
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:
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Grafikproblem PB
Ahh 

Zuletzt geändert von Tommy am 27.01.2015 11:03, insgesamt 2-mal geändert.
PB 5.41 x64
-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz
Re: Grafikproblem PB
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 ?
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
- 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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz
Re: Grafikproblem PB
Hängt das grafische Problem denn damit zusammen ? Das darüberliegende Fenster wird mittels Button "OK" geschlossen
Der Button führt CloseWindow( aus.
Der Button führt CloseWindow( aus.
Purebasic 5.51
- 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
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
)
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
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

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
