![]() |
Application.Messagebox erzeugt Standardton
Hallo Delphifreunde!
Kann mir jemand verraten, warum (bzw. wie man das beseitigt bekommt) die Delphianweisung
Delphi-Quellcode:
den Windows-Standardton (bei mir die Voreinstellung "ding.wav") aufruft?
if Application.MessageBox('Eingabeliste komplett leeren?', 'Bestätigungsabfrage', mb_yesno) = id_yes then {blabla}
Die Messagebox wird aufgerufen und zeigt auch das vom Anklicken der jeweiligen Schaltfläche abhängige gewünschte Verhalten. Ich fand dazu leider nichts in den beiden großen Delphiforen. Dank im voraus und Gruß Delphi-Laie |
AW: Application.Messagebox erzeugt Standardton
AFAIK ist das eine generelle Einstellung in den Soundoptionen der Systemsteuerung. Ich wüsste nicht, dass man den Beep gezielt im Einzelfall abstellen könnte und konnte auch auf die Schnelle keine diesbezügliche Aussage finden, geschweige denn irgendwelchen Code.
|
AW: Application.Messagebox erzeugt Standardton
Danke!
Das prinzipiell gleiche Problem und die prinzipiell gleiche Antwort (=Nichtlösung) fand ich zwischenzeitlich auch in einem C++-Forum: ![]() Auch
Delphi-Quellcode:
ändert nichts, erzeugt also das gleiche Ärgernis.
if MessageBox(Application.Handle,'Eingabeliste komplett leeren?', 'Bestätigungsabfrage', mb_yesno)=id_yes then
Was da nur wieder in Windows "rumgemacht" wurde. Als ob Bildschirmbenutzer blind wären. MessageDlg bringt hingegen das gewünschte Ergebnis. War mir aber entfallen. Wenn man nicht täglich mit bestimmten Dingen zu tun hat, ist es nach Monaten aus dem Gedächtnis schon wieder entschwunden, und man kann sich herrlich lang mit solchen Kinkerlitzchen aufhalten. Danke nochmal! |
AW: Application.Messagebox erzeugt Standardton
MessageDlg ist ja auch eine Eigenkreation von Borprisegearcadero, wohingegen MessageBox das API-Original aufruft. Das bedeutet aber auch, dass MessageDlg auf allen Windows-Versionen gleich aussieht, die MessageBox sich dagegen anpasst. Was einem nun lieber ist, sollte jeder für sich entscheiden.
|
AW: Application.Messagebox erzeugt Standardton
Wobei die Töne ja volle Absicht sind. :angle2:
Delphi-Quellcode:
Wer auch bei den FelphiDialogen diese Töne haben will ...
MessageBox(0, 'Normal', 'Caption', MB_OK);
MessageBox(0, 'Error', 'Caption', MB_OK or MB_ICONERROR); MessageBox(0, 'Question', 'Caption', MB_OK or MB_ICONQUESTION); MessageBox(0, 'Warning', 'Caption', MB_OK or MB_ICONWARNING); MessageBox(0, 'Info', 'Caption', MB_OK or MB_ICONINFORMATION); ![]() Wenn du diese Töne nicht magst, dann stell sie in deinem Windows ab, also dort in der Systemsteuerung. |
AW: Application.Messagebox erzeugt Standardton
Zitat:
Und wer diese Benachrichtigung nicht möchte, kann sich das ja wie schon geschrieben ganz nach Wunsch in Windows konfigurieren... |
AW: Application.Messagebox erzeugt Standardton
Abschalten kann man das akustische Signal ja nur komplett und dann für das gesamte Windows. Manchmal mag es jedoch vorteilhaft sein.
Die Borländer werden schon ihren Grund gehabt haben, eine Eigenlösung hinterherzuschieben und dabei auf diese überflüssige Störeinlage zu verzichten. Und deren Eigenkreation wird sicher rege benutzt, und das nicht nur aus Unkenntnis der API-Kapselung, sondern es wird sich ganz bewußt dafür entschieden. |
AW: Application.Messagebox erzeugt Standardton
Der Hauptgrund war aber nicht das Beep, sondern vermutlich die Lokalisierung, denn bei der MessageBox kann man nur schwer die Texte der Buttons anpassen.
MessageDialog basiert intern eben auf der ganz normalen VCL, wie TForm, TLabel, TButton usw. Wenn man auf den etwas tieferen Dialog-Funktionen der VCL ansetzt, dann kan man damit ganz nette Dinge machen, da man vollen Zugriff auf diese Form besitzt. |
AW: Application.Messagebox erzeugt Standardton
Zitat:
Zumindestens unter XP gibt es in der Systemsteuerung Sounds und Audiogeräte, da kann man mehr oder weniger geziehlt auswählen, was beept und was nicht. Gruß K-H |
AW: Application.Messagebox erzeugt Standardton
Jeden Ton einzeln, aber komplett für alle Anwendungen. :wink:
|
AW: Application.Messagebox erzeugt Standardton
Zitat:
Delphi-Quellcode:
//Beep Off
SystemParametersInfo(SPI_SETBEEP, Word(False), nil, 0); if Application.MessageBox('Eingabeliste komplett leeren?', 'Bestätigungsabfrage', mb_yesno) = id_yes then BEGIN END; //Beep On SystemParametersInfo(SPI_SETBEEP, Word(true), nil, 0); |
AW: Application.Messagebox erzeugt Standardton
Ich würde es mir doch sehr verbitten, wenn eine Software an solchen systemweiten Einstellungen herumschraubt. :shock:
|
AW: Application.Messagebox erzeugt Standardton
Man darf natürlich das Einschalten nicht vergessen:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin //Beep On SystemParametersInfo(SPI_SETBEEP, Word(true), nil, 0); end; |
AW: Application.Messagebox erzeugt Standardton
Zitat:
|
AW: Application.Messagebox erzeugt Standardton
Dann muss man freundlicherweise beim Programmstart den Zustand abfragen und bei Close wiederherstellen.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var isON : Integer; begin isON:=0; SystemParametersInfo(SPI_GETBEEP,0,isON,0); Label1.caption:= IntToStr(isON); //0 = off, 1 = on end; |
AW: Application.Messagebox erzeugt Standardton
Aber worin liegt der Sinn? Wenn ich als Anwender einstelle, dass es bei einer Fehlermeldung bimmeln soll, dann hat es gefälligst auch zu bimmeln. Das kann doch wohl nicht davon abhängen, ob es den Entwickler stört.
|
AW: Application.Messagebox erzeugt Standardton
Sich die alten Einstellungenmerken und dann wieder zurückzusetzen macht ja auch keiner, bzw. der Rücksetzcode wird nicht mehr aufgerufen, da die Fehlerbehandlung vergessen wurde.
Oder das coole Wechselklacken bei IE und Explorer. :thumb: Nja, das ist wie zu DOS-Zeiten ... Es kann nur einen geben (gleichzeitig), wobei wir das mit Vollbildmetro ja wieder zurückbekommen. :stupid: Es ist natürlich auch nicht möglich einen eigenen Dialog zu verwenden, wenn man im Programm ein anderes Verhalten benötigt. :roll: Zitat:
Aber in Zeiten von Skinning und Co. ... Seit wann interessieren da den Programmierer die Wünsche der Endanwender? |
AW: Application.Messagebox erzeugt Standardton
Ihr habt wenig Phantasie!
Es gibt Programme, die man im Silent Mode nutzen will, z.B. in der Öffentlichkeit oder nachts, um niemand zu stören. Es gibt auch Taube, die müssen optisch auf etwas Besonderes hingewiesen werden - da nützt das ganze Ploppen und Bimmeln nichts! DENKT NICHT IMMER NUR AN EUCH !!! |
AW: Application.Messagebox erzeugt Standardton
Sicherlich mag es diverse Umstände und Gründe geben, die Töne an- oder abzuschalten. Dennoch ist es eine Systemeinstellung - und das völlig zu Recht, da besagte Gründe sehr wahrscheinlich auf alle installierten Anwendungen passen werden. Diese Einstellung nur für eine einzige Anwenung zu ändern scheint ein extrem spezieller Fall zu sein. Aber dieser Hinweis wurde nun hinreichend oft genannt und der Rest liegt nun beim Entwickler.
P.S. Kein Grund, gleich Großbuchstaben und Fettschrift zu nutzen, auch wenn man noch so sehr widersprechen möchte. |
AW: Application.Messagebox erzeugt Standardton
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz