MessageBox sans Beep [Résolu]

ytillang30400 36 Messages postés jeudi 23 novembre 2000Date d'inscription 27 juillet 2013 Dernière intervention - 8 sept. 2007 à 19:23 - Dernière réponse : khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention
- 10 sept. 2007 à 18:24
Bonjour. Quelqu'un saurait-il comment afficher un MessageBox sans beep sonore (avec le son allumé) ? Pas un ShowMessage ni un MessageDlg. Merci d'avance.
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Cirec 4229 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 9 sept. 2007 à 19:32
3
Merci
"

Apparemment, personne ne sait.."

Mais si ... mais si

Voici le code magique

procedure Tfrm_Main.Button1Click(Sender: TObject);
Const
   ico_Warning = MakeIntResource(101);
   ico_Confirmation = MakeIntResource(102);
   ico_Error = MakeIntResource(103);
   ico_Information = MakeIntResource(104);
Var hRes       : THandle;
    eVar       : Array[1..512] of Char;
    MBParams   : TMsgBoxParams;
Begin
  ExpandEnvironmentStrings(PChar('%SystemRoot%\system32\user32.dll'),@eVar,512);
  hRes := LoadLibrary(Pchar(@eVar));
  If hRes > 0 Then Try
    With MBParams do
    Begin
      cbSize             := SizeOf(MBParams);
      hwndOwner          := Application.MainForm.Handle;
      hInstance          := hRes;
      lpszIcon           := ico_Information;    
      lpszText           := pchar('');
      lpszCaption        := PChar('MessageBox sans son');
      dwStyle            := MB_USERICON or MB_YESNOCANCEL;
      dwContextHelpId    := 0;
      lpfnMsgBoxCallback := nil;
      dwLanguageId       := LANG_NEUTRAL;
    End;
    Case Integer(MessageBoxIndirect(MBParams)) Of
      IDYES      :;
      IDNo       :;
      IDCancel   :;
    End;
  Finally
    FreeLibrary(hRes);
  End;
End;

 
@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de Cirec
khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 8 sept. 2007 à 21:40
0
Merci
Essaies de trouver quelque chose avec ça



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Var



  Registre : TRegistry;


begin



  
  Registre:=TRegistry.Create;


Registre.RootKey:= HKEY_CURRENT_USER;


