2016-12-09 30 views
5

がありません。MessageDlgは、私は以下のコードを持っている音

  • Styleを選択したときに音がないのはなぜですか?

  • どうすれば修正できますか?

注:私はデルファイ10シアトルに取り組んでいます。

更新:

は、私は彼の答えに示唆MessageBeep(MB_ICONQUESTION);David Heffernanと試みるが、それはまた音を発していません。

答えて

3

あなたのWindowsバージョンに依存し、デビッドの答えを補完するために、現在アクティブなスタイルと他の人がMessageDlg機能はカスタムTFormはを使用するか、これがラッパーである(TTaskDialogクラスを使用して実装されているチェックWindows Task Dialogの場合)。回避策として、TTaskDialogクラスを直接使用して、Vcl.Styles.Hooksユニットをプロジェクトに追加して、そのような種類のダイアログをスタイルすることができます。

uses 
    Vcl.Styles.Hooks; 

procedure TForm56.Button1Click(Sender: TObject); 
var 
LTaskDialog : TTaskDialog; 
begin 
    LTaskDialog := TTaskDialog.Create(Self); 
    try 
    LTaskDialog.Caption := 'Confirm'; 
    LTaskDialog.Text := 'Delete ?'; 
    LTaskDialog.CommonButtons := [tcbYes, tcbNo]; 
    LTaskDialog.MainIcon := tdiInformation; 
    if LTaskDialog.Execute then 
     if LTaskDialog.ModalResult = mrYes then 
     begin 


     end; 
    finally 
    LTaskDialog.Free; 
    end; 
4

Windowsスタイルを使用すると、メッセージダイアログは、Windowsのメッセージダイアログ機能の1つによって実装されます。これらは、ダイアログのタイプに一致する標準のシステムサウンドを出力します。

VCLスタイルを使用すると、VCLコードによってダイアログが表示されます。そして、システム音を出さないことを選択します。これは、VCLスタイルでは不正確に実装される多くの詳細のほんの1つです。 VCLスタイルを使用しているときに標準動作を複製する場合は、MessageBeepへの適切な呼び出しを追加する必要があります。

+0

'のMessageBeep(MB_ICONQUESTION);'音を発するが、 'のMessageBeep(;'私は 'のWindows 7'を使用して、私のために働いていないことを、'のMessageBeep(MB_ICONWARNING)だ標準システムサウンド – Sami

+0

を排出しませんMB_ICONQUESTION);いいえ – Sami

+2

Erm、あなたはどの値を渡すべきかわからない。私はあなたがあなたの音で遊ぶべきであり、あなたがそれを区別できるようにそれらを設定するべきだと思います。 VCLスタイルがオフのときにどのサウンドが放出されているかを確認し、そのサウンドを複製する値を渡します。とにかく、ここからそれを取ることができると確信しています。 –

関連する問題