본문 바로가기
Delphi Tip/+Tip

프로그램 종료 막기

by MonoSoft 2023. 6. 29.
728x90
반응형

프로그램 종료 막기

728x90

 

 

 

방법 1

 

form의 Event 중 OnCloseQuery라는 이벤트가 있습니다.

프로그램이 종료되기 전에 일어나는 이벤트입니다.

이 이밴트 procedure를 보면 ​

FormCloseQuery(Sender: TObject; var CanClose : Boolean); <------ 이런식으로 선언이 되어 있는데 ​

 

여기서 DEFAULT 로는 Canclose := TRUE 로 되어 있습니다.

만약 종료를 못하게 하고 싶다면 CanClose := FALSE로 설정 하시면 됩니다.

EX> 1. Edit1.Text가 "사과" 종료 하고 다른 것이면 종료를 못하게 하자 ​

 

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

  if Edit1.Text = '사과' then

    CanClose := FALSE

  else

    Canclose := FALSE;

end;

이런식으로 코딩을 하면 됩니다.

 

방법2​

 

폼의 OnClose 이벤트를 이용하는 것입니다.​

이것은 단순히 ALT+F4만을 막는 것이 아니라 폼을 닫으려는 어떤 시도도 통하지 않습니다.

 

OnClose 이벤트 핸들러의 Action 파라미터에 어떤 값을 넣느냐에 따라 다릅니다.

Action := caNone - 폼은 절대 닫히지 않는다.

Action := caHidden - 폼은 화면에서 사라지지만 억세스 가능한채로 남아있다.

Action := caFree - 폼은 화면에서 사라지고 메모리에서도 완전히 제거된다.

Action := caMinimize - 폼이 최소화 되어 아이코닉한 형태로 변한다.

예를들어 OnClose 이벤트에 다음과 같이 넣어주면 CloseQuery의 역할을 대신합니다.

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  if MessageDlg('Close application ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then

    Action := caFree

  else

    Action := caNone;

end;

 

 

다른 방법을 이용하더라도 종료시키는 방법은 있습니다.

바로 강력한 키보드인 CTRL+ALT+DEL키입니다.

그래서 마지막으로 이것을 중지 시켜놓아야합니다.

방법은

 

var

  B: LongInt;

begin

  SystemParametersInfo(97, word (True), @B, 0); // Disabled;

end;


해제할려면 True대신에 False를 사용하면 가능합니다.

 

 

 

 

728x90
반응형

'Delphi Tip > +Tip' 카테고리의 다른 글

가변 데이터의 저장 기법  (0) 2023.07.10
컨트롤의 Enter 처리  (0) 2023.07.04
메모 프린터 기타  (0) 2022.06.29
델파이 엑셀(Excel) 수식 포함 저장하기  (0) 2022.04.18
MessageBox와 MessageDlg의 차이점  (0) 2022.04.15

댓글