Formular auf Vollbild aufziehen und wieder zurück .. [fast gelöst]

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Formular auf Vollbild aufziehen und wieder zurück .. [fast gelöst]

Beitrag von corpsman »

Servus zusammen,
ich möchte via Tastatur meine Anwendung ins Vollbild versetzen und wieder Zurück, dazu habe ich foldenden Code geschrieben:

Code: Alles auswählen


Var
  oldtop, oldleft, oldwidth, oldheight: integer;

Procedure TForm1.OpenGLControl1KeyDown(Sender: TObject; Var Key: Word;
  Shift: TShiftState);
Begin
  If (key = 13) And (ssAlt In Shift) Then Begin
    If BorderStyle = bsSizeable Then Begin
      BorderStyle := bsNone;
      WindowState := wsMaximized;
      oldtop := Top;
      oldleft := Left;
      oldwidth := Width;
      oldheight := height;
    End
    Else Begin
      //      BorderStyle := bsSizeable; -- Hier Knallt es
      WindowState := wsNormal;
      Top := oldtop;
      Left := oldleft;
      Width := oldwidth;
      height := oldheight;
    End;
  End;
End;    
Das Problem das ich nun habe
1. Die Anwendung geht nicht über die Taskleiste (zumindest nicht bei meinem Linux Mint Mate 21.1) -> ist also nicht komplett Vollbild
2. Beim wieder "klein" machen, darf ich anscheinend die BorderStyle nicht mehr wieder Her stellen, sonst bekomme ich ne AV in der LCL

=>
Wie macht man das Richtig, hat da einer ne Idee ?
Zuletzt geändert von corpsman am Sa 11. Mär 2023, 10:13, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von fliegermichl »

Es gibt ja auch die Option wsFullScreen. Bei mir mit Windows 11 hat die aber den gleichen Effekt wie wsMaximized.

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von wennerer »

Hallo corpsman,
ich habe deinen Code etwas umgestellt. Bei mir unter Linux Mint Cinnamon funktioniert es jetzt so.

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
   oldtop, oldleft, oldwidth, oldheight: integer;
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
 If (key = 13) And (ssAlt In Shift) Then Begin
    If BorderStyle = bsSizeable Then Begin
      oldtop := Top;
      oldleft := Left;
      oldwidth := Width;
      oldheight := height;
      BorderStyle := bsNone;
      WindowState := wsMaximized;
    End
    Else Begin
      WindowState := wsNormal;
      BorderStyle := bsSizeable;
      Top := oldtop;
      Left := oldleft;
      Width := oldwidth;
      height := oldheight;
    End;
  End;
end;
 



end.
Viele Grüße
Bernd
Dateianhänge
project1.zip
(105.46 KiB) 46-mal heruntergeladen

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von corpsman »

@wennerer
Also deine Demo stürzt schon mal nicht ab ;) und funktioniert bis auf das "überdecken" der Taskleiste auch.

Wenn ich das dann aber in meine Anwendung übernehme kann ich meine Anwendung nur Maximieren, aber nicht mehr minimieren, (wieder die AV)

Anscheinend macht das OpenGLControl da irgendwelche Probleme, ..
--
Just try it

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von wennerer »

Hallo corpsman,
mit OpenGl kenn ich mich leider nicht aus. Aber nur so zur Info bei mir wird die Taskleiste nicht verdeckt. Warum auch immer.

Edit: Ich habe es eben trotzdem nochmal mit einem OpenGLControl probiert. Das ist bei mir seltsam, wenn ich erst Alt drücke und dann Enter läuft es ohne Problem. Wenn ich erst Enter und dann Alt drücke habe ich auch die Fehlermeldung. Vielleicht hilft es dir ja was.

Viele Grüße
Bernd

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von Mathias »

wennerer hat geschrieben:
Mo 6. Mär 2023, 19:29
Hallo corpsman,
ich habe deinen Code etwas umgestellt. Bei mir unter Linux Mint Cinnamon funktioniert es jetzt so.

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
   oldtop, oldleft, oldwidth, oldheight: integer;
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
 If (key = 13) And (ssAlt In Shift) Then Begin
    If BorderStyle = bsSizeable Then Begin
      oldtop := Top;
      oldleft := Left;
      oldwidth := Width;
      oldheight := height;
      BorderStyle := bsNone;
      WindowState := wsMaximized;
    End
    Else Begin
      WindowState := wsNormal;
      BorderStyle := bsSizeable;
      Top := oldtop;
      Left := oldleft;
      Width := oldwidth;
      height := oldheight;
    End;
  End;
end;
 



