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

Fixed some focus issues in FMX demos for Windows in normal mode

This commit is contained in:
salvadordf 2022-02-27 19:39:19 +01:00
parent acd6deb308
commit 41490cebdb
6 changed files with 71 additions and 14 deletions

View File

@ -98,10 +98,19 @@ object BrowserFrame: TBrowserFrame
Size.PlatformDefault = False Size.PlatformDefault = False
TabOrder = 4 TabOrder = 4
OnResize = WindowParentLayResize OnResize = WindowParentLayResize
object FocusWorkaroundBtn: TButton
Position.X = 304.000000000000000000
Position.Y = 120.000000000000000000
Size.Width = 1.000000000000000000
Size.Height = 1.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
end
end end
object FMXChromium1: TFMXChromium object FMXChromium1: TFMXChromium
OnLoadError = FMXChromium1LoadError OnLoadError = FMXChromium1LoadError
OnLoadingStateChange = FMXChromium1LoadingStateChange OnLoadingStateChange = FMXChromium1LoadingStateChange
OnGotFocus = FMXChromium1GotFocus
OnAddressChange = FMXChromium1AddressChange OnAddressChange = FMXChromium1AddressChange
OnTitleChange = FMXChromium1TitleChange OnTitleChange = FMXChromium1TitleChange
OnBeforePopup = FMXChromium1BeforePopup OnBeforePopup = FMXChromium1BeforePopup

View File

@ -63,6 +63,7 @@ type
StopBtn: TSpeedButton; StopBtn: TSpeedButton;
URLEdt: TEdit; URLEdt: TEdit;
WindowParentLay: TLayout; WindowParentLay: TLayout;
FocusWorkaroundBtn: TButton;
procedure BackBtnClick(Sender: TObject); procedure BackBtnClick(Sender: TObject);
procedure ForwardBtnClick(Sender: TObject); procedure ForwardBtnClick(Sender: TObject);
@ -80,6 +81,7 @@ type
procedure FMXChromium1LoadError(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring); procedure FMXChromium1LoadError(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring);
procedure FMXChromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); procedure FMXChromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean);
procedure FMXChromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring); procedure FMXChromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring);
procedure FMXChromium1GotFocus(Sender: TObject; const browser: ICefBrowser);
protected protected
FClosing : boolean; // Indicates that this frame is destroying the browser FClosing : boolean; // Indicates that this frame is destroying the browser
@ -140,7 +142,7 @@ end;
function TBrowserFrame.GetFMXWindowParentRect : System.Types.TRect; function TBrowserFrame.GetFMXWindowParentRect : System.Types.TRect;
var var
TempRect : TRectF; TempRect : TRectF;
TempScale : single; TempScale : single;
begin begin
TempScale := FMXChromium1.ScreenScale; TempScale := FMXChromium1.ScreenScale;
@ -168,13 +170,14 @@ begin
begin begin
FMXWindowParent.WindowState := TWindowState.wsNormal; FMXWindowParent.WindowState := TWindowState.wsNormal;
ResizeBrowser; ResizeBrowser;
FMXWindowParent.Show; FMXWindowParent.Visible := True;
end; end;
end; end;
procedure TBrowserFrame.HideBrowser; procedure TBrowserFrame.HideBrowser;
begin begin
if (FMXWindowParent <> nil) then FMXWindowParent.Hide; if (FMXWindowParent <> nil) then
FMXWindowParent.Visible := False;
end; end;
procedure TBrowserFrame.DestroyWindowParent; procedure TBrowserFrame.DestroyWindowParent;
@ -203,7 +206,8 @@ begin
begin begin
FMXWindowParent := TFMXWindowParent.CreateNew(nil); FMXWindowParent := TFMXWindowParent.CreateNew(nil);
FMXWindowParent.Reparent(ParentForm.Handle); FMXWindowParent.Reparent(ParentForm.Handle);
ShowBrowser; ResizeBrowser;
FMXWindowParent.Show;
end; end;
end; end;
@ -250,6 +254,17 @@ begin
if assigned(FOnBrowserClosing) then FOnBrowserClosing(self); if assigned(FOnBrowserClosing) then FOnBrowserClosing(self);
end; end;
procedure TBrowserFrame.FMXChromium1GotFocus(Sender: TObject;
const browser: ICefBrowser);
begin
// We use a hidden button to fix the focus issues when the browser has the real focus.
TThread.Queue(nil,
procedure
begin
FocusWorkaroundBtn.SetFocus;
end);
end;
procedure TBrowserFrame.FMXChromium1LoadError(Sender: TObject; procedure TBrowserFrame.FMXChromium1LoadError(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer;
const errorText, failedUrl: ustring); const errorText, failedUrl: ustring);

