Api :: messageboxindirect

Contenu du snippet

En voulant faire je ne sais quoi, je suis tombé sur cette fonction qui m'a semblé
intéressante dans la mesure où elle propose de faire une boîte de message personnalisé très facilement.

Voici le prototype de la fonction :

MessageBoxIndirect(LPMSGBOXPARAMS lpMsgBoxParams):LongBool;

Et voici la structure des paramètres de la boîte de message :

struct {
UINT cbSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCSTR lpszText;
LPCSTR lpszCaption;
DWORD dwStyle;
LPCSTR lpszIcon;
DWORD dwContextHelpId;
MSGBOXCALLBACK lpfnMsgBoxCallback;
DWORD dwLanguageId;
} MSGBOXPARAMS;

Voici un exemple qui va vous illustrer la manière dont on peut afficher
une boîte de message avec une icône personnalisée.

Source / Exemple :


// Tout d'abord, créer un fichier ressource dans lequel vous allez mettre votre icône préférée et donnez à cette ressource un identifiant numérique (105 par exemple). 
Ensuite, intégrez la directive qui va compiler votre fichier ressource avec l'exécutable :

implementation

{$R *.dfm}
{$R MonIcone.res} // Ce fichier ressource contient l'icône.

// Déclarez un objet de type MsgBoxParams directement dans l'évènement où vous
souhaitez faire apparaître la boîte ou alors, 
dans les variables globales de votre programme, c'est selon votre besoin.

procedure TfrmMain.btTestClick(Sender: TObject);
var aBox: MSGBOXPARAMS;
begin

// Ensuite, vous devez définir les propriétés de notre boîte.

    aBox.cbSize := SizeOf(aBox);
    aBox.hwndOwner := Application.Handle;
    aBox.hInstance := hinstance;
    aBox.lpszText := 'Voilà ma boîte de message avec icône perso :-p';
    aBox.lpszCaption := 'CodeS-SourceS.com';
    aBox.dwStyle := MB_USERICON + MB_YESNO; // Tous les styles connus peuvent être appliqués. Il y'en a d'autres, dont MB_USERICON, qui permet donc de mettre une icône personnalisée.
    aBox.lpszIcon := MakeIntResource(105); // Cette propriété reçoit une chaîne ou l'identifiant numérique de l'icone.
    aBox.dwContextHelpId := 0;
    aBox.lpfnMsgBoxCallback := nil;
    aBox.dwLanguageId := LANG_FRENCH;

// A présent nous devons détecter quel est le bouton pressé, pour ce faire, 
il faut récupérer la valeur cardinale renvoyée par la boîte de message et nous pouvons distinguer :
//bouton OUI = 6 = mrYes
//bouton NON = 7 = mrNo
//bouton OK = 1 = mrOK
//bouton ANNULER = 2 = mrCancel
//bouton ABANDONNER = 3 = mrAbort
//bouton REESSAYER = 4 = mrRetry
//bouton IGNORER = 5 = mrIgnore

    if Cardinal(MessageBoxIndirect(aBox)) = mrYes then
        begin
           .....instructions....
        end;

end;

Conclusion :


Je ne connaissais pas cette fonction et la recherche préalable sur DelphiFR n'a pas donné de résultat la concernant donc j'ai pensé que ça pourrait apprendre quelque chose à quelqu'un, notament l'insertion aisée d'une icône personnelle dans une boîte de message.

Si vous trouvez des erreurs et/ou si vous avez des suggestions, vous savez ce qu'il vous reste à faire.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.