2011-02-09 15 views
6

Este es el código que estoy usando:App permanecer detrás de la barra de tareas cuando se inicia en pantalla completa

BorderStyle := bsNone; 
WindowState := wsMaximized; 

Mi problema es que la aplicación no cubrirá la barra de tareas, pero ir detrás de él.

Funciona bien cuando se cambia a pantalla completa en tiempo de ejecución, pero no funciona al iniciar la aplicación al iniciar el sistema.

ACTUALIZACIÓN

Resulta que esas dos líneas funcionan muy bien. Están en el controlador de eventos FormShow. Si rompo el punto hasta el final de FormShow, la aplicación parece estar en pantalla completa; Puedo ver la aplicación a través de la barra de tareas. Pero después de FormShow la propiedad Top de la aplicación se cambia de alguna manera. No lo cambio en código: el valor es -20, por lo que la aplicación ya no se maximiza.

¿Hay alguna manera de rastrear dónde o cuándo se cambia?

¡Gracias de antemano!

ACTUALIZACIÓN

se marca este post. Por favor, no publiques ninguna respuesta! Gracias.

+1

¿Dónde se utiliza este código? ¿En qué evento controlador? – jpfollenius

+0

Esto es lo que significa "área de trabajo", el área en el monitor primario que queda fuera de las barras de herramientas de la aplicación de escritorio (la barra de tareas es una). –

+0

Ha modificado la pregunta para que no solo haga irrelevantes las respuestas y los comentarios existentes, sino que no pregunte lo mismo que pide el título de la pregunta. -1. Es mejor que resuelva la pregunta original de alguna manera y le pida a uno nuevo ... –

Respuesta

1

intento:

Form.Left := 0; // set the x 
Form.Top := 0; // set the y 
Form.Width := Screen.Width; // width of the form 
Form.Height := Screen.Height; // height of the form 
// and 
Form.FormStyle := fsStayOnTop; // taskbar is always on top as well, setting the Style property to always on top will allow the form to cover the taskbar 

si desea ocultar el título a continuación, la borderstyle a bsNone

+0

No funciona (en Win7) si presiona la tecla Windows: la barra de tareas o el botón redondo del menú de Windows (bottomleft) se pone en la parte superior –

+2

@ André - AFAIU la pregunta no implica prevenir la activación de la barra de tareas después de que se muestra la forma. –

+0

@Sertac: correcto, pero creo que no quiere ver la barra de tareas en absoluto, por lo que sería un problema nuevamente si taksbar permanece en la parte superior después de la tecla "Windows" (el mismo problema). Ver mi propia respuesta para una solución completa (cambiando el estilo) –

2

cambiar el estilo de parámetro, de acuerdo con este blog de MSDN: http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/414910.aspx

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.Style := WS_POPUP or WS_VISIBLE; //will overlay taskbar 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Self.WindowState := wsMaximized; //fullscreen 
end; 

==============================

código completo de ventana para cambiar de modo de pantalla completa y la espalda (probado en Win7 de 64 bits, Aero)
(Edit: funciona en Windows XP (VMware) demasiado)

var 
    _OrgWindowedStyle: DWORD; 

procedure TForm6.btnWindowedClick(Sender: TObject); 
begin 
    Self.WindowState := wsNormal; 
    //set original style 
    SetWindowLong(Application.Handle, GWL_STYLE, 
       _OrgWindowedStyle); 
    //re-create window, to use changed style 
    RecreateWnd; 
end; 

procedure TForm6.btnFullScreenClick(Sender: TObject); 
begin 
    _OrgWindowedStyle := 0; //clear: re-applies fullscreen mode in CreateParams 
    Self.WindowState := wsMaximized; 
    //re-create window, to use changed style 
    RecreateWnd; 
end; 

procedure TForm6.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 

    //first time? default fullscreen 
    if _OrgWindowedStyle = 0 then 
    begin 
    _OrgWindowedStyle := Params.Style; 
    Params.Style := //WS_POPUP or    //not needed? 
        WS_VISIBLE 
        or WS_BORDER or WS_CAPTION //comment this line to remove border + titlebar 
    end; 
end; 

procedure TForm6.FormCreate(Sender: TObject); 
begin 
    Self.WindowState := wsMaximized;  //default fullscreen 
end; 
Cuestiones relacionadas