Для GTK2 взято из справки:
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Menus;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ private declarations }
public
OriginalBounds: TRect;
OriginalWindowState: TWindowState;
ScreenBounds: TRect;
procedure SwitchFullScreen;
end;
var
Form1: TForm1;
implementation
uses gtk2, gdk2, glib2;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
);
const
KeyF11 = 122;
begin
if Key = KeyF11 then SwitchFullScreen;
end;
procedure TForm1.SwitchFullScreen;
begin
if BorderStyle <> bsNone then begin
// To full screen
OriginalWindowState := WindowState;
OriginalBounds := BoundsRect;
BorderStyle := bsNone;
BoundsRect := Screen.MonitorFromWindow(Handle).BoundsRect;
gdk_window_fullscreen(PGtkWidget(Handle)^.window);
end else begin
// From full screen
{$IFDEF MSWINDOWS}
BorderStyle := bsSizeable;
{$ENDIF}
if OriginalWindowState = wsMaximized then
WindowState := wsMaximized
else
BoundsRect := OriginalBounds;
{$IFDEF LINUX}
BorderStyle := bsSizeable;
{$ENDIF}
gdk_window_unfullscreen(PGtkWidget(Handle)^.window);
end;
end;
end.
Проверено на ALT Linux Simply, работает. После запуска, первое нажатие на F11 разворачивает форму на весь экран с перекрытием панели задач, второе нажатие F11, возвращает в обычное состояние