Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   Form a pantalla completa (https://www.clubdelphi.com/foros/showthread.php?t=62801)

Suriu 15-01-2009 05:41:30

Form a pantalla completa
 
Hola, como el tema lo indica estoy tratando de poner una form a pantalla completa, hasta aora solo e logrado que esta ocupe el area de trabajo. E estado consultamdo en la web de Microsoft y he encontrado las API GetSystemMetric y SystemParameterInfo pero solo ocupa elarea de trabajo. Esto es lo que tengo:

Trucomania

Truco.495-Que tu appli ocupe toda la pantalla excepto la barra de tarea.

Dependiendo de la posición y el tamaño de la barra de tareas, nuestra aplicación tendrá a su disposición un espacio de trabajo determiando en la
pantalla que debera respatar para no 'pisar' la propia barra de tareas.
Este espacio de trabajo disponible, lo podremos hallar mediante esta llamada al API de Windows:



var
R: TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
...
...




con ello, podremos redimensionar nuestra form en el momento de su creación, colocando esto en su evento OnCreate:



procedure TForm1.FormCreate(Sender: TObject);
var
R: TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
end;



Ahora bien, si al usuario le da por redimensionar la barra de tareas o bien le da por colocarla en otro sitio, nuestra aplicación debería tener la
capacidad de autoredimensionarse para ocupar el nuevo espacio disponible.
Esto lo podremos hacer mediante la captura del mensaje de Windows WM_SETTINGCHANGE con la salvedad
Msg.WParam=SPI_SETWORKAREA
Así que, capturemos el mensajillo pues...
Pondremos esta linea en la parte private de la form:


type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMSettingChange( var Msg: TMessage); message WM_SETTINGCHANGE;
public
{ Public declarations }
end;



y la correspondiente declaración en la parte implementation de la form:



procedure TForm1.WMSettingChange( var Msg: TMessage);
var
R: TRect;
begin
Exit;
if (Msg.WParam=SPI_SETWORKAREA) then begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
end;
Msg.Result:=0;
end;



Este codigo solo ocupa el area de trabajo y lo que deseo es que pise la barra de tareas tambien, como lo hace los reproductores de video cuando lo pones a pantalla completa.


Gracias por la ayuda que me puedan dar...

white_zombie 15-01-2009 09:27:38

Hola, no hace falta ningún código, es muy fácil solo debes cambiar dos propiedades del form, BorderStyle:=bsNone y WindowsState:=wsMaximized.
Con esto el formulario ocupa toda la pantalla como los reproductores que comentas.

Un Saludo.

Faust 18-01-2009 17:42:52

Cita:

Empezado por white_zombie (Mensaje 334561)
Hola, no hace falta ningún código, es muy fácil solo debes cambiar dos propiedades del form, BorderStyle:=bsNone y WindowsState:=wsMaximized.
Con esto el formulario ocupa toda la pantalla como los reproductores que comentas.

Un Saludo.

Eso si no me lo sabía, yo creí que era algo más complicado...

Suriu 20-01-2009 22:07:09

gracias
 
gracias white_zombie por responder lo he probado y me ha pinchado ok.


La franja horaria es GMT +2. Ahora son las 23:54:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi