MessageBox sans Beep [Résolu]

Messages postés
36
Date d'inscription
jeudi 23 novembre 2000
Dernière intervention
27 juillet 2013
- - Dernière réponse : khawarizm
Messages postés
121
Date d'inscription
mercredi 22 novembre 2000
Dernière intervention
4 août 2010
- 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
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
41
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 115 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
Messages postés
121
Date d'inscription
mercredi 22 novembre 2000
Dernière intervention
4 août 2010
1
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
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
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
12
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
Messages postés
121
Date d'inscription
mercredi 22 novembre 2000
Dernière intervention
4 août 2010
1
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
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
Messages postés
36
Date d'inscription
jeudi 23 novembre 2000
Dernière intervention
27 juillet 2013
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
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
33
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
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
15
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
Messages postés
36
Date d'inscription
jeudi 23 novembre 2000
Dernière intervention
27 juillet 2013
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
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
15
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
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
1
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
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
41
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
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
15
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
Messages postés
36
Date d'inscription
jeudi 23 novembre 2000
Dernière intervention
27 juillet 2013
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
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
41
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
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
1
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
Messages postés
121
Date d'inscription
mercredi 22 novembre 2000
Dernière intervention
4 août 2010
1
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.