Maus-Interaktion nach ResizeWindow() nicht möglich
Maus-Interaktion nach ResizeWindow() nicht möglich
Wenn ich mit ResizeWindow() die Fenstergröße ändere, verliert das Programm den kompletten Fokus, und ich kann nicht mehr mit der Maus im Fenster agieren. Das Sprite, welches an der aktuellen Mausposition gezeichnet wird, verbleibt an der aktuellen Stelle.
Was dagegen funktioniert ist CloseWindow, und dann ein neues Fenster öffnen - allerdings gehen hierbei sämtliche geladenen Sprite-Informationen verloren und müssen neu erstellt werden.
Gibt es hier Abhilfe? Danke!
Was dagegen funktioniert ist CloseWindow, und dann ein neues Fenster öffnen - allerdings gehen hierbei sämtliche geladenen Sprite-Informationen verloren und müssen neu erstellt werden.
Gibt es hier Abhilfe? Danke!
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Hast du ein Codebeispiel, wo der besagte Fehler auftritt?
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Ja klar, kommt morgen; ich bin gerade im Bereitschaftsdienst mit meinem Laptop am Coden, habe hier kein W-Lan - mit der Außenwelt kommuniziere ich am Firmen-PC und abtippen ist mir grad zu mühselig. Dachte jemand weiß was auf die Schnelle.
Es geht um mein Minesweeper-Programm - je nach Anzahl der Tiles soll die Fenstergröße angepasst werden.
Ich probiere noch etwas herum und poste dann morgen ein paar Details.
Es geht um mein Minesweeper-Programm - je nach Anzahl der Tiles soll die Fenstergröße angepasst werden.
Ich probiere noch etwas herum und poste dann morgen ein paar Details.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Hallo diceman,
Richtig, dies:
Mmmh.
Wie (an welchen Stellen) setzt du ResizeWindow() ein ?
Wenn du mit Screens (Windows-Screen) arbeitest solltest du auch den Screen gleichzeitig mit anpassen.
Außerdem solltest du bei diesem Vorgang alle Zeichenoperation stoppen (Pausieren) und alle aktuellen Zustände abspeichern.
Danach setzt du die Zeichenoperationen weiter und lädst die gespeicherten Zustände.
Anbei: ExamineMouse() sollte vor ExamineKeyboard() und am Anfang des Event-Loops stehen (vor der Windows-Event-Abfrage))
Richtig, dies:
kann keine Lösung sein.Was dagegen funktioniert ist CloseWindow, und dann ein neues Fenster öffnen - allerdings gehen hierbei sämtliche geladenen Sprite-Informationen verloren und müssen neu erstellt werden.
Gibt es hier Abhilfe? Danke!
Mmmh.
Wie (an welchen Stellen) setzt du ResizeWindow() ein ?
Wenn du mit Screens (Windows-Screen) arbeitest solltest du auch den Screen gleichzeitig mit anpassen.
Außerdem solltest du bei diesem Vorgang alle Zeichenoperation stoppen (Pausieren) und alle aktuellen Zustände abspeichern.
Danach setzt du die Zeichenoperationen weiter und lädst die gespeicherten Zustände.
Anbei: ExamineMouse() sollte vor ExamineKeyboard() und am Anfang des Event-Loops stehen (vor der Windows-Event-Abfrage))
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
So, ich habe die Lösung für den "Fehler" gefunden; der saß nämlich vor dem PC.
Die Sache ist die, daß ich nach der Erstellung des Fensters auch einen WindowedScreen erstellt habe, welchen ich - wie du bereits angemerkt hast - mitanpassen muß. Also erst CloseScreen(), dann ResizeWindow(), und dann einen neuen OpenWindowedScreen(). Dann klappt alles wie geschmiert, und auch die Maus, Keyboard, etc. und alle Sprites sind noch aktiv, ohne das irgendwas neu initialisiert werden muß.
Der einzig etwas doofe (aber nicht tragische) Nebeneffekt ist der, daß ich beim allerersten OpenWindow() diesen mit der #PB_Window_ScreenCentered Konstante initialisiert habe, die aber nicht zusammen mit ResizeWindow()-funktioniert, und so danach das Fenster nicht mehr schön in der Mitte ist. Ich habe mir dann so beholfen, daß ich (statt die #PB-Konstante zu verwenden) mittels ExamineDesktops(), DesktopWidth(0) und DesktopHeight(0) die Fensterbreite und Höhe manuell auslese, und so mittels bekannter Fenstergröße meine eigenen, 100% recyclebaren centered coordinates berechne.
Die Sache ist die, daß ich nach der Erstellung des Fensters auch einen WindowedScreen erstellt habe, welchen ich - wie du bereits angemerkt hast - mitanpassen muß. Also erst CloseScreen(), dann ResizeWindow(), und dann einen neuen OpenWindowedScreen(). Dann klappt alles wie geschmiert, und auch die Maus, Keyboard, etc. und alle Sprites sind noch aktiv, ohne das irgendwas neu initialisiert werden muß.
Der einzig etwas doofe (aber nicht tragische) Nebeneffekt ist der, daß ich beim allerersten OpenWindow() diesen mit der #PB_Window_ScreenCentered Konstante initialisiert habe, die aber nicht zusammen mit ResizeWindow()-funktioniert, und so danach das Fenster nicht mehr schön in der Mitte ist. Ich habe mir dann so beholfen, daß ich (statt die #PB-Konstante zu verwenden) mittels ExamineDesktops(), DesktopWidth(0) und DesktopHeight(0) die Fensterbreite und Höhe manuell auslese, und so mittels bekannter Fenstergröße meine eigenen, 100% recyclebaren centered coordinates berechne.
Zuletzt geändert von diceman am 17.02.2018 23:19, insgesamt 2-mal geändert.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
@diceman
Schön das es jetzt funktioniert, aber ich bin mit deiner radikalen CloseScreen() - Methode nicht ganz so einverstanden.
Hast du bei OpenWindowedScreen() das AutoStretch - Feature aktiviert ?
Schön das es jetzt funktioniert, aber ich bin mit deiner radikalen CloseScreen() - Methode nicht ganz so einverstanden.
Hast du bei OpenWindowedScreen() das AutoStretch - Feature aktiviert ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Oha, CloseScreen() habe ich nur eingesetzt, da ich in meiner Blitzbasic-induzierten Paranoia verhindern wollte, daß irgendwelche Speicher-Ressourcen im Hintergrund nicht freigegeben werden, wenn ich mit OpenWindowedScreen einfach einen neuen Screen öffne, ohne den aktiven vorher zu schließen (ich bin diesbezüglich sehr gewissenhaft geworden und lösche selbst temporäre "Hilfsgrafiken" mit dem FreeImage()-Befehl, sobald ich diese nicht mehr benötige). Notwendig scheint das aber nicht zu sein, und irgendwelche negativen Nebeneffekte scheints auch nicht zu haben ... wie gesagt, das Programm läuft einfach im angepassten Fenster weiter, alle Parameter und Grafiken sind weiter gültig.
"AutoStretch" hört sich nützlich an, das gucke ich mir gleich mal an. Danke für den Hinweis!
"AutoStretch" hört sich nützlich an, das gucke ich mir gleich mal an. Danke für den Hinweis!
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Mach es einfach so:diceman hat geschrieben:... OpenWindow() ... mit der #PB_Window_ScreenCentered Konstante initialisiert habe, die aber nicht zusammen mit ResizeWindow()-funktioniert, und so danach das Fenster nicht mehr schön in der Mitte ist.
Code: Alles auswählen
ResizeWindow(...)
HideWindow(0, #False, #PB_Window_ScreenCentered)
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Sehr vorbildlich und genau richtig.(ich bin diesbezüglich sehr gewissenhaft geworden und lösche selbst temporäre "Hilfsgrafiken" mit dem FreeImage()-Befehl, sobald ich diese nicht mehr benötige).
Das ist naiv.Notwendig scheint das aber nicht zu sein, und irgendwelche negativen Nebeneffekte scheints auch nicht zu haben ... wie gesagt, das Programm läuft einfach im angepassten Fenster weiter, alle Parameter und Grafiken sind weiter gültig.
Da kann man sich nicht drauf verlassen.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Maus-Interaktion nach ResizeWindow() nicht möglich
Das ist auch ein schöner Trick, danke!Sicro hat geschrieben:Mach es einfach so:Code: Alles auswählen
ResizeWindow(...) HideWindow(0, #False, #PB_Window_ScreenCentered)
Ich rufe jetzt HideWindow() 2x mal auf, einmal vor der Resize()-Aktion (mit #True), und einmal danach (mit #False). Dadurch vermeidet man, daß man das Fenster kurz einmal an der falschen Stelle aufflackern sieht.
Den Grund dafür habe ich doch geschrieben ... Ich habe CloseScreen() genau aus dem Grund benutzt, WEIL ich es für gewissenhaft hielt (Ressourcen-Management 'n shit); wenn ich was Neues aufmache, muß erst das alte zu - so zumindest mein Gedanke. Wenn das falsch sein sollte, dann bin ich natürlich jederzeit aufnahme- und lernbereit. Und momentan scheint mir daran nichts verwerflich zu sein.ccode_new hat geschrieben:Das ist naiv.
Da kann man sich nicht drauf verlassen.
Danke!
Zuletzt geändert von diceman am 17.02.2018 23:37, insgesamt 2-mal geändert.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
And we're out of Beta, we're releasing on time.