1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-04-17 06:57:13 +02:00

Fixed #130: If the RenderCompHWND has changed the original WndProc of the old window if it still exists must be restored and the new window must be subclassed.

This commit is contained in:
Andreas Hausladen 2019-11-09 14:40:17 +01:00
parent d950813081
commit a4945a236f
2 changed files with 166 additions and 106 deletions

View File

@ -368,14 +368,15 @@ type
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
procedure WndProc(var aMessage: TMessage); procedure WndProc(var aMessage: TMessage);
{$ENDIF}
{$IFNDEF FPC} {$IFNDEF FPC}
procedure CreateStub(const aMethod : TWndMethod; var aStub : Pointer); procedure CreateStub(const aMethod : TWndMethod; var aStub : Pointer);
procedure FreeAndNilStub(var aStub : pointer); procedure FreeAndNilStub(var aStub : pointer);
procedure RestoreCompWndProc(var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc);
procedure BrowserCompWndProc(var aMessage: TMessage); procedure BrowserCompWndProc(var aMessage: TMessage);
procedure WidgetCompWndProc(var aMessage: TMessage); procedure WidgetCompWndProc(var aMessage: TMessage);
procedure RenderCompWndProc(var aMessage: TMessage); procedure RenderCompWndProc(var aMessage: TMessage);
{$ENDIF} {$ENDIF}
{$ENDIF}
procedure DragDropManager_OnDragEnter(Sender: TObject; const aDragData : ICefDragData; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint); procedure DragDropManager_OnDragEnter(Sender: TObject; const aDragData : ICefDragData; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint);
procedure DragDropManager_OnDragOver(Sender: TObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint); procedure DragDropManager_OnDragOver(Sender: TObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint);
@ -1011,27 +1012,17 @@ end;
procedure TChromium.BeforeDestruction; procedure TChromium.BeforeDestruction;
begin begin
{$IFDEF MSWINDOWS}
{$IFNDEF FPC} {$IFNDEF FPC}
if (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc <> nil) then RestoreCompWndProc(FBrowserCompHWND, 0, FOldBrowserCompWndPrc);
begin FreeAndNilStub(FBrowserCompStub);
SetWindowLongPtr(FBrowserCompHWND, GWL_WNDPROC, NativeInt(FOldBrowserCompWndPrc));
FreeAndNilStub(FBrowserCompStub);
FOldBrowserCompWndPrc := nil;
end;
if (FWidgetCompHWND <> 0) and (FOldWidgetCompWndPrc <> nil) then RestoreCompWndProc(FWidgetCompHWND, 0, FOldWidgetCompWndPrc);
begin FreeAndNilStub(FWidgetCompStub);
SetWindowLongPtr(FWidgetCompHWND, GWL_WNDPROC, NativeInt(FOldWidgetCompWndPrc));
FreeAndNilStub(FWidgetCompStub);
FOldWidgetCompWndPrc := nil;
end;
if (FRenderCompHWND <> 0) and (FOldRenderCompWndPrc <> nil) then RestoreCompWndProc(FRenderCompHWND, 0, FOldRenderCompWndPrc);
begin FreeAndNilStub(FRenderCompStub);
SetWindowLongPtr(FRenderCompHWND, GWL_WNDPROC, NativeInt(FOldRenderCompWndPrc)); {$ENDIF}
FreeAndNilStub(FRenderCompStub);
FOldRenderCompWndPrc := nil;
end;
{$ENDIF} {$ENDIF}
DestroyClientHandler; DestroyClientHandler;
@ -1047,6 +1038,7 @@ begin
FBrowserId := 0; FBrowserId := 0;
end; end;
{$IFDEF MSWINDOWS}
{$IFNDEF FPC} {$IFNDEF FPC}
procedure TChromium.CreateStub(const aMethod : TWndMethod; var aStub : Pointer); procedure TChromium.CreateStub(const aMethod : TWndMethod; var aStub : Pointer);
begin begin
@ -1061,6 +1053,17 @@ begin
aStub := nil; aStub := nil;
end; end;
end; end;
procedure TChromium.RestoreCompWndProc(var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc);
begin
if (aOldWnd <> 0) and (aOldWnd <> aNewWnd) and (aProc <> nil) then
begin
SetWindowLongPtr(aOldWnd, GWLP_WNDPROC, NativeInt(aProc));
aProc := nil;
aOldWnd := 0;
end;
end;
{$ENDIF}
{$ENDIF} {$ENDIF}
procedure TChromium.DestroyClientHandler; procedure TChromium.DestroyClientHandler;
@ -3817,7 +3820,6 @@ begin
else aMessage.Result := DefWindowProc(FCompHandle, aMessage.Msg, aMessage.WParam, aMessage.LParam); else aMessage.Result := DefWindowProc(FCompHandle, aMessage.Msg, aMessage.WParam, aMessage.LParam);
end; end;
end; end;
{$ENDIF}
{$IFNDEF FPC} {$IFNDEF FPC}
procedure TChromium.BrowserCompWndProc(var aMessage: TMessage); procedure TChromium.BrowserCompWndProc(var aMessage: TMessage);
@ -3827,17 +3829,22 @@ begin
try try
TempHandled := False; TempHandled := False;
if assigned(FOnBrowserCompMsg) then try
FOnBrowserCompMsg(aMessage, TempHandled); if assigned(FOnBrowserCompMsg) then
FOnBrowserCompMsg(aMessage, TempHandled);
if not(TempHandled) and if not(TempHandled) and
(FOldBrowserCompWndPrc <> nil) and (FOldBrowserCompWndPrc <> nil) and
(FBrowserCompHWND <> 0) then (FBrowserCompHWND <> 0) then
aMessage.Result := CallWindowProc(FOldBrowserCompWndPrc, aMessage.Result := CallWindowProc(FOldBrowserCompWndPrc,
FBrowserCompHWND, FBrowserCompHWND,
aMessage.Msg, aMessage.Msg,
aMessage.wParam, aMessage.wParam,
aMessage.lParam); aMessage.lParam);
finally
if aMessage.Msg = WM_DESTROY then
RestoreCompWndProc(FBrowserCompHWND, 0, FOldBrowserCompWndPrc);
end;
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TChromium.BrowserCompWndProc', e) then raise; if CustomExceptionHandler('TChromium.BrowserCompWndProc', e) then raise;
@ -3851,17 +3858,22 @@ begin
try try
TempHandled := False; TempHandled := False;
if assigned(FOnWidgetCompMsg) then try
FOnWidgetCompMsg(aMessage, TempHandled); if assigned(FOnWidgetCompMsg) then
FOnWidgetCompMsg(aMessage, TempHandled);
if not(TempHandled) and if not(TempHandled) and
(FOldWidgetCompWndPrc <> nil) and (FOldWidgetCompWndPrc <> nil) and
(FWidgetCompHWND <> 0) then (FWidgetCompHWND <> 0) then
aMessage.Result := CallWindowProc(FOldWidgetCompWndPrc, aMessage.Result := CallWindowProc(FOldWidgetCompWndPrc,
FWidgetCompHWND, FWidgetCompHWND,
aMessage.Msg, aMessage.Msg,
aMessage.wParam, aMessage.wParam,
aMessage.lParam); aMessage.lParam);
finally
if aMessage.Msg = WM_DESTROY then
RestoreCompWndProc(FWidgetCompHWND, 0, FOldWidgetCompWndPrc);
end;
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TChromium.WidgetCompWndProc', e) then raise; if CustomExceptionHandler('TChromium.WidgetCompWndProc', e) then raise;
@ -3875,23 +3887,29 @@ begin
try try
TempHandled := False; TempHandled := False;
if assigned(FOnRenderCompMsg) then try
FOnRenderCompMsg(aMessage, TempHandled); if assigned(FOnRenderCompMsg) then
FOnRenderCompMsg(aMessage, TempHandled);
if not(TempHandled) and if not(TempHandled) and
(FOldRenderCompWndPrc <> nil) and (FOldRenderCompWndPrc <> nil) and
(FRenderCompHWND <> 0) then (FRenderCompHWND <> 0) then
aMessage.Result := CallWindowProc(FOldRenderCompWndPrc, aMessage.Result := CallWindowProc(FOldRenderCompWndPrc,
FRenderCompHWND, FRenderCompHWND,
aMessage.Msg, aMessage.Msg,
aMessage.wParam, aMessage.wParam,
aMessage.lParam); aMessage.lParam);
finally
if aMessage.Msg = WM_DESTROY then
RestoreCompWndProc(FRenderCompHWND, 0, FOldRenderCompWndPrc);
end;
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TChromium.RenderCompWndProc', e) then raise; if CustomExceptionHandler('TChromium.RenderCompWndProc', e) then raise;
end; end;
end; end;
{$ENDIF} {$ENDIF}
{$ENDIF}
function TChromium.doOnClose(const browser: ICefBrowser): Boolean; function TChromium.doOnClose(const browser: ICefBrowser): Boolean;
var var
@ -4487,11 +4505,25 @@ begin
end; end;
procedure TChromium.doOnRenderViewReady(const browser: ICefBrowser); procedure TChromium.doOnRenderViewReady(const browser: ICefBrowser);
{$IFDEF MSWINDOWS}
{$IFNDEF FPC}
var
OldBrowserCompHWND, OldWidgetCompHWND, OldRenderCompHWND: THandle;
{$ENDIF}
{$ENDIF}
begin begin
if (browser <> nil) and if (browser <> nil) and
(browser.Host <> nil) and (browser.Host <> nil) and
(browser.Identifier = FBrowserId) then (browser.Identifier = FBrowserId) then
begin begin
{$IFDEF MSWINDOWS}
{$IFNDEF FPC}
OldBrowserCompHWND := FBrowserCompHWND;
OldWidgetCompHWND := FWidgetCompHWND;
OldRenderCompHWND := FRenderCompHWND;
{$ENDIF}
{$ENDIF}
FBrowserCompHWND := browser.Host.WindowHandle; FBrowserCompHWND := browser.Host.WindowHandle;
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
if (FBrowserCompHWND <> 0) then if (FBrowserCompHWND <> 0) then
@ -4499,32 +4531,35 @@ begin
if (FWidgetCompHWND <> 0) then if (FWidgetCompHWND <> 0) then
FRenderCompHWND := FindWindowEx(FWidgetCompHWND, 0, 'Chrome_RenderWidgetHostHWND', 'Chrome Legacy Window'); FRenderCompHWND := FindWindowEx(FWidgetCompHWND, 0, 'Chrome_RenderWidgetHostHWND', 'Chrome Legacy Window');
{$ENDIF}
{$IFNDEF FPC} {$IFNDEF FPC}
RestoreCompWndProc(OldBrowserCompHWND, FBrowserCompHWND, FOldBrowserCompWndPrc);
if assigned(FOnBrowserCompMsg) and (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc = nil) then if assigned(FOnBrowserCompMsg) and (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc = nil) then
begin begin
CreateStub(BrowserCompWndProc, FBrowserCompStub); CreateStub(BrowserCompWndProc, FBrowserCompStub);
FOldBrowserCompWndPrc := TFNWndProc(SetWindowLongPtr(FBrowserCompHWND, FOldBrowserCompWndPrc := TFNWndProc(SetWindowLongPtr(FBrowserCompHWND,
GWL_WNDPROC, GWLP_WNDPROC,
NativeInt(FBrowserCompStub))); NativeInt(FBrowserCompStub)));
end; end;
RestoreCompWndProc(OldWidgetCompHWND, FWidgetCompHWND, FOldWidgetCompWndPrc);
if assigned(FOnWidgetCompMsg) and (FWidgetCompHWND <> 0) and (FOldWidgetCompWndPrc = nil) then if assigned(FOnWidgetCompMsg) and (FWidgetCompHWND <> 0) and (FOldWidgetCompWndPrc = nil) then
begin begin
CreateStub(WidgetCompWndProc, FWidgetCompStub); CreateStub(WidgetCompWndProc, FWidgetCompStub);
FOldWidgetCompWndPrc := TFNWndProc(SetWindowLongPtr(FWidgetCompHWND, FOldWidgetCompWndPrc := TFNWndProc(SetWindowLongPtr(FWidgetCompHWND,
GWL_WNDPROC, GWLP_WNDPROC,
NativeInt(FWidgetCompStub))); NativeInt(FWidgetCompStub)));
end; end;
RestoreCompWndProc(OldRenderCompHWND, FRenderCompHWND, FOldRenderCompWndPrc);
if assigned(FOnRenderCompMsg) and (FRenderCompHWND <> 0) and (FOldRenderCompWndPrc = nil) then if assigned(FOnRenderCompMsg) and (FRenderCompHWND <> 0) and (FOldRenderCompWndPrc = nil) then
begin begin
CreateStub(RenderCompWndProc, FRenderCompStub); CreateStub(RenderCompWndProc, FRenderCompStub);
FOldRenderCompWndPrc := TFNWndProc(SetWindowLongPtr(FRenderCompHWND, FOldRenderCompWndPrc := TFNWndProc(SetWindowLongPtr(FRenderCompHWND,
GWL_WNDPROC, GWLP_WNDPROC,
NativeInt(FRenderCompStub))); NativeInt(FRenderCompStub)));
end; end;
{$ENDIF} {$ENDIF}
{$ENDIF}
end; end;
if Assigned(FOnRenderViewReady) then FOnRenderViewReady(Self, browser); if Assigned(FOnRenderViewReady) then FOnRenderViewReady(Self, browser);