end.
Viele Grüße
Bernd
Hast du gesehen, das dein Programm folgende Fehler beim Wechseln auspuckt ?

Code: Alles auswählen

(project1:3291): GLib-GObject-[1;35mCRITICAL[0m **: [34m20:54:44.664[0m: g_object_get_data: assertion 'G_IS_OBJECT (object)' failed

(project1:3291): GLib-GObject-[1;35mCRITICAL[0m **: [34m20:54:44.665[0m: g_object_get_data: assertion 'G_IS_OBJECT (object)' failed

(project1:3291): GLib-GObject-[1;35mCRITICAL[0m **: [34m20:54:46.192[0m: g_object_get_data: assertion 'G_IS_OBJECT (object)' failed

(project1:3291): GLib-GObject-[1;35mCRITICAL[0m **: [34m20:54:46.192[0m: g_object_get_data: assertion 'G_IS_OBJECT (object)' failed
Heap dump by heaptrc unit of /home/tux/Schreibtisch/Unbenannter Ordner/Linux_64_Default/project1
884 memory blocks allocated : 1014439/1015200
884 memory blocks freed     : 1014439/1015200
0 unfreed memory blocks : 0
True heap size : 1638400
True free heap : 1638400
@corpsman
Brauchst du zwingend die LCL für deine OpenGL Animation ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von wennerer »

Hallo Mathias,
ich habe es jetzt mehrmals getestet sowohl mit dem OpenGlControl auf der Form, als auch ohne habe ich keine gtk Fehlermeldung. Bei mir ist da nix.

Viele Grüße
Bernd

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von corpsman »

So hab es nun auch mal unter Windows getestet,

Da klappt das Groß und Klein machen 1a, allerdings zerlegt es mir dabei den Renderingkontext und ich müsste den jedes mal komplett neu initialisieren, wenn ich einfach nur mit der Maus nen Doppelklick auf die Caption mache bin ich "fast" ganz groß ohne das Problem, damit bleibt mir wohl vorerst nur diese alternative :/

Unter Windows bringt das hier:

Code: Alles auswählen


Var
  oldtop, oldleft, oldwidth, oldheight: integer;
  Maximized: Boolean = false;

Procedure TForm1.OpenGLControl1KeyDown(Sender: TObject; Var Key: Word;
  Shift: TShiftState);
Begin
  // Das geht nicht gescheit, aber warum ?
  // Siehe auch: https://www.lazarusforum.de/viewtopic.php?f=9&t=14831
  If (key = 13) And (ssAlt In Shift) Then Begin
    If Not Maximized Then Begin
      Maximized := true;
      //BorderStyle := bsNone;
      oldtop := Top;
      oldleft := Left;
      oldwidth := Width;
      oldheight := height;
      WindowState := wsMaximized;
    End
    Else Begin
      Maximized := false;
      WindowState := wsNormal;
      //BorderStyle := bsSizeable;
      Top := oldtop;
      Left := oldleft;
      Width := oldwidth;
      height := oldheight;
    End;
  End;
End;  
Die Besten Ergebnisse. -> Das umschalten der Borderstyle scheint hier das Problem zu sein ...
--
Just try it

Benutzeravatar
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: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von lcb-User »

vielleicht hilft das

Application full screen mode
https://wiki.freepascal.org/Application ... creen_mode

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

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von corpsman »

Ui danke für den Hinweis, das werde ich morgen glatt ausprobieren, danke
--
Just try it

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von corpsman »

Ui UI Das Thema geht ja grad durchs Forum ;)

viewtopic.php?f=55&t=11742&start=15
viewtopic.php?f=10&t=14836
und dieser Thread hier ..

Durch querlesen all dieser habe ich nun eine Lösung gefunden die unter Linux 1a ist, unter Windows aber immer noch die Caption stehen läst ..

Code: Alles auswählen

Var
  WishFullscreen: Boolean;

Procedure TForm1.OpenGLControl1KeyDown(Sender: TObject; Var Key: Word;
  Shift: TShiftState);
Begin
  // Für Windows noch nicht optimal, ..
  // Siehe auch: https://www.lazarusforum.de/viewtopic.php?f=9&t=14831
  If (key = 13) And (ssAlt In Shift) Then Begin
    If WindowState = wsNormal Then Begin
      WishFullscreen := true;
      WindowState := wsFullScreen;
    End
    Else Begin
      WishFullscreen := false;
      WindowState := wsNormal;
    End;
  End;
End;

Procedure TForm1.FormResize(Sender: TObject);
Begin
  If WishFullscreen Then Begin
    WindowState := wsFullScreen;
  End;
End;
--
Just try it

Benutzeravatar
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: Formular auf Vollbild aufziehen und wieder zurück ..

Beitrag von lcb-User »

corpsman hat geschrieben:
Mo 6. Mär 2023, 18:57
Servus zusammen,
ich möchte via Tastatur meine Anwendung ins Vollbild versetzen und wieder Zurück, dazu habe ich foldenden Code geschrieben:

Das Problem das ich nun habe
1. Die Anwendung geht nicht über die Taskleiste (zumindest nicht bei meinem Linux Mint Mate 21.1) -> ist also nicht komplett Vollbild
2. Beim wieder "klein" machen, darf ich anscheinend die BorderStyle nicht mehr wieder Her stellen, sonst bekomme ich ne AV in der LCL
Hallo corpsman

Es ist alles richtig außer dass diese TForm1.OpenGLControl1KeyDown in einem Objekt auf TForm1 liegt vermute ich zumindest.
Aktiviere im Objektinspektor in deinem From1 KeyPreview mit einem Haken, damit kannst im Form1 auf Tasteneingaben reagieren.
und nun verschiebst OpenGLControl1KeyDown nach FormKeyDown.

Host mi :wink:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormResize(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

Var
  WishFullscreen: Boolean;

Procedure TForm1.FormResize(Sender: TObject);
Begin
  If WishFullscreen Then Begin
    WindowState := wsFullScreen;
  End;
End;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  // Für Windows noch nicht optimal, ..
  // Siehe auch: https://www.lazarusforum.de/viewtopic.php?f=9&t=14831
  If (key = 13) And (ssAlt In Shift) Then Begin
    If WindowState = wsNormal Then Begin
      WishFullscreen := true;
      WindowState := wsFullScreen;
    End
    Else Begin
      WishFullscreen := false;
      WindowState := wsNormal;
    End;
  End;
end;


end.
Unter Windows egal ob XP oder 10 hab ichś auch nicht hin gekriegt, die Taskleiste bleibt ja auch stehen, da sind wir unter Linux besser dran. :)

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

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Formular auf Vollbild aufziehen und wieder zurück .. [fast gelöst]

Beitrag von sstvmaster »

Mal sehe ob das hier funktioniert:

Code: Alles auswählen

unit umain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLType;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    // ---
    FullScreen: boolean;
    SavedWindowState: TWindowState;
    SavedLeft: Integer;
    SavedTop: Integer;
    SavedWidth: Integer;
    SavedHeight: Integer;
    SavedBorderStyle: TFormBorderStyle;
    // ---
  public

  end;

var
  Form1: TForm1;


implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  SavedWindowState := WindowState;
  SavedBorderStyle := BorderStyle;
  FullScreen := False;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  FullScreen := not FullScreen;
  if FullScreen then
    begin
      // save window pos
      SavedLeft:= Left;
      SavedTop:= Top;
      SavedWidth:= Width;
      SavedHeight:= Height;
      // switch to fullscreen
      BorderStyle := bsNone;
      WindowState := wsMaximized;
    end
  else
    begin
      // switch back to orignal mode
      BorderStyle := SavedBorderStyle;
      WindowState := SavedWindowState;
      // restore window pos
      Top := SavedTop;
      Left := SavedLeft;
      Width := SavedWidth;
      Height := SavedHeight;
    end;
end;

end.
Funktioniert soweit bei mir, habe aber leider nur Windows.
Dateianhänge
windowstate_sstvmaster.zip
(139.49 KiB) 37-mal heruntergeladen
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)

Benutzeravatar
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: Formular auf Vollbild aufziehen und wieder zurück .. [fast gelöst]

Beitrag von lcb-User »

sstvmaster hat geschrieben:
Mo 13. Mär 2023, 14:40
Mal sehe ob das hier funktioniert:

Funktioniert soweit bei mir, habe aber leider nur Windows.
Bei mir in der Virtualbox funkrioniert's in Windows 10 und XP wunderbar. Auch die Taskleiste verschwindet.
Unter Linux Mint 21.1 wird der Fensterrahmen zwar nicht gezeichnet aber die Taskleiste bleibt.

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

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Formular auf Vollbild aufziehen und wieder zurück .. [fast gelöst]

Beitrag von corpsman »

Für "normale" Windows Fenster kann ich das auch bestätigen.
Da ich hier aber eine OpenGL Anwendung darf ich die Borderstyle anscheinend im Nachhinein nicht mehr ändern.
Wenn ich das Fullscreen aber davor mache, dann geht es -> habe ich in meine Anwendung eine Option eingebaut die das über einen Neustart richtet und dann geht es auch ;)
--
Just try it

Antworten