Question

Je dois masquer un formulaire Windows dans la barre des tâches, mais je ne peux pas utiliser WS_EX_TOOLWINDOW car j'ai besoin du menu système et des boutons Min / Max dans la barre de titre du formulaire.

Si je change le formulaire en fenêtre d’outil au moment de l’exécution, le skinning du formulaire est encombré. En recherchant sur le Web, je vois que VB a une propriété ShowInTaskbar et je me demande si cela ferait ce que je veux et si cela peut être implémenté dans Delphi 2006. De plus, ce projet est un serveur COM et n'a pas de MainForm, etc.

Était-ce utile?

La solution

Il existe une discussion intéressante sur ce problème précis ici (d'un persepective VB6).

Le point le plus pertinent du point de vue de votre question est le suivant:

  

" Lorsque vous créez une fenêtre, la barre des tâches   examine le style étendu de la fenêtre   pour voir si le WS_EX_APPWINDOW   (& amp; H40000) ou WS_EX_TOOLWINDOW (& amp; H80)   le style est activé. Si WS_EX_APPWINDOW   est activé, la barre des tâches affiche un   bouton pour la fenêtre, et si WS_EX_   TOOLWINDOW est activé, la barre des tâches   ne montre pas un bouton pour la fenêtre.   Une fenêtre ne devrait jamais avoir les deux   ces styles étendus. Si la fenêtre   n'a aucun de ces styles,   la barre des tâches décide de créer un bouton   si la fenêtre est sans propriété et ne   créer un bouton si la fenêtre est   appartenant. "

     

Incidemment, vous utilisez GetWindow   Fonction API avec l'indicateur GW_OWNER sur   déterminer si une fenêtre est la propriété.

Autres conseils

Merci à Stu de m'avoir mis à la réponse si rapidement. Dans mon cas, je devais ajouter manuellement le descripteur du formulaire propriétaire dans CreateParams, mais cela peut ne pas être nécessaire dans d'autres cas / normaux.

procedure TfrmWord2Site.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := <your owner form>.Handle;
  Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;

Merci à http://www.scalabium.com/faq/dct0096.htm .

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  ShowWindow(Application.Handle, SW_SHOW);
end;

Je l'ai testé et cela fonctionnait avec Delphi2006. Et le menu des fenêtres et les boutons min / max sont toujours visibles.

dans Delphi XE (2010), cela fonctionne parfaitement: vous devez modifier le formulaire principal,

program prog;  

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

begin
Application.Initialize;

// this value is set to "true", but you shoud set it "false"
Application.MainFormOnTaskbar := false;

Application.CreateForm(TForm1, Form1);
Application.Run;
end.

(pour cette recherche de formulaire principale dans la fenêtre "Vue de modélisation")

après cela, accédez à unit1.pas, à votre unité de formulaires principale et à "OnShow". événement de form1 do:

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

cela aidera, j'ai eu le même problème, cherché tout le net, mais sans resolt

Résolu mes problèmes dans ce domaine par BordersStyle bsDialog / bsToolWindow (mais je n’ai pas eu besoin du min / max ...). Mais je me demande pourquoi vous devriez vouloir combiner ces attributs. Ne confondez-vous pas l'utilisateur «normal»?

Je cherche un morceau de code pour intégrer une zone de texte à la barre des tâches Windows.

Je prévois de créer une barre d'outils que je ne peux pas 'intégrer à la barre des tâches.

Merci pour votre aide pj

Une façon de faire cela en C # est:

ShowWindow(_window, SWHide);

int style = GetWindowLong(_window, GWL_EXSTYLE);
style |= WS_EX_TOOLWINDOW;
SetWindowLong(_window, GWL_EXSTYLE, style);

ShowWindow(_window, SWShow);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top