MessageBox sans Beep

Résolu
ytillang30400 Messages postés 35 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 27 juillet 2013 - 8 sept. 2007 à 19:23
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre 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.
A voir également:

18 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 sept. 2007 à 19:32
"

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

3
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
8 sept. 2007 à 21:40
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;
0
Utilisateur anonyme
8 sept. 2007 à 22:22
@[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.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
8 sept. 2007 à 22:51
ç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;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
8 sept. 2007 à 23:28
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 !
0
Utilisateur anonyme
9 sept. 2007 à 00:00
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
0
ytillang30400 Messages postés 35 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 27 juillet 2013
9 sept. 2007 à 02:05
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);
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
9 sept. 2007 à 02:48
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é.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 sept. 2007 à 11:39
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..
0
ytillang30400 Messages postés 35 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 27 juillet 2013
9 sept. 2007 à 15:17
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)
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 sept. 2007 à 18:58
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
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
9 sept. 2007 à 20:17
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 sept. 2007 à 20:48
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

0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 sept. 2007 à 22:50
j'avais parié l'apéro que cirec allait venir donner un coup de main..
gagné !

cantador
0
ytillang30400 Messages postés 35 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 27 juillet 2013
10 sept. 2007 à 00:53
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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 sept. 2007 à 01:02
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

0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
10 sept. 2007 à 08:21
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
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
10 sept. 2007 à 18:24
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

).
0
Rejoignez-nous