Chromium 웹브라우저를 임베딩한 VCL Form의 Closeing 절차
개요
TChromium 또는 TCEFWindowParent가 올려진 TForm에 대해 다음 절차로 Closeing 처리를 해 주어야 함
처리방법
폼에 전역변수 선언
FCanClose : boolean; // TChromium.OnBeforeClosed 에서 TRUE로 세팅
FClosing : boolean; // TForm.OnClose에서 TRUE로 세팅
1. TForm.OnCloseQuery 이벤트 핸들러에서 폼이 Closing되기 전에 Chromium.CloseBrowser(true)를 호출하고 CanClose=false로 처리하여 TChromium이 해제되기 전에 폼이 해제 되는 것을 방지
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := FCanClose; if not(FClosing) then begin FClosing := True; Visible := False; Chromium1.CloseBrowser(True); end; end;
2. Chromium.OnClose 이벤트 핸들러에서 TCEFCEFWindowParent.Free 호출하고, TChromium.OnBeforeClose를 발생 시킴
procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY; ... procedure TForm1.BrowserDestroyMsg(var aMessage : TMessage); begin CEFWindowParent1.Free; end; ... procedure TForm1.Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction); begin PostMessage(Handle, CEF_DESTROY, 0, 0); aAction := cbaDelay; end;
3. TChromium.OnBeforeClose 이벤트 핸들러에서 TForm에게 WM_CLOSE 메시지 또는 Form.Close 재호출 처리
procedure TForm1.Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); begin FCanClose := True; PostMessage(Handle, WM_CLOSE, 0, 0); end;
'프로그래밍 > Chromium(CEF4Delphi)' 카테고리의 다른 글
[Chromium] CEF4Delphi - 자바스크립트 실행 / 웹페이지 편집 모드 (0) | 2019.09.18 |
---|---|
[Chromium] CEF4Delphi - 크롬웹브라우저에 키보드/마우스 이벤트 전달하기 (1) | 2019.09.17 |
[Chromium] CEF4Delphi - 크롬브라우저 생성 절차 (0) | 2019.09.16 |
[Chromium] CEF4Delphi 초기화 / 해제 (0) | 2019.09.16 |
[Chromium] CEF4Delphi - 설치 (0) | 2019.09.10 |