View File

@ -81,9 +81,10 @@ type
procedure FormResize(Sender: TObject); procedure FormResize(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BrowserTabCtrlChange(Sender: TObject);
procedure AddTabActionExecute(Sender: TObject); procedure AddTabActionExecute(Sender: TObject);
procedure RemoveTabActionExecute(Sender: TObject); procedure RemoveTabActionExecute(Sender: TObject);
procedure BrowserTabCtrlChange(Sender: TObject);
procedure PrevTabActionExecute(Sender: TObject); procedure PrevTabActionExecute(Sender: TObject);
procedure NextTabActionExecute(Sender: TObject); procedure NextTabActionExecute(Sender: TObject);
procedure ShowTabsActionExecute(Sender: TObject); procedure ShowTabsActionExecute(Sender: TObject);
@ -115,8 +116,10 @@ type
procedure DestroyTab(aTabID : cardinal); procedure DestroyTab(aTabID : cardinal);
function CloseAllTabs : boolean; function CloseAllTabs : boolean;
procedure CloseSelectedTab; procedure CloseSelectedTab;
procedure ResizeAllBrowsers;
property NextTabID : cardinal read GetNextTabID; property NextTabID : cardinal read GetNextTabID;
public public
function PostCustomMessage(aMsg : cardinal; aWParam : WPARAM = 0; aLParam : LPARAM = 0) : boolean; function PostCustomMessage(aMsg : cardinal; aWParam : WPARAM = 0; aLParam : LPARAM = 0) : boolean;
procedure NotifyMoveOrResizeStarted; procedure NotifyMoveOrResizeStarted;
@ -215,7 +218,9 @@ var
PositionChanged: Boolean; PositionChanged: Boolean;
begin begin
PositionChanged := (ALeft <> Left) or (ATop <> Top); PositionChanged := (ALeft <> Left) or (ATop <> Top);
inherited SetBounds(ALeft, ATop, AWidth, AHeight); inherited SetBounds(ALeft, ATop, AWidth, AHeight);
if PositionChanged then if PositionChanged then
NotifyMoveOrResizeStarted; NotifyMoveOrResizeStarted;
end; end;
@ -241,6 +246,17 @@ begin
end; end;
procedure TMainForm.FormResize(Sender: TObject); procedure TMainForm.FormResize(Sender: TObject);
begin
ResizeAllBrowsers;
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
if (GlobalCEFApp <> nil) and GlobalCEFApp.GlobalContextInitialized then
EnableButtonLay;
end;
procedure TMainForm.ResizeAllBrowsers;
var var
i : integer; i : integer;
begin begin
@ -253,12 +269,6 @@ begin
end; end;
end; end;
procedure TMainForm.FormShow(Sender: TObject);
begin
if (GlobalCEFApp <> nil) and GlobalCEFApp.GlobalContextInitialized then
EnableButtonLay;
end;
procedure TMainForm.EnableButtonLay; procedure TMainForm.EnableButtonLay;
begin begin
if not(ButtonLay.Enabled) then if not(ButtonLay.Enabled) then
@ -288,6 +298,8 @@ begin
BrowserTabCtrl.TabPosition := TTabPosition.None BrowserTabCtrl.TabPosition := TTabPosition.None
else else
BrowserTabCtrl.TabPosition := TTabPosition.PlatformDefault; BrowserTabCtrl.TabPosition := TTabPosition.PlatformDefault;
ResizeAllBrowsers;
end; end;
procedure TMainForm.AddTabActionExecute(Sender: TObject); procedure TMainForm.AddTabActionExecute(Sender: TObject);

View File

@ -84,8 +84,17 @@ object SimpleFMXBrowserFrm: TSimpleFMXBrowserFrm
Size.Height = 565.000000000000000000 Size.Height = 565.000000000000000000
Size.PlatformDefault = False Size.PlatformDefault = False
TabOrder = 6 TabOrder = 6
object FocusWorkaroundBtn: TButton
Position.X = 368.000000000000000000
Position.Y = 208.000000000000000000
Size.Width = 1.000000000000000000
Size.Height = 1.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
end
end end
object FMXChromium1: TFMXChromium object FMXChromium1: TFMXChromium
OnGotFocus = FMXChromium1GotFocus
OnBeforeContextMenu = FMXChromium1BeforeContextMenu OnBeforeContextMenu = FMXChromium1BeforeContextMenu
OnContextMenuCommand = FMXChromium1ContextMenuCommand OnContextMenuCommand = FMXChromium1ContextMenuCommand
OnBeforePopup = FMXChromium1BeforePopup OnBeforePopup = FMXChromium1BeforePopup

View File

@ -67,6 +67,7 @@ type
GoBtn: TButton; GoBtn: TButton;
SnapShotBtn: TButton; SnapShotBtn: TButton;
BrowserLay: TLayout; BrowserLay: TLayout;
FocusWorkaroundBtn: TButton;
procedure GoBtnClick(Sender: TObject); procedure GoBtnClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject); procedure Timer1Timer(Sender: TObject);
@ -83,6 +84,7 @@ type
procedure FMXChromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); procedure FMXChromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure FMXChromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); procedure FMXChromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
procedure FMXChromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: Cardinal; out Result: Boolean); procedure FMXChromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: Cardinal; out Result: Boolean);
procedure FMXChromium1GotFocus(Sender: TObject; const browser: ICefBrowser);
protected protected
// Variables to control when can we destroy the form safely // Variables to control when can we destroy the form safely
@ -236,6 +238,17 @@ begin
end; end;
end; end;
procedure TSimpleFMXBrowserFrm.FMXChromium1GotFocus(Sender: TObject;
const browser: ICefBrowser);
begin
// We use a hidden button to fix the focus issues when the browser has the real focus.
TThread.Queue(nil,
procedure
begin
FocusWorkaroundBtn.SetFocus;
end);
end;
function TSimpleFMXBrowserFrm.PostCustomMessage(aMsg : cardinal; aWParam : WPARAM; aLParam : LPARAM) : boolean; function TSimpleFMXBrowserFrm.PostCustomMessage(aMsg : cardinal; aWParam : WPARAM; aLParam : LPARAM) : boolean;
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
var var
@ -317,8 +330,7 @@ begin
if (FMXWindowParent <> nil) then if (FMXWindowParent <> nil) then
begin begin
FMXWindowParent.WindowState := TWindowState.wsNormal; FMXWindowParent.WindowState := TWindowState.wsNormal;
FMXWindowParent.Show; ResizeChild;
FMXWindowParent.SetBounds(GetFMXWindowParentRect);
end; end;
end; end;

View File

@ -2,7 +2,7 @@
"UpdateLazPackages" : [ "UpdateLazPackages" : [
{ {
"ForceNotify" : true, "ForceNotify" : true,
"InternalVersion" : 362, "InternalVersion" : 363,
"Name" : "cef4delphi_lazarus.lpk", "Name" : "cef4delphi_lazarus.lpk",
"Version" : "98.2.1.0" "Version" : "98.2.1.0"
} }