문제

MessageBox (핸들, '정말 종료하고 싶니?', '확실합니까?', 1);

이 버튼에는 사용자가 할 수있는 두 가지가 있습니다. 좋아, 취소. 취소를 누를 때 버튼이 "OK"에서 프로그램을 닫고 대화 상자를 종료한다는 코드는 무엇입니까?

도움이 되었습니까?

해결책

Delphi는 메시지 상자를 보여주는 더 나은 솔루션을 제공합니다. MessagedLG 함수를 사용해야합니다. MessagedLG (및 MessageBox) 함수의 반환 값은 사용자 선택을 나타냅니다. 따라서 MessagedLG에 예 버튼을 놓으면 사용자가 예 버튼을 누르면 반환 값이 섞입니다. 따라서 코드는 다음과 같습니다.

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 이벤트를 구현할 수 있습니다. MainForm을 닫으려고 할 때 CloseQuery 이벤트가 실행되며 (CloseButton을 클릭하는 것과 같은) 변수 Canclose가 있습니다. canclose를 true로 설정하면 mainform이 닫아도 괜찮다는 것을 의미합니다. false로 설정하면 MainForm이 닫히지 못하게됩니다.

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

다른 팁

먼저 메시지 상자의 버튼이 텍스트와 일치하는지 확인하십시오. 따라서 텍스트가 "정말 종료하고 싶습니까?"라면. 그런 다음 버튼은 "예"및 "아니오"여야합니다.

둘째, 적절한 상수를 사용하여 코드가 나중에 더 쉽게 읽을 수 있도록하십시오. 그럴 것입니다 :

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 사용자 Inteface 지침 어떤 주:

불필요한 확인은 성가시다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top