Zerstörte Fenster wiederherstellen
Zerstörte Fenster wiederherstellen
Hallo liebe PureBasic Freunde,
ich bin dabei, ein Amateurfunk Logbuchprogramm zu schreiben. Einige Teile sind schon fertig, unter anderem wende ich in 2 Fenstern auch Grafik an. Damit jedes Fenster auch beim Zerstören refreshed wird, benutze ich vorzugsweise die PureBasic Konstante #PB_EventRepaint. Das heißt, sollte ein Fenster zerstört sein, müsste es wieder hergestellt werden. Wenn der WaitWindowEvent also den Event=#PB_EventRepaint liefert, verzweigt das Programm in der Fensterschleife zu #PB_EventRepaint und dort stehen meine Prozeduren zum Repainten. Jetzt kommts aber…
Die so für einen Refresh eingerichteten Fenster werden nur dann richtig refreshed, wenn ich unter Windows folgende Funktion deaktiviert habe, also dort KEIN Häkchen gemacht habe:
START>EINSTELLUNGEN>SYSTEMSTEUERUNG>ANZEIGE>EFFEKTE>FENSTERINHALT BEIM ZIEHEN ANZEIGEN
Wenn ich in o.g. Windows Einstellung ein Häkchen mache, also das die Fenster beim Ziehen angezeigt werden, dann werden meine Fenster nur refreshed, wenn mal ein anderes Fenster über meinem lag und wieder entfernt wird. Wenn ich mein Fenster aber über den Bildschirmrand hinausziehe und dann wieder zurück in Bildschirmmitte, erfolgt bei dieser Einstellung kein Refresh.
Was soll ich jetzt noch machen? Komme ich da noch mit PureBasic weiter? Wenn jemand die
Lösung weiß, könnte er mir dann die Lösung (evtl. mit Windows Befehlen usw.) aufschreiben? Bitte so einfach wie möglich. Vielen Dank
Gerhard
ich bin dabei, ein Amateurfunk Logbuchprogramm zu schreiben. Einige Teile sind schon fertig, unter anderem wende ich in 2 Fenstern auch Grafik an. Damit jedes Fenster auch beim Zerstören refreshed wird, benutze ich vorzugsweise die PureBasic Konstante #PB_EventRepaint. Das heißt, sollte ein Fenster zerstört sein, müsste es wieder hergestellt werden. Wenn der WaitWindowEvent also den Event=#PB_EventRepaint liefert, verzweigt das Programm in der Fensterschleife zu #PB_EventRepaint und dort stehen meine Prozeduren zum Repainten. Jetzt kommts aber…
Die so für einen Refresh eingerichteten Fenster werden nur dann richtig refreshed, wenn ich unter Windows folgende Funktion deaktiviert habe, also dort KEIN Häkchen gemacht habe:
START>EINSTELLUNGEN>SYSTEMSTEUERUNG>ANZEIGE>EFFEKTE>FENSTERINHALT BEIM ZIEHEN ANZEIGEN
Wenn ich in o.g. Windows Einstellung ein Häkchen mache, also das die Fenster beim Ziehen angezeigt werden, dann werden meine Fenster nur refreshed, wenn mal ein anderes Fenster über meinem lag und wieder entfernt wird. Wenn ich mein Fenster aber über den Bildschirmrand hinausziehe und dann wieder zurück in Bildschirmmitte, erfolgt bei dieser Einstellung kein Refresh.
Was soll ich jetzt noch machen? Komme ich da noch mit PureBasic weiter? Wenn jemand die
Lösung weiß, könnte er mir dann die Lösung (evtl. mit Windows Befehlen usw.) aufschreiben? Bitte so einfach wie möglich. Vielen Dank
Gerhard
Am einfachsten ist es vielleicht, einfach ein großes ImageGadget zu
nehmen und dieses zu aktualisieren, wenn die Grafiken aktualisiert
werden müssen.
Das heißt dann, dass du auf ein Image malst, anstatt direkt auf das
Fenster und dann dieses Image im ImageGagdet refreshst, wenn sich die
Grafik ändert.
Um das Repaint musst du dich dann nicht kümmern und alles ist bestens
(Bevor Zweifel kommen: Die Mögliche Refreshrate eines ImageGadgets
reicht mehr als locker aus, um darauf Filme darzustellen (vorrausgesetzt,
die Auflösung ist nicht zu groß, 1280*1024 oder derartige Scherze sind
also etwas extrem für so hohe Refreshraten.).)
nehmen und dieses zu aktualisieren, wenn die Grafiken aktualisiert
werden müssen.
Das heißt dann, dass du auf ein Image malst, anstatt direkt auf das
Fenster und dann dieses Image im ImageGagdet refreshst, wenn sich die
Grafik ändert.
Um das Repaint musst du dich dann nicht kümmern und alles ist bestens

