[erledigt]Hab mit wsFullScreen probleme?
- lcb-User
- Beiträge: 54
- Registriert: Di 15. Jul 2014, 13:18
- OS, Lazarus, FPC: Linux Mint 21.1 Cinnamon Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1
- CPU-Target: 64Bit
- Wohnort: München
[erledigt]Hab mit wsFullScreen probleme?
Liebe Forengemeinde!
Unter dem Motto:
Ein Programm sagt mehr als 1000 Worte,
hab ich da mal was vorbereitet. Das Demoprogramm hat einen Timer um den Parameter WindowState live in eine Listbox zu schreiben.
Mit FormKeyDown reagiere ich auf F11
Aber es läuft nicht sauber.
Wenn ich das richtig sehe wird das Form von wsNormal auf wsFullScreen gebracht
(nur unter Linux, unter Windows geht die Form nicht über die Task-leiste)
aber WindowsState bleibt auf swNormal.
Erst wenn man nochmal F11 drückt gehts auf wsFullScreen.
Mach ich da was falsch?
Habt Ihr da ein Idee wie man das sauber hinbringt?
LG
Unter dem Motto:
Ein Programm sagt mehr als 1000 Worte,
hab ich da mal was vorbereitet. Das Demoprogramm hat einen Timer um den Parameter WindowState live in eine Listbox zu schreiben.
Mit FormKeyDown reagiere ich auf F11
Aber es läuft nicht sauber.
Wenn ich das richtig sehe wird das Form von wsNormal auf wsFullScreen gebracht
(nur unter Linux, unter Windows geht die Form nicht über die Task-leiste)
aber WindowsState bleibt auf swNormal.
Erst wenn man nochmal F11 drückt gehts auf wsFullScreen.
Mach ich da was falsch?
Habt Ihr da ein Idee wie man das sauber hinbringt?
LG
Zuletzt geändert von lcb-User am Fr 10. Mär 2023, 10:20, insgesamt 1-mal geändert.
Sonnige Grüße
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
- h-elsner
- Lazarusforum e. V.
- Beiträge: 259
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Hab mit wsFullScreen probleme?
Ich habe das Programm mal zum Test umgeschrieben. Das verhalten kann ich bestätigen. Es sieht so aus, als ob immer wenn Resize aufgerufen wird, der WindowState auf wsNormal gesetzt wird, ohne dass das Fenster seine Größe ändert. Hier der Ablauf für 9-maliges F11-Drücken:
OnCreate: wsNormal
OnShow: wsNormal
OnActivate: wsNormal
OnResize: wsNormal
F11: 1
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
F11: 2
vorher: wsNormal
nachher: wsFullScreen
F11: 3
vorher: wsFullScreen
nachher: wsNormal
OnResize: wsNormal
F11: 4
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
F11: 5
vorher: wsNormal
nachher: wsFullScreen
F11: 6
vorher: wsFullScreen
nachher: wsNormal
OnResize: wsNormal
F11: 7
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
F11: 8
vorher: wsNormal
nachher: wsFullScreen
F11: 9
vorher: wsFullScreen
nachher: wsNormal
Gruß HE
OnCreate: wsNormal
OnShow: wsNormal
OnActivate: wsNormal
OnResize: wsNormal
F11: 1
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
F11: 2
vorher: wsNormal
nachher: wsFullScreen
F11: 3
vorher: wsFullScreen
nachher: wsNormal
OnResize: wsNormal
F11: 4
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
F11: 5
vorher: wsNormal
nachher: wsFullScreen
F11: 6
vorher: wsFullScreen
nachher: wsNormal
OnResize: wsNormal
F11: 7
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
F11: 8
vorher: wsNormal
nachher: wsFullScreen
F11: 9
vorher: wsFullScreen
nachher: wsNormal
Gruß HE
-
- Beiträge: 576
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 2.2.6
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Hab mit wsFullScreen probleme?
@lcb-User,
ich glaube dieses Problem gibt es schon länger. Zumindest wenn man im deutschem/englischem Forum nach wsFullScreen sucht.
zb hier: viewtopic.php?t=11742
Bau mal deinen FormKeyDown folgendermaßen um:
Mal sehen wie das nun verhält.
ich glaube dieses Problem gibt es schon länger. Zumindest wenn man im deutschem/englischem Forum nach wsFullScreen sucht.
zb hier: viewtopic.php?t=11742
Bau mal deinen FormKeyDown folgendermaßen um:
Code: Alles auswählen
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
begin
if Key = VK_F11 then
begin
if WindowState = wsNormal then WindowState := wsFullScreen else WindowState := wsNormal;
{
case WindowState of
wsFullScreen: WindowState := wsNormal;
wsMaximized: WindowState := wsFullScreen;
wsNormal: WindowState := wsFullScreen
else
end;
}
Key := 0;
end;
end;
LG Maik
Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)
- lcb-User
- Beiträge: 54
- Registriert: Di 15. Jul 2014, 13:18
- OS, Lazarus, FPC: Linux Mint 21.1 Cinnamon Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1
- CPU-Target: 64Bit
- Wohnort: München
Re: Hab mit wsFullScreen probleme?
sstvmaster: Das hat im Ablauf nichts gebrachtsstvmaster hat geschrieben: ↑Fr 10. Mär 2023, 09:06ich glaube dieses Problem gibt es schon länger. Zumindest wenn man im deutschem/englischem Forum nach wsFullScreen sucht.
Aber Danke!
h-elsner: Du hast mich auf den Gedanke gebracht, in FormResize einzugreifen.
Code: Alles auswählen
procedure TMainForm.FormResize(Sender: TObject);
begin
if wishFullScreen then WindowState := wsFullScreen; //Wenn gewünscht WindowState nochmal setzen
end;
Code: Alles auswählen
var
wishFullScreen: boolean = False; // wünsche ich eine FullScreen-Darstellung?
Code: Alles auswählen
if Key = VK_F11 then
begin
wishFullScreen := not wishFullScreen; // Ja/Nein
aber wirklich lösen muss man's anders wo.
Danke für Euren Beitrag.
Sonnige Grüße
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Re: Hab mit wsFullScreen probleme?
Ich bin jetzt nicht drin in dem Thema, wollte nur kurz darauf hinweisen, dass ein Formular auch das Ereignis
OnWindowStateChange kennt.
ich nehme nicht an, dass dies ein Problem löst, aber vielleicht ist es doch passender als OnResize?
OnWindowStateChange kennt.
ich nehme nicht an, dass dies ein Problem löst, aber vielleicht ist es doch passender als OnResize?
- lcb-User
- Beiträge: 54
- Registriert: Di 15. Jul 2014, 13:18
- OS, Lazarus, FPC: Linux Mint 21.1 Cinnamon Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1
- CPU-Target: 64Bit
- Wohnort: München
Re: Hab mit wsFullScreen probleme?
Hallo theo.theo hat geschrieben: ↑Fr 10. Mär 2023, 09:49Ich bin jetzt nicht drin in dem Thema, wollte nur kurz darauf hinweisen, dass ein Formular auch das Ereignis
OnWindowStateChange kennt.
ich nehme nicht an, dass dies ein Problem löst, aber vielleicht ist es doch passender als OnResize?
Ok, ob es für die Zukunft besser ist
FormWindowStateChange anstadt FormResize zu verwenden weiß ich nicht.
Aber momentan ist kein Unterschied zu erkennen.
Danke!
[edit] vielleicht kann's einer brauchen, so hab ich's mir vorgestellt.
Sonnige Grüße
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Re: [erledigt]Hab mit wsFullScreen probleme?
In Delphi gibt es gar keinen fsFullScreen WindowState. Daher vermute ich, dass das eine Erweiterung in Lazarus für Nicht-Windows-Betriebssysteme ist. Ich wollte mal testen, ob zumindest die Umschaltung Normal-Maximiert richtig funtkioniert. Wenn ich in h-elsner's Code in FormKeyDown die Case-Anweisung ersetze durch
schaltet das Programm unter Delphi und Lazarus einwandfrei zwischen normaler und maximierter Ansicht hin und her (unter Windows)
Code: Alles auswählen
case WindowState of
wsNormal: WindowState := wsMaximized;
wsMaximized: WindowState := wsNormal;
end;
- lcb-User
- Beiträge: 54
- Registriert: Di 15. Jul 2014, 13:18
- OS, Lazarus, FPC: Linux Mint 21.1 Cinnamon Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1
- CPU-Target: 64Bit
- Wohnort: München
Re: [erledigt]Hab mit wsFullScreen probleme?
Hab jetzt meine Variante unter Windows 10 und XP getestet.
Da das Fenster vollständig angezeigt wird, kann auf die Symbole minimieren/maximieren/beenden geklickt werden
und das funktioniert nicht.
Da das Fenster vollständig angezeigt wird, kann auf die Symbole minimieren/maximieren/beenden geklickt werden
und das funktioniert nicht.
Sonnige Grüße
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
- h-elsner
- Lazarusforum e. V.
- Beiträge: 259
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: [erledigt]Hab mit wsFullScreen probleme?
Tatsächlich, mit wsMaximized geht es. Da ist vor Resize wsMaximized und danach auch. Bei wsFullscreen jedoch nicht.
Nochmal zur Erklärung für wsFullScreen:
F11: 1. Drücken
vorher: wsNormal
nachher: wsFullScreen // Fullscreen wird angefordert und auch ausgeführt, das Fenster wird groß --> Deshalb wird Resize ausgeführt
OnResize: wsNormal // Nach Resize steht im WindowState plötzlich wieder wsNormal drin. Warum? Ist das ein Fehler oder hat das einen Sinn?
F11: 2. Drücken
vorher: wsNormal // Obwohl das Fenster groß ist und sich über den gesamten Bildschirm erstreckt, starten wir mit wsNormal und fordern Fullscreen an.
nachher: wsFullScreen // wsFullScreen wird gesendet, aber weil das Fenster schon groß ist, wird kein Resize ausgeführt. Nun behalten wir den WindowState wsFullScreen.
F11: 3. Drücken
vorher: wsFullScreen // Da nun wsFullScreen erhalten bleibt, funktioniert das toggeln der Fenstergröße wieder.
nachher: wsNormal // Da das Fenster nun wieder kleiner wird, ruft sich Resize auf und setzt den WindowsState auf wsNormal, was ja hier richtig ist.
OnResize: wsNormal
F11: 4. Drücken // Das Spiel beginn von Neuem. Man muss immer zweimal wsFullScreen abschicken.
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
... usw....
Bei wsMaximized wird der WindowState im Resize nicht mit wsNormal überschrieben, sondern bleibt erhalten.
Gruß HE
Nachtrag:
Wenn man mit wsMaximized startet, bleibt beim Resize wsFullScreen Wert erhalten und wird nicht mit wsNormal überschrieben.
OnResize: wsMaximized // Manuell auf Miximized gesetzt
F11: 1. Drücken
vorher: wsMaximized
nachher: wsFullScreen // Soweit klar
OnResize: wsFullScreen // Nach Rezeize ist immer noch wsFullScreen erhalten geblieben.
F11: 2. Drücken // Das Toggeln funktioniert hier wie erwartet, aber eben nur mit wsMaximized.
vorher: wsFullScreen
nachher: wsNormal // Nun starten wir wieder mit wsNormal und das Toggeln geht nicht mehr.
Nochmal zur Erklärung für wsFullScreen:
F11: 1. Drücken
vorher: wsNormal
nachher: wsFullScreen // Fullscreen wird angefordert und auch ausgeführt, das Fenster wird groß --> Deshalb wird Resize ausgeführt
OnResize: wsNormal // Nach Resize steht im WindowState plötzlich wieder wsNormal drin. Warum? Ist das ein Fehler oder hat das einen Sinn?
F11: 2. Drücken
vorher: wsNormal // Obwohl das Fenster groß ist und sich über den gesamten Bildschirm erstreckt, starten wir mit wsNormal und fordern Fullscreen an.
nachher: wsFullScreen // wsFullScreen wird gesendet, aber weil das Fenster schon groß ist, wird kein Resize ausgeführt. Nun behalten wir den WindowState wsFullScreen.
F11: 3. Drücken
vorher: wsFullScreen // Da nun wsFullScreen erhalten bleibt, funktioniert das toggeln der Fenstergröße wieder.
nachher: wsNormal // Da das Fenster nun wieder kleiner wird, ruft sich Resize auf und setzt den WindowsState auf wsNormal, was ja hier richtig ist.
OnResize: wsNormal
F11: 4. Drücken // Das Spiel beginn von Neuem. Man muss immer zweimal wsFullScreen abschicken.
vorher: wsNormal
nachher: wsFullScreen
OnResize: wsNormal
... usw....
Bei wsMaximized wird der WindowState im Resize nicht mit wsNormal überschrieben, sondern bleibt erhalten.
Gruß HE
Nachtrag:
Wenn man mit wsMaximized startet, bleibt beim Resize wsFullScreen Wert erhalten und wird nicht mit wsNormal überschrieben.
OnResize: wsMaximized // Manuell auf Miximized gesetzt
F11: 1. Drücken
vorher: wsMaximized
nachher: wsFullScreen // Soweit klar
OnResize: wsFullScreen // Nach Rezeize ist immer noch wsFullScreen erhalten geblieben.
F11: 2. Drücken // Das Toggeln funktioniert hier wie erwartet, aber eben nur mit wsMaximized.
vorher: wsFullScreen
nachher: wsNormal // Nun starten wir wieder mit wsNormal und das Toggeln geht nicht mehr.
- lcb-User
- Beiträge: 54
- Registriert: Di 15. Jul 2014, 13:18
- OS, Lazarus, FPC: Linux Mint 21.1 Cinnamon Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1
- CPU-Target: 64Bit
- Wohnort: München
Re: Hab mit wsFullScreen probleme?
Nach theo's Hinweis hab ich die FormWindowStateChange zugefügt.theo hat geschrieben: ↑Fr 10. Mär 2023, 09:49Ich bin jetzt nicht drin in dem Thema, wollte nur kurz darauf hinweisen, dass ein Formular auch das Ereignis
OnWindowStateChange kennt.
ich nehme nicht an, dass dies ein Problem löst, aber vielleicht ist es doch passender als OnResize?
Code: Alles auswählen
procedure TMainForm.FormWindowStateChange(Sender: TObject);
begin
ListBox1.Items.Add('OnWindowStateChange: '+WindowStateToStr(WindowState));
end;
OnCreate: wsMaximized
OnShow: wsMaximized
OnResize: wsMaximized
OnWindowStateChange: wsNormal
OnActivate: wsNormal
OnWindowStateChange: wsMaximized
OnResize: wsMaximized
F11: 1
vorher: wsMaximized
nachher: wsFullScreen
OnResize: wsFullScreen
F11: 2
vorher: wsFullScreen
nachher: wsNormal
OnResize: wsNormal
F11: 3
vorher: wsNormal
nachher: wsFullScreen
OnWindowStateChange: wsNormal
OnResize: wsNormal
F11: 4
vorher: wsNormal
nachher: wsFullScreen
F11: 5
vorher: wsFullScreen
nachher: wsNormal
OnResize: wsNormal
F11: 6
vorher: wsNormal
nachher: wsFullScreen
OnWindowStateChange: wsNormal
OnResize: wsNormal
F11: 7
vorher: wsNormal
nachher: wsFullScreen
F11: 8
vorher: wsFullScreen
nachher: wsNormal
Das irritiert mich, dass nur einmal OnWindowStateChange kommt!?
Müsste das nicht beim zurück nochmal kommen?
LG
Sonnige Grüße
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
Bibsi
Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 21.1 Cinnamon 5.6.7 Kernel 5.19.0-35-generic
Lazarus 2.3.0 (rev main-2_3-3744-g967034aff5) FPC 3.3.1 x86_64-linux-gtk2
- Ally
- Beiträge: 263
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: [erledigt]Hab mit wsFullScreen probleme?
Hallo lcb-User,
anbei zwei Beispiele wie man die Fensterwerte speichern kann, so dass sie beim Neustart erhalten bleiben.
Dabei wird, auch wenn man das Fenster im Vollbildmodus schließt, die Position und die Größe für wsNormal korrekt beibehalten.
Die Variante im Ordner XReg benutzt TRegistry.
TRegistry ist in Lazarus so implementiert, dass es cross-platform ist. ( https://wiki.freepascal.org/fcl-registry )
Ich habe mir dafür eine kleine Unit gebaut, die String, Integer, Boolean, usw. in die Registry schreiben und daraus lesen kann.
Das Ganze funktioniert auch unter Linux, dort werden Registry-Zugriffe automatisch im Order .config in einer entsprechenden XML gespeichert.
Vorteil: die Programmeinstellungen stehen BS-Spezifisch am "richtigen" Ort und sind immer erreichbar.
Die Variante im Ordner XIni benutzt TIniFile.
Mit dieser Variante kann man eine Ini-Datei in einen beliebigen Ordner schreiben.
Vorteil: man kann die Programmeinstellungen halt speichern wo man will. (wobei ich mir nicht ganz sicher bin ob das wirklich ein Vorteil ist. )
Gruß Roland
anbei zwei Beispiele wie man die Fensterwerte speichern kann, so dass sie beim Neustart erhalten bleiben.
Dabei wird, auch wenn man das Fenster im Vollbildmodus schließt, die Position und die Größe für wsNormal korrekt beibehalten.
Die Variante im Ordner XReg benutzt TRegistry.
TRegistry ist in Lazarus so implementiert, dass es cross-platform ist. ( https://wiki.freepascal.org/fcl-registry )
Ich habe mir dafür eine kleine Unit gebaut, die String, Integer, Boolean, usw. in die Registry schreiben und daraus lesen kann.
Das Ganze funktioniert auch unter Linux, dort werden Registry-Zugriffe automatisch im Order .config in einer entsprechenden XML gespeichert.
Vorteil: die Programmeinstellungen stehen BS-Spezifisch am "richtigen" Ort und sind immer erreichbar.
Die Variante im Ordner XIni benutzt TIniFile.
Mit dieser Variante kann man eine Ini-Datei in einen beliebigen Ordner schreiben.
Vorteil: man kann die Programmeinstellungen halt speichern wo man will. (wobei ich mir nicht ganz sicher bin ob das wirklich ein Vorteil ist. )
Gruß Roland
- Dateianhänge
-
- RegIni.zip
- (12.18 KiB) 44-mal heruntergeladen