studio poner para pantalla optimizada navegador modo juegos inmersivo esta ejecutarse desarrollo con completa como aplicaciones aplicacion delphi delphi-2007

poner - ¿Cuál es la mejor manera de hacer una aplicación Delphi completamente a pantalla completa?



pantalla completa android 8 (8)

¿Cuál es la mejor manera de hacer que una aplicación delphi (delphi 2007 para win32 aquí) se muestre completamente a pantalla completa, eliminando el borde de la aplicación y cubriendo la barra de tareas de Windows?

Estoy buscando algo similar a lo que IE hace cuando presionas F11.

Deseo que esta sea una opción de tiempo de ejecución para el usuario, no una decisión de tiempo de diseño por mi buen yo.

Como se menciona en la respuesta aceptada

BorderStyle := bsNone;

fue parte del camino para hacerlo. Extrañamente sigo obteniendo un E2010 Incompatible types: ''TFormBorderStyle'' and ''TBackGroundSymbol'' error al usar esa línea (otro tipo tenía bsNone definido).

Para superar esto, tuve que usar:

BorderStyle := Forms.bsNone;


Bueno, esto siempre me ha funcionado. Parece un poco más simple ...

procedure TForm52.Button1Click(Sender: TObject); begin BorderStyle := bsNone; WindowState := wsMaximized; end;


Maximiza el formulario y oculta la barra de título . La línea de maximizar se hace desde la memoria, pero estoy bastante seguro de que WindowState es la propiedad que desea.

También hay este artículo, pero eso me parece demasiado complicado.

procedure TForm1.FormCreate(Sender: TObject) ; begin //maximize the window WindowState := wsMaximized; //hide the title bar SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and not WS_CAPTION); ClientHeight := Height; end;

Editar: Aquí hay un ejemplo completo, con opciones de "pantalla completa" y "restaurar". Rompí las diferentes partes en pequeños procedimientos para obtener la máxima claridad, por lo que podría comprimirse en pocas líneas.

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) btnGoFullScreen: TButton; btnNotFullScreen: TButton; btnShowTitleBar: TButton; btnHideTitleBar: TButton; btnQuit: TButton; procedure btnGoFullScreenClick(Sender: TObject); procedure btnShowTitleBarClick(Sender: TObject); procedure btnHideTitleBarClick(Sender: TObject); procedure btnNotFullScreenClick(Sender: TObject); procedure btnQuitClick(Sender: TObject); private SavedLeft : integer; SavedTop : integer; SavedWidth : integer; SavedHeight : integer; SavedWindowState : TWindowState; procedure FullScreen; procedure NotFullScreen; procedure SavePosition; procedure HideTitleBar; procedure ShowTitleBar; procedure RestorePosition; procedure MaximizeWindow; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnQuitClick(Sender: TObject); begin Application.Terminate; end; procedure TForm1.btnGoFullScreenClick(Sender: TObject); begin FullScreen; end; procedure TForm1.btnNotFullScreenClick(Sender: TObject); begin NotFullScreen; end; procedure TForm1.btnShowTitleBarClick(Sender: TObject); begin ShowTitleBar; end; procedure TForm1.btnHideTitleBarClick(Sender: TObject); begin HideTitleBar; end; procedure TForm1.FullScreen; begin SavePosition; HideTitleBar; MaximizeWindow; end; procedure TForm1.HideTitleBar; begin SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and not WS_CAPTION); ClientHeight := Height; end; procedure TForm1.MaximizeWindow; begin WindowState := wsMaximized; end; procedure TForm1.NotFullScreen; begin RestorePosition; ShowTitleBar; end; procedure TForm1.RestorePosition; begin //this proc uses what we saved in "SavePosition" WindowState := SavedWindowState; Top := SavedTop; Left := SavedLeft; Width := SavedWidth; Height := SavedHeight; end; procedure TForm1.SavePosition; begin SavedLeft := Left; SavedHeight := Height; SavedTop := Top; SavedWidth := Width; SavedWindowState := WindowState; end; procedure TForm1.ShowTitleBar; begin SetWindowLong(Handle,gwl_Style,GetWindowLong(Handle,gwl_Style) or ws_Caption or ws_border); Height := Height + GetSystemMetrics(SM_CYCAPTION); Refresh; end; end.


Una búsqueda en Google mostró los siguientes métodos adicionales:

(Aunque creo que primero probaría el método de Roddy)

Llenar manualmente la pantalla (desde: Acerca de Delphi)

procedure TSomeForm.FormShow(Sender: TObject) ; var r : TRect; begin Borderstyle := bsNone; SystemParametersInfo (SPI_GETWORKAREA, 0, @r,0) ; SetBounds (r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top) ; end;

Variación sobre un tema de Roddy

