La vie

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

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

Avec les applications de bureau (Windows), un message (boîte de dialogue) est utilisé pour alerter l'utilisateur de l'application que des mesures doivent être prises, 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 l'une des routines prédéfinies d'affichage de messages fournies dans la RTL, telles que ShowMessage ou InputBox. ou vous pouvez créer votre propre boîte de dialogue (à réutiliser): CreateMessageDialog.

Un problème commun à 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 être capable de: afficher une boîte de message supérieure modale système même lorsque votre application n'est pas active.

Boîte de message système la plus en haut modale

Même si cela peut paraître compliqué, en réalité ce n’est vraiment pas le cas.

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

Défini dans l'unité "windows.pas" - celui inclus par défaut dans la clause uses de chaque formulaire Delphi, le Messagerie function 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 la MessageBox est déclarée:

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 un descripteur de boîte de dialogue comme hWnd paramètre.

le lpText et lpCaption spécifiez la légende et le texte du message à afficher dans la boîte de message.

Le dernier est le uType paramètre 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 différents indicateurs.

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

Jetons un coup d'oeil à un exemple de création d'une boîte de message système topale modale. Vous allez gérer le message Windows envoyé à toutes les applications en cours lorsque la date / l'heure système change (par exemple, à l'aide de l'applet "Propriétés de la date et de l'heure" du panneau de configuration.

La fonction MessageBox sera appelée comme:

Windows.MessageBox (

manipuler,

'Ceci est un message système modal' # 13 # 10 '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. "MB_SYSTEMMODAL ou MB_SETFOREGROUND ou MB_TOPMOST" garantit que la boîte de message est modale par le système, en haut et devient la fenêtre de premier plan.

  • MB_SYSTEMMODAL Cet indicateur garantit que l'utilisateur doit répondre à la boîte de message avant de continuer à travailler dans la fenêtre identifiée par le paramètre hWnd.
  • MB_TOPMOST flag spécifie que la boîte de message doit être placée au-dessus de toutes les fenêtres non supérieures et qu'elle doit rester au-dessus d’elles, même lorsque la fenêtre est désactivée.
  • MB_SETFOREGROUND flag 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, Dialogues, 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 système modal' # 13 # 10 '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 du système. Dès que vous appuyez sur le bouton "Ok" (sur l'applet), la boîte de message système la plus haute du système de votre application inactive s'affiche.