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:
parent
d950813081
commit
a4945a236f
@ -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);
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user