(Bevor Zweifel kommen: Die Mögliche Refreshrate eines ImageGadgets
reicht mehr als locker aus, um darauf Filme darzustellen (vorrausgesetzt,
die Auflösung ist nicht zu groß, 1280*1024 oder derartige Scherze sind
also etwas extrem für so hohe Refreshraten.).)
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Lars, danke für Deine Antwort.
Ja, ich habe direkt in das Fenster gemalt, also dann gibt es wohl keine
andere Möglichkeit des Refreshes...hmm. Die Idee mit dem Malen auf
ein Image habe ich noch nicht überlegt. Das klingt interessant. Ich werde
das mal probieren. Kann man aber trotzdem mit Window-Befehlen
dieses Refresh trotzdem erzwingen? Die C-Leute (Arbeitskollegen von
mir) hatten mich mitleidvoll belächelt. Scheinbar geht das in C mit
dem Refresh besser. Schade
ALso danke gell für die Antwort, diese Lösung scheint mir auch gut zu sein.
Gruß
Gerhard
Ja, ich habe direkt in das Fenster gemalt, also dann gibt es wohl keine
andere Möglichkeit des Refreshes...hmm. Die Idee mit dem Malen auf
ein Image habe ich noch nicht überlegt. Das klingt interessant. Ich werde
das mal probieren. Kann man aber trotzdem mit Window-Befehlen
dieses Refresh trotzdem erzwingen? Die C-Leute (Arbeitskollegen von
mir) hatten mich mitleidvoll belächelt. Scheinbar geht das in C mit
dem Refresh besser. Schade
ALso danke gell für die Antwort, diese Lösung scheint mir auch gut zu sein.
Gruß
Gerhard
-
- Beiträge: 21
- Registriert: 23.09.2004 15:05
- Wohnort: Im Norden
- Kontaktdaten:
Hallo vielen Dank an alle für die Antworten.
Aha, dann ist das mit dem manuellen Refresh evtl. ein Bug in PureBasic.
Naja, ok, ich habe jetzt aber schon den Vorschlag von Lars einmal
ausprobiert und der geht ausgezeichnet. Damit braucht man nie
wieder selbst für den Refresh zu sorgen.
Habt vielen Dank miteinander
Gruß
Gerhard
Aha, dann ist das mit dem manuellen Refresh evtl. ein Bug in PureBasic.
Naja, ok, ich habe jetzt aber schon den Vorschlag von Lars einmal
ausprobiert und der geht ausgezeichnet. Damit braucht man nie
wieder selbst für den Refresh zu sorgen.
Habt vielen Dank miteinander
Gruß
Gerhard
Hallo,
ich hatte auch das Problem welches Gerhard hatte. Ich habe mich dann auch mit einem Image beholfen. Nun trat ein neues Problem auf, ich will auf dem Image z.B. ButtonGadgets plazieren. Diese werden leider nicht wiederhergestellt.
Gibt es auch dafür eine Lösung ?
Vielen Dank im voraus....
Jürgen
ich hatte auch das Problem welches Gerhard hatte. Ich habe mich dann auch mit einem Image beholfen. Nun trat ein neues Problem auf, ich will auf dem Image z.B. ButtonGadgets plazieren. Diese werden leider nicht wiederhergestellt.
Gibt es auch dafür eine Lösung ?
Vielen Dank im voraus....
Jürgen
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Mit InvalidateRect_() (http://msdn.microsoft.com/library/defau ... w_7ano.asp) sollte das machbar sein...
- 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
Entweder so:
oder so:
Einfach mal probieren ob's klappt. hWnd ist das Händel zum Fenster oder Control
Code: Alles auswählen
InvalidateRect_(hWnd, 0, 0)
UpdateWindow_(hWnd)
Code: Alles auswählen
RedrawWindow_(hWnd, 0, 0, #RDW_FRAME | #RDW_INVALIDATE | #RDW_ALLCHILDREN | #RDW_UPDATENOW | #RDW_INTERNALPAINT)
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.
