Messagebox avec une api

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 175 fois - Téléchargée 36 fois

Contenu du snippet

Il s'agit de l'api et de quelques constantes pour obtenir le même résultat qu'avec la fonction MsgBox(), ceci permet aux débutant de comprendre quelque chose aux API.

Source / Exemple :


Public Const OKONLY = &H0&
Public Const OKCANCEL = &H1&
Public Const ABORTRETRYIGNORE = &H2&
Public Const YESNOCANCEL = &H3&
Public Const YESNO = &H4&
Public Const CRITICAL = &H10&
Public Const QUESTION = &H20&
Public Const EXCLAMATION = &H30&
Public Const INFORMATION = &H40&

Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Private Sub Form_Load()
rep = MessageBox(Me.hwnd, "Hello, World", "Hello",INFORMATION)
'Ce code affiche un message box
End Sub

Conclusion :


En cas, d'ereur dans le code merci de me prévenir sans m'envoyer des millions de messages horribles et en plus inutiles!
Je vous invite à visiter mon site sur l'informatique : www.passionpc.net
Si ca certaine personne sont interresée par les API et le réseaux, un tutorial Sur les API Winsock se trouve sur mon site Web :
http://membres.lycos.fr/vbasicsite/ApiWinsock.htm

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
samedi 16 janvier 2010
Statut
Membre
Dernière intervention
17 octobre 2012

Bonjour,
J'aimerai modifier le contenu d'un msgbox suivant la langue choisie.
Dans le projet executable, le message est ----> MsgBox "Pas de base de données", vbCritical, "Francais"
Si la langue est en Anglais, j'aimerai avoir le message suivant ---> MsgBox "No database", vbCritical, "French"
et tout ceci en passant par un fichier.
Les objects dans le mode Controls sont déjà modifier suivant la langue choisie.
Merci d'avance à Vous
Michel

Email : johanmichel_147@hotmail.fr
Messages postés
3
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
22 juin 2005

Je vois que ca lair pationnant mais moi je cherche quelque chose pour enregistrer mes conversations msn jai trouver quelque chose mais cest tres facile cest deja sur msn en tout cas si vous trouver quelque chose de mieux un programme ou quelque chose du genre qui peu pas ce voir que par moi allez viens me dire comment stp
bye bye
merci beaucoup
kitkit
jasoso_14@hotmail.com
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

=> Philippe734

dim window as form
set window = new form1

window.show true 'fenêtre modale

il faut cacher la fenetre modale pour continuer à utiliser le reste du programme
Messages postés
308
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2015
1
ce qui m'interesse, c'est de mettre une form en focus constant, au premier plan. qd une msbox s'ouvre, on ne peut pas cliquer sur une autre fenetre du meme prog, et ca fait beep. et c'est ce que je cherche à faire pour une form, bloquer le focus sur elle, et faire beep qd l'utilisateur clique sur une autre fenetre en arriere plan (du meme prog).

si vous avez pas compris, faite apparaitre la boite de dialogue a propos de votre navigateur internet, et essayé de cliquer ailleur ds la fenetre mère, vous ne pourrez pas et ca fera beep. la boite à propos n'est pas une message box et à le meme comportement et c'est ce que je cherche à faire.

comment faire ?
Messages postés
31
Date d'inscription
mercredi 20 novembre 2002
Statut
Membre
Dernière intervention
9 septembre 2003

Drgn13 a une idee judicieuse car ainsi on peut recreer une fonction qui s'utilise de manière analogue au msgbox de VB.
J'irais meme plus loin car l'API MessageBoxIndirect permet de reproduire quasi-complètement le comportement de msgbox.
> Voici la fonction que j'ai faite avec :
NB: j'ai pas tout testé mais ca doit marcher en gros (à part qq trucs exotiques). On pourrait aller plus loin encore en exploitant les autres membres de MSGBOXPARAMS (props etendues).

Public Function MsgBoxEx(Prompt, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Title, Optional HelpFile, Optional Context, Optional hWnd, Optional BeepType As Integer) As VbMsgBoxResult

Dim tAttr As MSGBOXPARAMS

If BeepType = -1 Then
MessageBeep Buttons
ElseIf BeepType Then
MessageBeep BeepType
End If

'If IsMissing(hWnd) Then hWnd=Me.hwnd

With tAttr
.cbSize = Len(tAttr)
.hwndOwner = CLng(hWnd) ' ou Me.hwnd
'------------------------- prop classiques
.lpszCaption = Title
.lpszText = Prompt
If Not IsMissing(Context) Then .dwContextHelpId = CLng(Context)
.dwStyle = Buttons
'------------------------- prop étendues
.dwLanguageId = (&HC * 1024) Or &H1 '= Fr (marche po ?)
'.lpszIcon = 101 ' id d'une ressource (Icone)
'.hInstance = App.hInstance
.lpfnMsgBoxCallback = 0 ' Adresse d'une fonction
'HelpFile ? à creuser
End With

MsgBoxEx MessageBoxIndirect(tAttr) ' ou gmpMsgBoxMessageBox(hWnd, Prompt, Title, ButtonsAndIcon)

End Function

pas besoin d'utiliser les constantes d'API du genre MB_ICONEXCLAMATION, MB_OKCANCEL..., ... car les constantes de VbMsgBoxStyle sont visiblement les même.

L'argument beep permet soit d'associer le beep qui va avec les icones/boutons (critical+yes/cancel }=> son du genre "t'a comme un ptit pb") ou d'y mettre directement le son qu'on veut. (vbInformation, ...)


Ca paraitr pas super-utile à 1ere vue, mais ca permet :
- de standardiser les msgbox ds tout un logiciel
- de resoudre les pb avec Excel notamment : les messagebox de Excel ne peuvent se liberer du logiciel et on doit souvent cliquer sur excel pour les afficher ensuite (excel clignote ds la barre des taches)
- avec hWnd, e lancer un msgbox à l'intérieur d'une application exterieure (magik!). Avec vbApplicationModal c'est radical.


' -------- DECLARATIONS ----------------------------------
Type MSGBOXPARAMS
cbSize As Long
hwndOwner As Long
hInstance As Long
lpszText As String
lpszCaption As String
dwStyle As Long
lpszIcon As String
dwContextHelpId As Long
lpfnMsgBoxCallback As Long
dwLanguageId As Long
End Type

Declare Function MessageBoxIndirect Lib "user32" Alias "MessageBoxIndirectA" (lpMsgBoxParams As MSGBOXPARAMS) As Long
Public Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As Long



'grossen infos : http://www.vbapihelpline.de/ref/funca.php4?Func=MessageBoxIndirect&Letter=m (gut deutsch site -ich verstehe nix!-)
'http://www.mentalis.org/apilist/MessageBoxIndirect.shtml (pas du chinois mais incomplet)
Afficher les 16 commentaires

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.