Comment afficher une boîte de message modale du système TopMost avec Delphi

Avec les applications de bureau (Windows), un boîte de dialogue (boîte de dialogue) est utilisé pour alerter l'utilisateur de l'application qu'une action doit être entreprise, qu'une opération a été effectuée ou, en général, pour attirer l'attention des utilisateurs.

Dans Delphi, il existe plusieurs façons d'afficher un message à l'utilisateur. Vous pouvez utiliser n'importe laquelle des routines d'affichage de messages prêtes à l'emploi fournies dans la RTL, comme ShowMessage ou InputBox; ou vous pouvez créer votre propre boîte de dialogue (pour réutilisation): CreateMessageDialog.

Un problème courant avec toutes les boîtes de dialogue ci-dessus est qu'elles exiger que l'application soit active pour être affichée à l'utilisateur. «Actif» fait référence au moment où votre application a le «focus d'entrée».

Si vous voulez vraiment attirer l'attention de l'utilisateur et l'empêcher de faire autre chose, vous devez pouvoir afficher une boîte de message supérieure modale système même lorsque votre application n'est pas active.

Boîte de message en haut du système modal

Même si cela peut sembler compliqué, en réalité ce n'est vraiment pas.

Étant donné que Delphi peut accéder facilement à la plupart des appels d'API Windows, l'exécution de la fonction d'API Windows "MessageBox" fera l'affaire..

Défini dans l'unité "windows.pas" - celle incluse par défaut dans la clause uses de chaque formulaire Delphi, le Messagerie crée, affiche et exploite une boîte de message. La boîte de message contient un message et un titre définis par l'application, ainsi que toute combinaison d'icônes prédéfinies et de boutons-poussoirs.

Voici comment le MessageBox est déclaré:

 une fonction Messagerie(

  hWnd: HWND;
  lpText,
  lpCaption: PAnsiChar;
  uType: Cardinal): entier;

Le premier paramètre, hwnd, est le descripteur de la fenêtre propriétaire de la boîte de message à créer. si vous créez une boîte de message alors qu'une boîte de dialogue est présente, utilisez une poignée pour la boîte de dialogue comme hWnd paramètre.

le lpText et lpCaption spécifier la légende et le texte du message qui s'affiche dans la boîte de message.

Le dernier est le uType et est le plus intéressant. Ce paramètre spécifie le contenu et le comportement de la boîte de dialogue. Ce paramètre peut être une combinaison de divers drapeaux.

Exemple: boîte d'avertissement modale du système lorsque la date / l'heure du système change

Jetons un coup d'œil à un exemple de création d'une boîte de message supérieure modale système. Vous gérerez le message Windows qui est envoyé à toutes les applications en cours d'exécution lorsque la date / heure du système change, par exemple à l'aide de l'applet du panneau de configuration "Propriétés de la date et de l'heure".

La fonction MessageBox sera appelée comme:

   Windows.MessageBox (

     manipuler,

     'Ceci est un message modal système' # 13 # 10'à partir d'une application inactive ',

     'Un message d'une application inactive!',

     MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST ou MB_ICONHAND);

La pièce la plus importante est le dernier paramètre. Le "MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST" garantit que la boîte de message est modale système, en haut et devient la fenêtre de premier plan.

  • MB_SYSTEMMODAL l'indicateur garantit que l'utilisateur doit répondre à la boîte de message avant de poursuivre le travail dans la fenêtre identifiée par le paramètre hWnd.
  • MB_TOPMOST L'indicateur spécifie que la boîte de message doit être placée au-dessus de toutes les fenêtres non supérieures et doit rester au-dessus, même lorsque la fenêtre est désactivée.
  • MB_SETFOREGROUND l'indicateur garantit que la boîte de message devient la fenêtre de premier plan.

Voici l'exemple de code complet (TForm nommé "Form1" défini dans l'unité "unit1"):

 unité Unité 1;

interface

 

 les usages

   Windows, Messages, SysUtils, Variants, Classes,

   Graphiques, contrôles, formulaires, boîtes de dialogue, ExtCtrls;

 

 type

   TForm1 = classe(TForm)

  
privé

     procédure WMTimeChange (var Msg: TMessage); message WM_TIMECHANGE;

  
Publique

     Déclarations publiques

   fin;

var

   Form1: TForm1;

 

 la mise en oeuvre$ R * .dfm

 

 procédure TForm1.WMTimeChange (var Msg: TMessage);

commencer

   Windows.MessageBox (

     manipuler,

     'Ceci est un message modal système' # 13 # 10'à partir d'une application inactive ',

     'Un message d'une application inactive!',

     MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST ou MB_ICONHAND);

fin;

fin.

Essayez d'exécuter cette application simple. Assurez-vous que l'application est réduite ou au moins qu'une autre application est active. Exécutez l'applet "Propriétés de la date et de l'heure" du panneau de configuration et modifiez l'heure système. Dès que vous cliquez sur le bouton "Ok" (sur l'applet), la boîte de message modale la plus élevée du système de votre application inactive s'affiche..