From 00621e9aa4ec31b384392fb95b2eca826daae2b5 Mon Sep 17 00:00:00 2001 From: dliw Date: Mon, 20 Mar 2017 21:13:29 +0100 Subject: [PATCH] fix #45 extend LCLSimple and LCLCefClient --- Component/cef3lcl.pas | 10 +++++----- Examples/LCLCefClient/main.lfm | 8 ++++---- Examples/LCLCefClient/webpanel.pas | 22 ++++++++++++++++++++++ Examples/LCLSimple/main.lfm | 3 +++ Examples/LCLSimple/main.pas | 6 ++++++ cef3gui.pas | 4 ++-- 6 files changed, 42 insertions(+), 11 deletions(-) diff --git a/Component/cef3lcl.pas b/Component/cef3lcl.pas index aed87ed..32f4cd6 100644 --- a/Component/cef3lcl.pas +++ b/Component/cef3lcl.pas @@ -233,7 +233,7 @@ TCustomChromium = class(TWinControl, IChromiumEvents) procedure doOnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: TCefRect; activeMatchOridinal: Integer; finalUpdate: Boolean); virtual; { FocusHandler } - procedure doOnTakeFocus(const Browser: ICefBrowser; next: Boolean); virtual; + procedure doOnTakeFocus(const Browser: ICefBrowser; next_: Boolean); virtual; function doOnSetFocus(const Browser: ICefBrowser; Source: TCefFocusSource): Boolean; virtual; procedure doOnGotFocus(const Browser: ICefBrowser); virtual; @@ -438,10 +438,10 @@ TChromium = class(TCustomChromium) published property Color; property Constraints; - //property TabStop; + property TabStop; property Align; property Anchors; - //property TabOrder; + property TabOrder; property Visible; property OnProcessMessageReceived; @@ -1044,9 +1044,9 @@ procedure TCustomChromium.doOnFindResult(const browser: ICefBrowser; identifier, activeMatchOridinal, finalUpdate); end; -procedure TCustomChromium.doOnTakeFocus(const Browser: ICefBrowser; next: Boolean); +procedure TCustomChromium.doOnTakeFocus(const Browser: ICefBrowser; next_: Boolean); begin - If Assigned(fOnTakeFocus) then fOnTakeFocus(Self, Browser, next); + If Assigned(fOnTakeFocus) then fOnTakeFocus(Self, Browser, next_); end; function TCustomChromium.doOnSetFocus(const Browser: ICefBrowser; Source: TCefFocusSource): Boolean; diff --git a/Examples/LCLCefClient/main.lfm b/Examples/LCLCefClient/main.lfm index 1fa49a6..15bf965 100644 --- a/Examples/LCLCefClient/main.lfm +++ b/Examples/LCLCefClient/main.lfm @@ -7,7 +7,7 @@ object FMain: TFMain ClientHeight = 533 ClientWidth = 1201 OnCreate = FormCreate - LCLVersion = '1.6.2.0' + LCLVersion = '1.6.4.0' object LUrl: TStaticText AnchorSideTop.Control = Owner Left = 8 @@ -65,7 +65,7 @@ object FMain: TFMain Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 10 Images = TabIcons - TabOrder = 3 + TabOrder = 5 OnChange = TabsChange end object BNewTab: TButton @@ -80,7 +80,7 @@ object FMain: TFMain BorderSpacing.Right = 5 Caption = '+' OnClick = BNewTabClick - TabOrder = 4 + TabOrder = 3 end object BCloseTab: TButton AnchorSideTop.Control = Owner @@ -96,7 +96,7 @@ object FMain: TFMain Caption = '-' Enabled = False OnClick = BCloseTabClick - TabOrder = 5 + TabOrder = 4 end object TabIcons: TImageList left = 1152 diff --git a/Examples/LCLCefClient/webpanel.pas b/Examples/LCLCefClient/webpanel.pas index 096da70..a46e123 100644 --- a/Examples/LCLCefClient/webpanel.pas +++ b/Examples/LCLCefClient/webpanel.pas @@ -18,6 +18,7 @@ TWebPanel = class(TTabSheet) fUrl: String; fIconGetter: TFaviconGetter; + procedure ChromiumTakeFocus(Sender: TObject; const Browser: ICefBrowser; next_: Boolean); procedure ChromiumTitleChange(Sender: TObject; const Browser: ICefBrowser; const title: ustring); procedure ChromiumAddressChange(Sender: TObject; const Browser: ICefBrowser; const Frame: ICefFrame; const url: ustring); @@ -153,6 +154,25 @@ procedure TWebPanel.ChromiumTitleChange(Sender: TObject; const Browser: ICefBrow Else Caption := UTF8Copy(NewTitle, 1, 12) + '...'; end; +procedure TWebPanel.ChromiumTakeFocus(Sender: TObject; const Browser: ICefBrowser; next_: Boolean); +Var + NextPageIndex: Integer; +begin + If next_ then NextPageIndex := PageIndex + 1 + Else NextPageIndex := PageIndex - 1; + + If (NextPageIndex >= 0) and (NextPageIndex < PageControl.PageCount) then + begin + // Select next tab if available + PageControl.ActivePageIndex := NextPageIndex; + end + Else + begin + // otherwise select next component on form + FMain.SelectNext(FMain.ActiveControl, next_, True); + end; +end; + procedure TWebPanel.ChromiumAddressChange(Sender: TObject; const Browser: ICefBrowser; const Frame: ICefFrame; const url: ustring); begin @@ -482,10 +502,12 @@ procedure TWebPanel.InitializeChromium; If not Assigned(fChromium) then begin fChromium := TChromium.Create(Self); + fChromium.TabStop := True; fChromium.Parent := Self; fChromium.AnchorAsAlign(alClient, 0); // Register callbacks + fChromium.OnTakeFocus := @ChromiumTakeFocus; fChromium.OnTitleChange := @ChromiumTitleChange; fChromium.OnAddressChange := @ChromiumAddressChange; fChromium.OnFaviconUrlchange := @ChromiumFaviconUrlchange; diff --git a/Examples/LCLSimple/main.lfm b/Examples/LCLSimple/main.lfm index 6eeb2d5..e14717d 100644 --- a/Examples/LCLSimple/main.lfm +++ b/Examples/LCLSimple/main.lfm @@ -62,8 +62,11 @@ object Mainform: TMainform Height = 428 Top = 48 Width = 810 + TabStop = True Anchors = [akTop, akLeft, akRight, akBottom] + TabOrder = 3 OnTitleChange = ChromiumTitleChange + OnTakeFocus = ChromiumTakeFocus OnLoadEnd = ChromiumLoadEnd DefaultUrl = 'about:blank' end diff --git a/Examples/LCLSimple/main.pas b/Examples/LCLSimple/main.pas index a6dc53f..a1a077f 100644 --- a/Examples/LCLSimple/main.pas +++ b/Examples/LCLSimple/main.pas @@ -20,6 +20,7 @@ TMainform = class(TForm) procedure BGoClick(Sender: TObject); procedure ChromiumLoadEnd(Sender: TObject; const Browser: ICefBrowser; const Frame: ICefFrame; httpStatusCode: Integer); + procedure ChromiumTakeFocus(Sender: TObject; const Browser: ICefBrowser; next_: Boolean); procedure ChromiumTitleChange(Sender: TObject; const Browser: ICefBrowser; const title: ustring); procedure EUrlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); @@ -49,6 +50,11 @@ procedure TMainform.ChromiumLoadEnd(Sender: TObject; const Browser: ICefBrowser; EUrl.Text := UTF8Encode(Browser.MainFrame.Url); end; +procedure TMainform.ChromiumTakeFocus(Sender: TObject; const Browser: ICefBrowser; next_: Boolean); +begin + SelectNext(ActiveControl, next_, True); +end; + procedure TMainform.ChromiumTitleChange(Sender: TObject; const Browser: ICefBrowser; const title: ustring); begin Caption := 'Browser - ' + UTF8Encode(title); diff --git a/cef3gui.pas b/cef3gui.pas index bff99cc..5a9ac22 100644 --- a/cef3gui.pas +++ b/cef3gui.pas @@ -73,7 +73,7 @@ TOnFindResult = procedure(Sender: TObject; browser: ICefBrowser; identifier, count: Integer; const selectionRect: TCefRect; activeMatchOridinal: Integer; finalUpdate: Boolean) of object; { FocusHandler } - TOnTakeFocus = procedure(Sender: TObject; const Browser: ICefBrowser; next: Boolean) of object; + TOnTakeFocus = procedure(Sender: TObject; const Browser: ICefBrowser; next_: Boolean) of object; TOnSetFocus = procedure(Sender: TObject; const Browser: ICefBrowser; Source: TCefFocusSource; out Result: Boolean) of object; TOnGotFocus = procedure(Sender: TObject; const Browser: ICefBrowser) of object; @@ -302,7 +302,7 @@ TChromiumFontOptions = class(TPersistent) const selectionRect: TCefRect; activeMatchOridinal: Integer; finalUpdate: Boolean); { CefFocusHandler } - procedure doOnTakeFocus(const Browser: ICefBrowser; next: Boolean); + procedure doOnTakeFocus(const Browser: ICefBrowser; next_: Boolean); function doOnSetFocus(const Browser: ICefBrowser; Source: TCefFocusSource): Boolean; procedure doOnGotFocus(const Browser: ICefBrowser);