Ver Mensaje Individual
  #1  
Antiguo 15-01-2009
Suriu Suriu is offline
Miembro
 
Registrado: abr 2007
Posts: 48
Reputación: 0
Suriu Va por buen camino
Question 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...
Responder Con Cita