FormStyle := fsStayOnTop; BorderStyle := bsNone; Left := 0; Top := 0; Width := Screen.Width; Height := Screen.Height;

La forma de WinAPI (por Peter Below from TeamB)

private // in form declaration Procedure WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; Procedure TForm1.WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); Begin inherited; With msg.MinMaxInfo^.ptMaxTrackSize Do Begin X := GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth); Y := GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight ); End; End; procedure TForm1.Button2Click(Sender: TObject); Const Rect: TRect = (Left:0; Top:0; Right:0; Bottom:0); FullScreen: Boolean = False; begin FullScreen := not FullScreen; If FullScreen Then Begin Rect := BoundsRect; SetBounds( Left - ClientOrigin.X, Top - ClientOrigin.Y, GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth), GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight )); // Label2.caption := IntToStr(GetDeviceCaps( Canvas.handle, VERTRES )); End Else BoundsRect := Rect; end;


Cómo restringir un subformulario dentro de Mainform como si fuera una aplicación MDI. ¡Pero sin los dolores de cabeza! (Nota: las respuestas en esta página me ayudaron a hacer que esto funcionara, así que es por eso que publiqué mi solución aquí)

private { Private declarations } StickyAt: Word; procedure WMWINDOWPOSCHANGING(Var Msg: TWMWINDOWPOSCHANGING); Message M_WINDOWPOSCHANGING; Procedure WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;

luego...

procedure TForm2.WMWINDOWPOSCHANGING(var Msg: TWMWINDOWPOSCHANGING); var A, B: Integer; iFrameSize: Integer; iCaptionHeight: Integer; iMenuHeight: Integer; begin iFrameSize := GetSystemMetrics(SM_CYFIXEDFRAME); iCaptionHeight := GetSystemMetrics(SM_CYCAPTION); iMenuHeight := GetSystemMetrics(SM_CYMENU); // inside the Mainform client area A := Application.MainForm.Left + iFrameSize; B := Application.MainForm.Top + iFrameSize + iCaptionHeight + iMenuHeight; with Msg.WindowPos^ do begin if x <= A + StickyAt then x := A; if x + cx >= A + Application.MainForm.ClientWidth - StickyAt then x := (A + Application.MainForm.ClientWidth) - cx + 1; if y <= B + StickyAt then y := B; if y + cy >= B + Application.MainForm.ClientHeight - StickyAt then y := (B + Application.MainForm.ClientHeight) - cy + 1; end; end;

y aún más ...

Procedure TForm2.WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); var iFrameSize: Integer; iCaptionHeight: Integer; iMenuHeight: Integer; Begin inherited; iFrameSize := GetSystemMetrics(SM_CYFIXEDFRAME); iCaptionHeight := GetSystemMetrics(SM_CYCAPTION); iMenuHeight := GetSystemMetrics(SM_CYMENU); With msg.MinMaxInfo^.ptMaxPosition Do begin // position of top when maximised X := Application.MainForm.Left + iFrameSize + 1; Y := Application.MainForm.Top + iFrameSize + iCaptionHeight + iMenuHeight + 1; end; With msg.MinMaxInfo^.ptMaxSize Do Begin // width and height when maximized X := Application.MainForm.ClientWidth; Y := Application.MainForm.ClientHeight; End; With msg.MinMaxInfo^.ptMaxTrackSize Do Begin // maximum size when maximised X := Application.MainForm.ClientWidth; Y := Application.MainForm.ClientHeight; End; // to do: minimum size (maybe) End;


Poner a la forma onShow evento tal código:

WindowState:=wsMaximized;

Y a OnCanResize esto:

if (newwidth<width) and (newheight<height) then Resize:=false;


Debe asegurarse de que la posición del formulario sea poDefaultPosOnly.

Form1.Position := poDefaultPosOnly; Form1.FormStyle := fsStayOnTop; Form1.BorderStyle := bsNone; Form1.Left := 0; Form1.Top := 0; Form1.Width := Screen.Width; Form1.Height := Screen.Height;

Probado y funciona en Win7 x64.


Tratar:

Align = alClient FormStyle = fsStayOnTop

Esto siempre se alinea con el monitor principal;


Hm. Al mirar las respuestas, recuerdo haber tratado con esto hace unos 8 años cuando codifiqué un juego. Para facilitar la depuración, utilicé el contexto del dispositivo de un formulario Delphi normal como fuente para una visualización a pantalla completa.

El punto es que DirectX es capaz de ejecutar cualquier pantalla completa de contexto de dispositivo, incluida la asignada por su formulario.

Por lo tanto, para ofrecer una aplicación de capacidades de pantalla completa "verdaderas", rastree una biblioteca DirectX para Delphi y probablemente contenga lo que necesita de fábrica.