PDA

Ver la Versión Completa : Form a pantalla completa


Suriu
15-01-2009, 05:41:30
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 (http://www.q3.nu/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
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 white_zombie (http://www.clubdelphi.com/foros/member.php?u=7446) por responder lo he probado y me ha pinchado ok.