2009-03-25 17 views
8

Le code suivant fonctionne correctement dans Delphi 7. Toutefois, dans Delphi 2009, le formulaire reste masqué mais le bouton de la barre des tâches apparaît maintenant.Masquer le formulaire principal dans une application Delphi 2009

ShowWindow(Handle, SW_HIDE); 
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); 
ShowWindow(Handle, SW_SHOW); 

Le code ci-dessus est appelé dans la méthode FormCreate.

+0

Le formulaire ne reste PAS caché pour moi dans D2007 ni D2009 avec votre code exact. Ce qui semble ce que vous voulez pour une raison quelconque si vous mettez ceci: ShowWindow (Handle, SW_SHOW); Semblait à moi que vous vouliez l'afficher pas le cacher. S'il vous plaît mettre à jour et préciser votre question car il semble que vous voulez le contraire .. –

+0

Le code ci-dessus est utilisé pour supprimer le bouton formulaire de la barre des tâches avant 2009. Le but est juste d'obtenir l'arrêt du bouton de la barre des tâches du formulaire. J'ai écrit une petite application de test et ce code semble fonctionner correctement. Cependant, dans ce cas particulier, il semble que c'est la forme cachée des applications. – James

+0

Supprimé ma réponse, car il ne semble pas fonctionner ... – onnodb

Répondre

10

Il s'avère que la raison pour laquelle nous voyions la fenêtre d'application dans la barre des tâches était un paramètre simple similaire à la réponse de stukelly mais pas tout à fait.

Pour obtenir la forme principale apparaisse sur la barre des tâches et cacher le menu d'application que vous appliquez:

Application.MainFormOnTaskbar := True; 
Application.ShowMainForm := False; 

Aucun code derrière la forme créer ou quoi que ce soit nécessaire.

+0

Merci de poster votre solution sur le débordement de la pile. Je pensais que vous vouliez cacher le bouton de la barre des tâches et le formulaire principal. – stukelly

+0

Cela ne fonctionne pas si vous avez du code dans FormActivate(). Le formulaire ne s'affiche jamais et le FormActivate() n'est jamais appelé. – TheSteven

+0

@TheSteven qui a un sens complet, le formulaire ne devrait jamais devenir actif ... il est caché. Si vous avez du code dans FormActivate pour un formulaire caché, c'est évidemment le mauvais endroit pour cela. – James

5

Vous devez définir les propriétés ShowMainForm et MainFormOnTaskBar sur False avant la création du formulaire.

Ouvrez votre source de projet et mis MainFormOnTaskBar et ShowMainForm False, avant que le formulaire est créé.

Application.Initialize; 
Application.MainFormOnTaskbar := false; 
Application.ShowMainForm := false; 
Application.CreateForm(TForm1, Form1); 

ensuite sur votre formulaire principal ajoutez le code suivant à la FormActivate et FormShow événements.

procedure TForm1.FormActivate(Sender: TObject); 
begin 
// hide taskbar button 
ShowWindow(Application.Handle, SW_HIDE); 
end; 
procedure TForm1.FormShow(Sender: TObject); 
begin 
// hide taskbar button 
ShowWindow(Application.Handle, SW_HIDE); 
end; 

Je l'ai testé avec Dephi 2007 et 2009. Des informations complémentaires sont disponibles here.

Questions connexes