View File

@ -344,6 +344,7 @@ type
procedure InitializeWindowInfo(aParentHandle : HWND; aParentRect : TRect; const aWindowName : ustring); virtual; procedure InitializeWindowInfo(aParentHandle : HWND; aParentRect : TRect; const aWindowName : ustring); virtual;
procedure FreeAndNilStub(var aStub : pointer); procedure FreeAndNilStub(var aStub : pointer);
procedure CreateStub(const aMethod : TWndMethod; var aStub : Pointer); procedure CreateStub(const aMethod : TWndMethod; var aStub : Pointer);
procedure RestoreCompWndProc(var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc);
procedure BrowserCompWndProc(var aMessage: TMessage); procedure BrowserCompWndProc(var aMessage: TMessage);
procedure WidgetCompWndProc(var aMessage: TMessage); procedure WidgetCompWndProc(var aMessage: TMessage);
procedure RenderCompWndProc(var aMessage: TMessage); procedure RenderCompWndProc(var aMessage: TMessage);
@ -947,26 +948,14 @@ end;
procedure TFMXChromium.BeforeDestruction; procedure TFMXChromium.BeforeDestruction;
begin begin
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
if (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc <> nil) then RestoreCompWndProc(FBrowserCompHWND, 0, FOldBrowserCompWndPrc);
begin FreeAndNilStub(FBrowserCompStub);
SetWindowLongPtr(FBrowserCompHWND, GWL_WNDPROC, NativeInt(FOldBrowserCompWndPrc));
FreeAndNilStub(FBrowserCompStub);
FOldBrowserCompWndPrc := nil;
end;
if (FWidgetCompHWND <> 0) and (FOldWidgetCompWndPrc <> nil) then RestoreCompWndProc(FWidgetCompHWND, 0, FOldWidgetCompWndPrc);
begin FreeAndNilStub(FWidgetCompStub);
SetWindowLongPtr(FWidgetCompHWND, GWL_WNDPROC, NativeInt(FOldWidgetCompWndPrc));
FreeAndNilStub(FWidgetCompStub);
FOldWidgetCompWndPrc := nil;
end;
if (FRenderCompHWND <> 0) and (FOldRenderCompWndPrc <> nil) then RestoreCompWndProc(FRenderCompHWND, 0, FOldRenderCompWndPrc);
begin FreeAndNilStub(FRenderCompStub);
SetWindowLongPtr(FRenderCompHWND, GWL_WNDPROC, NativeInt(FOldRenderCompWndPrc));
FreeAndNilStub(FRenderCompStub);
FOldRenderCompWndPrc := nil;
end;
{$ENDIF} {$ENDIF}
DestroyClientHandler; DestroyClientHandler;
@ -4118,12 +4107,20 @@ begin
end; end;
procedure TFMXChromium.doOnRenderViewReady(const browser: ICefBrowser); procedure TFMXChromium.doOnRenderViewReady(const browser: ICefBrowser);
{$IFDEF MSWINDOWS}
var
OldBrowserCompHWND, OldWidgetCompHWND, OldRenderCompHWND: THandle;
{$ENDIF}
begin begin
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
if (browser <> nil) and if (browser <> nil) and
(browser.Host <> nil) and (browser.Host <> nil) and
(browser.Identifier = FBrowserId) then (browser.Identifier = FBrowserId) then
begin begin
OldBrowserCompHWND := FBrowserCompHWND;
OldWidgetCompHWND := FWidgetCompHWND;
OldRenderCompHWND := FRenderCompHWND;
FBrowserCompHWND := browser.Host.WindowHandle; FBrowserCompHWND := browser.Host.WindowHandle;
if (FBrowserCompHWND <> 0) then if (FBrowserCompHWND <> 0) then
@ -4132,27 +4129,30 @@ begin
if (FWidgetCompHWND <> 0) then if (FWidgetCompHWND <> 0) then
FRenderCompHWND := FindWindowEx(FWidgetCompHWND, 0, 'Chrome_RenderWidgetHostHWND', 'Chrome Legacy Window'); FRenderCompHWND := FindWindowEx(FWidgetCompHWND, 0, 'Chrome_RenderWidgetHostHWND', 'Chrome Legacy Window');
RestoreCompWndProc(OldBrowserCompHWND, FBrowserCompHWND, FOldBrowserCompWndPrc);
if assigned(FOnBrowserCompMsg) and (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc = nil) then if assigned(FOnBrowserCompMsg) and (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc = nil) then
begin begin
CreateStub(BrowserCompWndProc, FBrowserCompStub); CreateStub(BrowserCompWndProc, FBrowserCompStub);
FOldBrowserCompWndPrc := TFNWndProc(SetWindowLongPtr(FBrowserCompHWND, FOldBrowserCompWndPrc := TFNWndProc(SetWindowLongPtr(FBrowserCompHWND,
GWL_WNDPROC, GWLP_WNDPROC,
NativeInt(FBrowserCompStub))); NativeInt(FBrowserCompStub)));
end; end;
RestoreCompWndProc(OldWidgetCompHWND, FWidgetCompHWND, FOldWidgetCompWndPrc);
if assigned(FOnWidgetCompMsg) and (FWidgetCompHWND <> 0) and (FOldWidgetCompWndPrc = nil) then if assigned(FOnWidgetCompMsg) and (FWidgetCompHWND <> 0) and (FOldWidgetCompWndPrc = nil) then
begin begin
CreateStub(WidgetCompWndProc, FWidgetCompStub); CreateStub(WidgetCompWndProc, FWidgetCompStub);
FOldWidgetCompWndPrc := TFNWndProc(SetWindowLongPtr(FWidgetCompHWND, FOldWidgetCompWndPrc := TFNWndProc(SetWindowLongPtr(FWidgetCompHWND,
GWL_WNDPROC, GWLP_WNDPROC,
NativeInt(FWidgetCompStub))); NativeInt(FWidgetCompStub)));
end; end;
RestoreCompWndProc(OldRenderCompHWND, FRenderCompHWND, FOldRenderCompWndPrc);
if assigned(FOnRenderCompMsg) and (FRenderCompHWND <> 0) and (FOldRenderCompWndPrc = nil) then if assigned(FOnRenderCompMsg) and (FRenderCompHWND <> 0) and (FOldRenderCompWndPrc = nil) then
begin begin
CreateStub(RenderCompWndProc, FRenderCompStub); CreateStub(RenderCompWndProc, FRenderCompStub);
FOldRenderCompWndPrc := TFNWndProc(SetWindowLongPtr(FRenderCompHWND, FOldRenderCompWndPrc := TFNWndProc(SetWindowLongPtr(FRenderCompHWND,
GWL_WNDPROC, GWLP_WNDPROC,
NativeInt(FRenderCompStub))); NativeInt(FRenderCompStub)));
end; end;
end; end;
@ -4312,6 +4312,16 @@ begin
end; end;
end; end;
procedure TFMXChromium.RestoreCompWndProc(var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc);
begin
if (aOldWnd <> 0) and (aOldWnd <> aNewWnd) and (aProc <> nil) then
begin
SetWindowLongPtr(aOldWnd, GWLP_WNDPROC, NativeInt(aProc));
aProc := nil;
aOldWnd := 0;
end;
end;
procedure TFMXChromium.BrowserCompWndProc(var aMessage: TMessage); procedure TFMXChromium.BrowserCompWndProc(var aMessage: TMessage);
var var
TempHandled : boolean; TempHandled : boolean;
@ -4319,17 +4329,22 @@ begin
try try
TempHandled := False; TempHandled := False;
if assigned(FOnBrowserCompMsg) then try
FOnBrowserCompMsg(aMessage, TempHandled); if assigned(FOnBrowserCompMsg) then
FOnBrowserCompMsg(aMessage, TempHandled);
if not(TempHandled) and if not(TempHandled) and
(FOldBrowserCompWndPrc <> nil) and (FOldBrowserCompWndPrc <> nil) and
(FBrowserCompHWND <> 0) then (FBrowserCompHWND <> 0) then
aMessage.Result := CallWindowProc(FOldBrowserCompWndPrc, aMessage.Result := CallWindowProc(FOldBrowserCompWndPrc,
FBrowserCompHWND, FBrowserCompHWND,
aMessage.Msg, aMessage.Msg,
aMessage.wParam, aMessage.wParam,
aMessage.lParam); aMessage.lParam);
finally
if aMessage.Msg = WM_DESTROY then
RestoreCompWndProc(FBrowserCompHWND, 0, FOldBrowserCompWndPrc);
end;
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TFMXChromium.BrowserCompWndProc', e) then raise; if CustomExceptionHandler('TFMXChromium.BrowserCompWndProc', e) then raise;
@ -4343,17 +4358,22 @@ begin
try try
TempHandled := False; TempHandled := False;
if assigned(FOnWidgetCompMsg) then try
FOnWidgetCompMsg(aMessage, TempHandled); if assigned(FOnWidgetCompMsg) then
FOnWidgetCompMsg(aMessage, TempHandled);
if not(TempHandled) and if not(TempHandled) and
(FOldWidgetCompWndPrc <> nil) and (FOldWidgetCompWndPrc <> nil) and
(FWidgetCompHWND <> 0) then (FWidgetCompHWND <> 0) then
aMessage.Result := CallWindowProc(FOldWidgetCompWndPrc, aMessage.Result := CallWindowProc(FOldWidgetCompWndPrc,
FWidgetCompHWND, FWidgetCompHWND,
aMessage.Msg, aMessage.Msg,
aMessage.wParam, aMessage.wParam,
aMessage.lParam); aMessage.lParam);
finally
if aMessage.Msg = WM_DESTROY then
RestoreCompWndProc(FWidgetCompHWND, 0, FOldWidgetCompWndPrc);
end;
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TFMXChromium.WidgetCompWndProc', e) then raise; if CustomExceptionHandler('TFMXChromium.WidgetCompWndProc', e) then raise;
@ -4367,17 +4387,22 @@ begin
try try
TempHandled := False; TempHandled := False;
if assigned(FOnRenderCompMsg) then try
FOnRenderCompMsg(aMessage, TempHandled); if assigned(FOnRenderCompMsg) then
FOnRenderCompMsg(aMessage, TempHandled);
if not(TempHandled) and if not(TempHandled) and
(FOldRenderCompWndPrc <> nil) and (FOldRenderCompWndPrc <> nil) and
(FRenderCompHWND <> 0) then (FRenderCompHWND <> 0) then
aMessage.Result := CallWindowProc(FOldRenderCompWndPrc, aMessage.Result := CallWindowProc(FOldRenderCompWndPrc,
FRenderCompHWND, FRenderCompHWND,
aMessage.Msg, aMessage.Msg,
aMessage.wParam, aMessage.wParam,
aMessage.lParam); aMessage.lParam);
finally
if aMessage.Msg = WM_DESTROY then
RestoreCompWndProc(FRenderCompHWND, 0, FOldRenderCompWndPrc);
end;
except except
on e : exception do on e : exception do
if CustomExceptionHandler('TFMXChromium.RenderCompWndProc', e) then raise; if CustomExceptionHandler('TFMXChromium.RenderCompWndProc', e) then raise;