Bonjour à tous.
Je voudrais faire partager l'utilisation d'un message dialogue.
Le probleme étant de pouvoir paramétrer le caption des boutons, le caption de la fenetre, le texte et l'icon et pour terminer récupérer l'action du choix de l'user.
A déclarer dans un simple fichier PAS sans form
Déclaration des variables qui seront donc globales et accessibles dans le projet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Type //Enumération qui permet de prévoir si il y aura 1, 2 ou 3 bouttons dans la messagebox le choix Mb_OK ou autre est totalement arbitraire enumTypeHackBox= ( Ok=MB_OK, Oui_Non=MB_YESNO, Oui_Non_Annuler=MB_YESNOCANCEL ); .. end;
Maintenant votre form, déclarer dans la partie private de la form
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var CaptionHackbox, MessageHackBox: String; HackboxCaptionBtn1,HackboxCaptionBtn2,HackboxCaptionBtn3: String; TypeHackBox: enumTypeHackBox;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // ... private { Private declarations } procedure WMHackBox(var message: TMessage); message WM_USER + 600;
Toujours dans la form
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 procedure TForm1.WMHackBox(var message: TMessage); var h: HWND; begin // La Boite de dialogue est show on récupèere son Handle h := FindWindow(WC_DIALOG,PAnsiChar(CaptionHackbox)); // Si la fenêtre est la Message Box on la modifie if GetParent(h) = Application.Handle then begin Case TypeHackBox of Ok:SetDlgItemText(h, ID_OK, PansiChar(HackboxCaptionBtn1)); // On change le text bouton Oui_Non: Begin SetDlgItemText(h, ID_YES, PansiChar(HackboxCaptionBtn1)); // On change le text premier bouton SetDlgItemText(h, ID_NO, Pansichar(HackboxCaptionBtn2)); // On change le text deuxième bouton end; Oui_Non_Annuler: Begin SetDlgItemText(h, ID_YES, PansiChar(HackboxCaptionBtn1)); // On change le text premier bouton SetDlgItemText(h, ID_NO, Pansichar(HackboxCaptionBtn2)); // On change le text deuxième bouton SetDlgItemText(h, ID_CANCEL, PansiChar(HackboxCaptionBtn3)); // On change le text troisieme bouton end; end; end; end;
Utilisation dans la form (exemple avec 2 choix)
Toutes améliorations est la bienvenue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 procedure .... Begin // On publie notre message personnalisé (j'ai mis + 600 arbitrairement) PostMessage(Handle, WM_USER + 600, 0, 0); CaptionHackbox := 'Confirmation'; MessageHackBox := 'Merci de votre choix'; TypeHackBox := Oui_Non; // Il y aura 2 choix HackboxCaptionBtn1 := 'Enregistrer'; // Première choix HackboxCaptionBtn2 := 'Ne pas enregistrer'; // Deuxième choix // On appel la boite de dialogue avec un iconquestion (il y en a plein d'autre) // et on test le résult du choix boutton // 6 = Oui et donc le premier choix if Application.MessageBox( PAnsiChar(MessageHackBox), PAnsiChar(CaptionHackbox), MB_YESNO or MB_ICONQUESTION) = 6 Then Begin // premier boutton end else Begin //deuxième boutton end; //... end;
Pour info : Ici j'ai choisi de mettre en variable global dans un fichier pas, les divers captions, car l'interet c'est d'utiliser plusieur fois ce schéma dans la même form ou dans une autre form du même projet.
Maintenant je ne m'embete plus aves les messagebox...
Partager