2011-02-09 15 views
6

Questo è il codice che sto utilizzando:App stare dietro barra delle applicazioni quando si inizia a schermo intero

BorderStyle := bsNone; 
WindowState := wsMaximized; 

Il mio problema è che l'applicazione non coprirà la barra delle applicazioni, ma andare dietro di esso.

Funziona correttamente quando si passa a schermo intero in fase di esecuzione, ma non funziona quando si avvia l'applicazione all'avvio del sistema.

UPDATE

Risulta che queste due linee funzionano molto bene. Sono nel gestore di eventi FormShow. Se punto di interruzione fino alla fine di FormShow, l'applicazione sembra essere a schermo intero; Posso vedere l'applicazione attraverso la barra delle applicazioni. Ma dopo FormShow la proprietà Top dell'applicazione viene modificata in qualche modo. Non lo cambio in codice - il valore è -20, quindi l'applicazione non è più ingrandita.

C'è un modo per tenere traccia di dove o quando è cambiato?

Grazie in anticipo!

UPDATE

Questo post è in posizione. Si prega di non pubblicare alcuna risposta! Grazie.

+1

Dove si utilizza questo codice? In quale event handler? – jpfollenius

+0

Questo è ciò che significa "area di lavoro", l'area sul monitor principale lasciata dalle barre degli strumenti dell'applicazione desktop (la barra delle applicazioni è una). –

+0

Hai modificato la domanda in modo che non solo le risposte e i commenti esistenti siano irrilevanti, ma anche che non chieda la stessa cosa richiesta dal titolo della domanda. -1. Faresti meglio a risolvere la domanda originale in qualche modo e ne chiedi una nuova .. –

risposta

1

prova:

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 

se si desidera nascondere la didascalia quindi impostare il BorderStyle bsnone

+0

Non funziona (su Win7) se si preme il tasto Windows: barra delle applicazioni o il pulsante rotondo del menu Windows (bottomleft) diventa in cima –

+2

@ André - AFAIU la domanda non comporta l'impedimento dell'attivazione della barra delle applicazioni dopo che il modulo è mostrato. –

+0

@Sertac: corretto, ma penso che non voglia vedere la barra delle applicazioni, quindi sarebbe di nuovo un problema se taksbar rimanga in cima dopo il tasto "Windows" (lo stesso problema di ritorno). Vedi la mia risposta per la soluzione completa (cambiando stile) –

2

cambiare lo stile param, secondo questo blog 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; 

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

codice completo per passare dalla modalità a schermo intero con finestra per e ritorno (testato su Win7 64 bit, Aero)
(Edit: funziona in Windows XP (vmware) troppo)

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; 
Problemi correlati