>

사용자가 기본 양식에서X를 클릭하면 양식이 닫히지 않고 숨겨지기를 원합니다.OnClose양식 이벤트 :

와이즈 비즈

하나의 양식으로 빈 응용 프로그램에서 테스트하는 경우 :

Use OnClose to perform special processing when the form closes. The OnClose event specifies which event handler to call when a form is about to close. The handler specified by OnClose might, for example, test to make sure all fields in a data-entry form have valid contents before allowing the form to close.

A form is closed by the Close method or when the user chooses Close from the form's system menu.

The TCloseEvent type points to a method that handles the closing of a form. The value of the Action parameter determines if the form actually closes. These are the possible values of Action:

  • caNone: The form is not allowed to close, so nothing happens.
  • caHide: The form is not closed, but just hidden. Your application can still access a hidden form.
  • caFree: The form is closed and all allocated memory for the form is freed.
  • caMinimize: The form is minimized, rather than closed. This is the default action for MDI child forms.

이제X를 클릭하면 숨기지 않고 양식이 닫히고 응용 프로그램이 종료됩니다 :

...OnClose이벤트의 작업처럼 들립니다 ...

보너스 독서

Vcl.Forms.pas

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action := caHide;
end;

보너스 독서
  • 호버링을 최소화하는 방법, 최대화 및 닫기 버튼 동작?
  • 닫기 버튼을 클릭 할 때 닫는 대신 양식 숨기기
  • 모달리스에서 모달 대화 상자를 표시하는 방법 양식?(Windows, WinForms, WPF, MessageBox, TaskDialog, ProgressDialog, SHFileOperation, IFileOperation이 모두 잘못 되었습니까? 아무도 모덜리스 창을 사용하지 않습니까?)
procedure TCustomForm.Close; var CloseAction: TCloseAction; begin if fsModal in FFormState then ModalResult := mrCancel else if CloseQuery then begin if FormStyle = fsMDIChild then if biMinimize in BorderIcons then CloseAction := caMinimize else CloseAction := caNone else CloseAction := caHide; DoClose(CloseAction); if CloseAction <> caNone then begin if Application.MainForm = Self then //Borland doesn't hate developers; it just hates me Application.Terminate else if CloseAction = caHide then Hide else if CloseAction = caMinimize then WindowState := wsMinimized else Release; end; end; end;

  • 답변 # 1

    사용자가 창을 닫으면 WM_CLOSE 를받습니다.   TForm 를 트리거하는 메시지  그 Close() 를 호출  방법 자체. Close() 에게 전화하기  프로젝트의 MainForm 에  항상TCustomForm.Close() 에서 하드 코딩 된 동작이므로 앱을 종료합니다. :

    procedure TCustomForm.Close;
    var
      CloseAction: TCloseAction;
    begin
      if fsModal in FFormState then
        ModalResult := mrCancel
      else
        if CloseQuery then
        begin
          if FormStyle = fsMDIChild then
            if biMinimize in BorderIcons then
              CloseAction := caMinimize else
              CloseAction := caNone
          else
            CloseAction := caHide;
          DoClose(CloseAction);
          if CloseAction <> caNone then
            if Application.MainForm = Self then Application.Terminate // <-- HERE
            else if CloseAction = caHide then Hide
            else if CloseAction = caMinimize then WindowState := wsMinimized
            else Release;
        end;
    end;
    
    

    2 차 TForm 만  객체는 OnClose 의 출력을 존중합니다  핸들러.

    요청한 작업을 수행하려면 다음 중 하나를 수행하십시오.

    핸들 WM_CLOSE  직접 Close() 를 건너 뛰십시오 .

    private
      procedure WMClose(var Message: TMessage); message WM_CLOSE;
    procedure TForm1.WMClose(var Message: TMessage);
    begin
      Hide;
      // DO NOT call inherited ...
    end;
    
    

    메인폼의 OnClose 를 가지고  핸들러 호출 Hide()  직접 caNone 를 반환 :

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Hide;
      Action := caNone;
    end;
    
    

  • 답변 # 2

    와이즈 비즈 시도  행사. 양식을 숨기고 OnCloseQuery 를 설정하십시오.  거짓으로. 잘해야합니다.

    CanClose
    
    
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin Hide; CanClose := False; end;

  • 이전 Angular 2 - 각도 2 - * ngif가없는 5 개의 애니메이션
  • 다음 php - '범위 밖의 오프셋'이란 무엇이며 '할당 된 문자열의 첫 문자 만 사용되는 경우'는 무엇입니까?