Si dans Delphi 2010 ou Xe Application.MainformontaskBar est défini sur True, toutes les formes secondaires sont toujours devant la fenêtre principale. Peu importe ce que les propriétés popupmode ou popupparent sont réglées. Cependant, j'ai des fenêtres secondaires que je veux pouvoir montrer derrière la forme principale. p>
Si je définis MainformontaskBar sur False, cela fonctionne, mais les fonctionnalités Windows 7 sont cassées (ALT-TAB, Icône de bar Windows, etc.). p>
Comment puis-je garder les fonctionnalités Windows 7 fonctionnant tout en permettant toujours aux formes secondaires de se cacher derrière la forme principale? P>
3 Réponses :
Fondamentalement, vous ne pouvez pas. Tout le point de mainformontaskbar code> doit avoir une compatibilité Vista. Si vous ne le définissez pas, la compatibilité est partie .. si vous le définissez, la commande Z est terminée. L'extrait suivant vient de D2007's Readme: P>
La propriété contrôle comment les boutons de la barre des tâches de la fenêtre sont gérées par VCL. Cette propriété peut être appliquée aux applications plus anciennes, mais elle affecte l'ordre Z de votre formal de mainform. Vous devez donc vous assurer que vous n'avez aucune dépendance sur l'ancien comportement. Code> P>
Mais voir cette Signaler QC , qui décrit le même problème (et fermé que asdesigned em>). Le rapport indique une solution de contournement impliquant le remplacement créatures code> d'un formulaire pour définir le
wndparent code> sur '0'. Il décrit également quelques problèmes que cette solution de contournement provoque également une solution de contournement possible pour ces problèmes. Méfiez-vous, il ne serait pas facile de trouver et de contourner toutes les complications. Voir Steve Trefethen's Article pour avoir un sentiment de ce qui pourrait être impliqué. P>
L'article mentionné est maintenant ici A >.
J'aurais pensé qu'une approche serait d'avoir une forme principale "dans la scène" qui ne sert que des fins suivantes:
Pour sélectionner et afficher l'un des autres formulaires en tant que formulaire principal, puis se cacher perpétuellement (visible: = FALSE) comme les bons écrans "flash" à l'ancienne. p> li>
d'agir en tant que terminateur d'applications lorsque la forme qu'elle est sélectionnée sous forme de formulaire principal est fermée (juste câbler les événements surclose appropriés). P> li>
ouvrir d'autres formulaires au nom de la forme pseudo-principale désignée telle que la forme principale réelle cachée est le "propriétaire" des autres formes, pas la "forme pseudoise". Il semble que cela se produise de toute façon si toutes vos autres formes ont un style pop-up "non" et sont visibles via des appels de spectacles plutôt que sur ShowModal. P> Li> OL>
Cette petite restructuration du comportement de l'application peut alors vous obtenir l'interaction de l'utilisateur aimable que vous recherchez. P>
unit FlashForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls; type TFlash = class(TForm) lblTitle: TLabel; lblCopyright: TLabel; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); public procedure CloseApp; end; var Flash: TFlash; implementation {$R *.dfm} uses Main; procedure TFlash.CloseApp; // Call this from the Main.Form1.OnClose or CanClose (OnFormCloseQuery) event handlers begin close end; procedure TFlash.FormCreate(Sender: TObject); // You can get rid of the standard border icons if you want to begin lblCopyright.Caption := 'Copyright (c) 2016 AT Software Engineering Ltd'; Refresh; Show; BringToFront; end; procedure TFlash.Timer1Timer(Sender: TObject); begin Application.MainFormOnTaskBar := FALSE; // This keeps the taskbar icon alive if assigned(Main.MainForm) then begin visible := FALSE; Main.MainForm.Show; Timer1.Enabled := FALSE; end else Timer1.Interval := 10; // The initial time is longer than this (flash showing time) end; end. // Finally, make this the FIRST form created by the application in the project file.
J'ai trouvé un moyen de résoudre ce problème. P>
sur changer
Cela vous permettra de vous former enfant derrière vous forme principale. P> *. DPR code> p>
application.mainformontaskbar: = true; code>
pour
Application.MainformontaskBar: = FALSE; CODE> P>
De la question: "Si je définissais Mainformontaskbar sur False ça marche, mais ..." I>.