MESSAGEBOX AVEC UNE API

Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 - 21 mai 2003 à 17:25
cs_michel67650 Messages postés 3 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 17 octobre 2012 - 27 août 2011 à 17:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/7176-messagebox-avec-une-api

cs_michel67650 Messages postés 3 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 17 octobre 2012
27 août 2011 à 17:48
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
cs_kitkit Messages postés 3 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 22 juin 2005
22 juin 2005 à 00:31
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
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
9 sept. 2004 à 17:32
=> 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
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
9 sept. 2004 à 17:18
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 ?
luko007 Messages postés 31 Date d'inscription mercredi 20 novembre 2002 Statut Membre Dernière intervention 9 septembre 2003
4 févr. 2004 à 13:41
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)
vincentescalade Messages postés 87 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 9 juin 2005
29 août 2003 à 13:53
Salut a tous jsuis débutant et je voudrais savoir qu'est ce que et à quoi servent les constantes ????
Drgn13 Messages postés 86 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 26 mars 2007
29 juin 2003 à 19:29
je viens de voir cette source et je me suis rappelé que j'avait fait quelque chose du genre en regardant la visionneuse d'api :

'il faut metre ça dans un module:
Public Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As Long

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

Public Function MyMsgBox(Prompt, ButtonsAndIcon As VbMsgBoxStyle, Title, Optional Sound As MySounds)
MessageBeep Sound
MessageBox hwnd, Prompt, Title, ButtonsAndIcon
End Function

'et dans la pocédure :
MyMsgBox "Texte", vbCritical, "Texte", vbExclamation

Cela permet par exemple de mettre un icone critical avec un bruit de Exclamation.J'ai WindowsXp et je ne sais plus si les bruit sont différents les uns des autres dans les autres Windows.
Comme dit Alain Proviste c'est pas tres utile...
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
22 mai 2003 à 19:27
c'est pas utile bande de cake, mais c'est interessant
cs_greg13 Messages postés 22 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 10 mars 2005
22 mai 2003 à 18:13
Yoman, tu peux surtout tenir compte du commentaire de Warny
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
22 mai 2003 à 18:08
Je trouve pas sa tres utile...Qu'est-ce que sa fait de plus que msgbox?
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
22 mai 2003 à 10:36
Pour les agnostiques de ce genre de méthode.
Quand vous bidouillez un peu le vb, vous pouvez enlever les références au dll du vb6 et du vb5 (c'est plus facile en vb 5 il suffit de décocher les dll en début de projet, en vb6 il faut carrement aller modifier le fichier vbp avec votre notepad favori)
Mais là, malheur à vous, vous ne disposez plus d'aucune commande sympa (dont le msgbox). D'où la nécessité de le récuperer dans les api.
A ceux qui me demandent : a quoi ça sert de supprimer ces réferences. Je répondrais simplement : A faire des exe et des composants ocx de moins d'1 ko.
cs_greg13 Messages postés 22 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 10 mars 2005
21 mai 2003 à 21:54
Ouais mais je vous rapelle que ca permet d'illustrer l'utilisation des APIs
cs_greg13 Messages postés 22 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 10 mars 2005
21 mai 2003 à 21:54
Ouais mais je vous rapelle que ca permet d'illustrer l'utilisation des APIs
sebleboss2002 Messages postés 189 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 3 avril 2005
21 mai 2003 à 20:42
Pourquoi faire simple quand on peut faire compliqué...
cs_greg13 Messages postés 22 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 10 mars 2005
21 mai 2003 à 19:26
Je pense qu'il y a moyen de balancer les message box sur n'importe qu'elle fenètre qui tourne sur windows à condition de conaitre son handle. Sinon de toute facon lorsqu'on utilise la fonction MSGBOX, on utilise l'API sans le savoir.
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
21 mai 2003 à 17:25
Peux-tu expliquer si c'est mieux que le MSGBOX ?