2016-12-09 5 views
5

나는 아래의 코드가 다음 StyleWindows 경우는 MessageDlg는하지 않습니다 소리

IF MessageDlg('Delete?',mtConfirmation,[mbYes,mbNo],0) = MrYes THEN 
Begin 
///Do Something; 
End 
Else 
Begin 
///Do Something; 
End; 

MessageDlg 기능은 사운드를 재생,하지만 난 exemple에 대한 Windows 10Style를 변경하는 경우, 다음 소리가 작동하지 않습니다 .

  • Style을 선택하면 왜 소리가 들리지 않습니까?

  • 어떻게 해결할 수 있습니까?

참고 : 나는 델파이 (10) 시애틀에서 일하고 있어요.

업데이트 :

내가 그의 대답에 제안 MessageBeep(MB_ICONQUESTION);David Heffernan으로 노력하지만, 그 역시 소리를 방출하지 않습니다.

답변

3

당신의 윈도우 버전의 따라 다윗의 대답을 보완하기 위해, 현재 활성화 된 스타일과 다른 사람은 는 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 메시지 대화 상자 기능 중 하나에 의해 구현됩니다. 대화 상자의 유형과 일치하는 표준 시스템 사운드를 방출합니다.

VCL 스타일을 사용하면 VCL 코드가 대화 상자를 담당합니다. 그리고 시스템 사운드를 방출하지 않기로 선택합니다. 이것은 VCL 스타일로 부정확하게 구현되는 많은 세부 사항 중 하나 일뿐입니다. VCL 스타일을 사용할 때 표준 동작을 복제하려면 MessageBeep에 대한 적절한 호출을 추가해야합니다.

+0

'MessageBeep (MB_ICONQUESTION),'내가'윈도우 사용 7'과'MessageBeep (MB_ICONWARNING) 나를 위해 작동하지 않는 것으로하고있어 표준 시스템 사운드 – Sami

+0

을 방출하지 않으며, '소리를 방출하지만'MessageBeep (MB_ICONQUESTION);'No – Sami

+2

Erm, 이제는 어떤 값을 전달해야하는지 모르겠습니다. 나는 당신이 당신의 소리를 가지고 놀아야하고 그 사이에 구별 할 수 있도록 그들을 설정해야한다고 생각합니다. VCL 스타일이 꺼져있을 때 어떤 사운드가 방출되는지 확인한 다음 해당 사운드를 복제하는 값을 전달하십시오. 어쨌든, 네가 여기에서 가져갈 수있을거야. –