2009-02-09 8 views
0

messagebox (처리 하시겠습니까? '정말로 종료 하시겠습니까?', '정말입니까?', 1);messagebox에 대한 일반적인 질문

이 버튼에는 사용자가 할 수있는 것이 두 가지 있습니다. 확인하고 취소하십시오. 어떤 코드를 써야합니까? 버튼이 "ok"에서 프로그램을 닫고 취소를 누르면 대화 상자가 끝납니다.

답변

2

델파이는 메시지 상자를 표시하는 데 더 나은 솔루션을 제공합니다. MessageDlg 함수를 사용해야합니다. MessageDlg (및 MessageBox) 함수의 반환 값은 사용자 선택을 나타냅니다. 따라서 MessageDlg에 예 버튼을 배치하면 사용자가 예 버튼을 누르면 반환 값이 mrYes가됩니다. 그래서 당신의 코드는 다음과 같습니다

또한 사용자가 예를 선택하는 경우 응용 프로그램을 닫으려는
var 
    ShouldClose: Boolean; 
begin 
    if MessageDlg('Do you really want to quit?', mtConfirmation, 
     [mbYes, mbNo], 0) = mrYes then 
    ShouldClose := True 
    else 
    ShouldClose := False; 
end; 

. 일반 Delphi VCL 애플리케이션을 사용하는 경우 mainform의 CloseQuery 이벤트를 구현할 수 있습니다. 클로즈 버튼을 클릭하는 것처럼 메인 폼을 닫으려고 할 때 CloseQuery 이벤트가 실행되고 변수 CanClose가 있습니다. CanClose를 True로 설정하면 MainForm이 닫히고 OK이면 false로 설정하면 메인 폼이 닫히지 않습니다.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
begin 
    CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes; 
end; 
+0

MessageDlg는 훌륭하지만 현지화되지 않았습니다. 영어 이외의 프로그램을 작성하고 현지화 할 방법을 사용하지 않는 경우 Application.MessageBox를 사용하는 것이 좋습니다. Application.MessageBox, Windows 대화 상자를 지역화 된 버전으로로드합니다. –

+0

첫 번째 코드를 복사하여 붙여 넣을 때 메시지 상자가 나타납니다. 그러나 아무리 클릭해도 아무런 일도 일어나지 않고 상자가 닫힙니다. 프로그램을 닫을 때 무엇을해야합니까? – Alex

+0

새 Delphi VCL 응용 프로그램이있는 경우 : 버튼을 추가합니다. 처리기에 add : Close; 양식으로 이동하여 이벤트로 이동하고 FormClose 이벤트를 추가하십시오. 이벤트 핸들러를 두 번째 코드 샘플처럼 보이게하십시오. –

3

먼저 메시지 상자의 단추가 텍스트와 일치하는지 확인하십시오. 따라서 텍스트가 "정말로 종료 하시겠습니까?" 단추는 "예"및 "아니오"여야합니다.

둘째, 적절한 상수를 사용하면 나중에 쉽게 읽을 수 있습니다. 그 결과는 다음과 같습니다.

var 
    Res: integer; 

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?', 
    MB_ICONQUESTION or MB_YESNO); 

결과는 IDYES 또는 IDNO가됩니다. 그래서 통화가 기본 폼의 방법 안에 가정, 당신은 그것을 좋아 사용합니다 : 다른 곳에서이 호출하면

if Res = IDYES then 
    Close; 

, 당신은 또한 부를 수

if Res = IDYES then 
    Application.Terminate; 

편집 : 또한 Vista User Inteface Guidelines on dialog boxes을 확인 마십시오있는 상태 :

불필요한 확인서가 성가신

관련 문제