Registre.OpenKey('\Control Panel\Sound\',True);



      Registre.WriteString('Beep','no'); // affecter ‘no’ au champ "Beep"  



  Registre.WriteString('ExtendedSounds','no'); // affecter ‘no’ au champ  "ExtendedSounds"


Registre.CloseKey;



  Registre.Free;



 





 application.MessageBox('Message...... !', 'ATTENTION', MB_ICONEXCLAMATION + MB_OK);



  end;
Commenter la réponse de khawarizm
Utilisateur anonyme - 8 sept. 2007 à 22:22
0
Merci
@[auteurdetail.aspx?ID=558806 ytillang30400] 
: Ne fait pas ce code.

@[auteurdetail.aspx?ID=553963 khawarizm]
: Merci de ne pas donner de code foutant le chaniter inutilement dans la base de registre sans donner la procédure inverse.
Commenter la réponse de Utilisateur anonyme
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 8 sept. 2007 à 22:51
0
Merci
ça ?

Désactiver:
procedure TForm1.Button1Click(Sender: TObject);
begin
SystemParametersInfo(SPI_SETBEEP,0,NIL,SPIF_SENDWININICHANGE);
end;


Activer:
procedure TForm1.Button2Click(Sender: TObject);
begin
SystemParametersInfo(SPI_SETBEEP,1,NIL,SPIF_SENDWININICHANGE);
end;
Commenter la réponse de JulioDelphi
khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 8 sept. 2007 à 23:28
0
Merci
Effectivement,  Francky 23012301 à raison , faire des changements dans la base de registre juste pour désactiver le Beep n’était pas une bonne idée mais mon excuse est de ne pas connaître une autre solution et j’assure ytillang30400 que s’été de bonne intention, désolé,   je promet de ne plus essayer de donner de solution avant de m’assurer quelle est la bonne .



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Désolé .   faute de débutant !
Commenter la réponse de khawarizm
Utilisateur anonyme - 9 sept. 2007 à 00:00
0
Merci
On sait bien que c'était de bonne intention : fallait juste penser à donner la technique pour réactiver le beep. Mais c'est vrai la méthode de JulioDelphi est nickel
Commenter la réponse de Utilisateur anonyme
ytillang30400 36 Messages postés jeudi 23 novembre 2000Date d'inscription 27 juillet 2013 Dernière intervention - 9 sept. 2007 à 02:05
0
Merci
Merci les gars.
Apparemment ça ne marche pas. Je suis sur XP.

J'ai essayé les deux techniques (Base de registre et celle ci-dessous) , mais j'ai toujours les beeps (sauf pour le Warning)
// Désactiver
SystemParametersInfo(SPI_SETBEEP,0,NIL,SPIF_SENDWININICHANGE);
// Info
Application.MessageBox(PChar('Hello'),PChar('Mon message'),64);
// Warning
Application.MessageBox(PChar('Attention !'),PChar('Mon message'),48);
// Erreur
Application.MessageBox(PChar('Erreur'),PChar('Mon message'),16);
// Question
Application.MessageBox(PChar('Pourquoi ?'),PChar('Mon message'),32);
// Activer
SystemParametersInfo(SPI_SETBEEP,1,NIL,SPIF_SENDWININICHANGE);
Commenter la réponse de ytillang30400
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 9 sept. 2007 à 02:48
0
Merci
fait comme tout le monde, désactive les sons systeme.

c'est chiant d'avoir des "Pling" ou des "Ploung" a chaque message (surtout quand on code sous delphi les boite d'erreur sont frequente), des "Skruitch" a chaque "vider la corbeille", des "Shiii" et des "Baaaa" a chaque minimize ou maximize, des "Puee Puee" a chaque mauvaise action et enfin des "Bligabaduuuu" a la con et des "uuuudabagilB" a chaque demarrage/arret du systeme.

le sons systeme c'est nul. ça sert a rien, parce qu'aprés 6H de prog les sons persistes une fois couché.
Commenter la réponse de f0xi
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 9 sept. 2007 à 11:39
0
Merci
Oui foxi, mais la question était plutôt comment empécher "le beep"
à l'exécution..

Bon, ben j'en ai trouvé deux qui ne déclenchent pas de beep :

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.MESSAGEBOX('TEST', 'Arrêt immédiat', MB_OK + MB_ICONMASK);
end;

ou

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.MESSAGEBOX('TEST', 'Arrêt immédiat', MB_OK + MB_ICONQUESTION );
end;


il y en a peut-être d'autres..Evidemment il faut que les icones affichés correspondent au besoin en cours..
Commenter la réponse de cs_cantador
ytillang30400 36 Messages postés jeudi 23 novembre 2000Date d'inscription 27 juillet 2013 Dernière intervention - 9 sept. 2007 à 15:17
0
Merci
Si j'ai bien compris, en résumé, il n'y a pas de problème avec le MessageBox de type "Question", pour les autres on se passe maheureusement de l'icone (ou on fait un ShowMessage si on n'a pas besoin de caption personnalisé). Dommage que la fonction "SystemParametersInfo" et l'intervention dans le registre ne change rien sur XP (en tout cas sur le mien). C'est bizzare car on retrouve partout cette fonction sur les forums (y compris récents)
Commenter la réponse de ytillang30400
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 9 sept. 2007 à 18:58
0
Merci
Apparemment, personne ne sait..
Mais, si les sons sont pertubants lors du codage, ils peuvent être néanmoins sources
d'attention vis à vis de l'utilisateur..
Il faut jouer avec les deux : L'image et le son.
C'est l'essentiel aujourd'hui..

cantador
Commenter la réponse de cs_cantador
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 9 sept. 2007 à 20:17
0
Merci
Bonsoir à toutes et à tous,

@ Ytillang30400, le code de khawarizm est correct, il suffit de faire l'inverse pour rétablir l'ordre :

Désactiver :uses registry;
Var<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

  Registre : TRegistry;

begin

     Registre:=TRegistry.Create;

Registre.RootKey:= HKEY_CURRENT_USER;

Registre.OpenKey('\Control Panel\Sound\',True);

      Registre.WriteString('Beep','no'); 
  Registre.WriteString('ExtendedSounds','no');
Registre.CloseKey;

  Registre.Free;

Activer :

uses registry;

Var

  Registre : TRegistry;

begin

     Registre:=TRegistry.Create;

Registre.RootKey:= HKEY_CURRENT_USER;

Registre.OpenKey('\Control Panel\Sound\',True);

      Registre.WriteString('Beep','yes'); 
  Registre.WriteString('ExtendedSounds','yes');
Registre.CloseKey;

  Registre.Free;

La seule condition c'est qu'après il faut fermer la session en cours (Démarrer, fermer la session puis à nouveau fermer la session).

Et les sons système sont désactivés.

@ Cirec, c'est nettement plus professionnel.

@+ ,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
Cirec 4229 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 9 sept. 2007 à 20:48
0
Merci
Petite précision :

ceci fonctionne également :
  MessageBox(Handle, 'Texte', 'Titre', MB_USERICON or MB_YESNOCANCEL);

Mais aucune icone n'est disponible dans cette version contrairement a
l'autre code qui permet d'y mettre l'icone de son choix

 
@+
Cirec

Commenter la réponse de Cirec
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 9 sept. 2007 à 22:50
0
Merci
j'avais parié l'apéro que cirec allait venir donner un coup de main..
gagné !

cantador
Commenter la réponse de cs_cantador
ytillang30400 36 Messages postés jeudi 23 novembre 2000Date d'inscription 27 juillet 2013 Dernière intervention - 10 sept. 2007 à 00:53
0
Merci
cincap, le code de khawarizm (base de registre) ne fonctionne pas chez moi (XP).
Le code de cirec me semble le mieux correspondre à ma recherche. Dans tous les cas, merci à tous.
Commenter la réponse de ytillang30400
Cirec 4229 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 10 sept. 2007 à 01:02
0
Merci
Précision de dernière minute :

pour l'utilisation de MessageBox (sans Icône)
afin de récuperer la place laissé par l'icône pour le texte il faut ajouter ceci :
  MessageBox(Handle, 'Texte', 'Titre', MB_ICONERRORor MB_USERICON or MB_YESNOCANCEL);
 
@+
Cirec

Commenter la réponse de Cirec
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 10 sept. 2007 à 08:21
0
Merci
Bonjour à toutes et à tous,

@ Ytillang30400, désolé de te contredire, mais j'avais posté mon message après un essai naturellement.

Je suis sur Xp pack2 et le code de khawarizm fonctionne correctement.

La seule condition c'est qu'après il faut fermer la session en cours (Démarrer, fermer la session puis à nouveau fermer la session).

Et les sons système sont désactivés.

Sans quoi, je n'aurai pas posté ce message.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
khawarizm 121 Messages postés mercredi 22 novembre 2000Date d'inscription 4 août 2010 Dernière intervention - 10 sept. 2007 à 18:24
0
Merci
Salut tout le monde, premièrement : je suis entièrement d accord avec cincap,

Cirec à présenté un code intéressant et professionnel ( c’est pas facile mais il à le mérite de nous pousser à s’améliorer ) mais, je confirme le code qui intervient sur le registre fonctionne aussi.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






 







 
La  condition :







 c'est qu'après Execution de l’application et sans mettre le code qui active les sons il faut fermer la session en cours (Démarrer, fermer la session puis à nouveau fermer la session).
Et les sons système sont désactivés.

 (Je suis sur Xp

).
Commenter la réponse de khawarizm

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.