From dd5f7f42c4ee4bd3aa18ddf6ec40e67f2436288c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salvador=20D=C3=ADaz=20Fau?= Date: Sat, 12 May 2018 14:50:54 +0200 Subject: [PATCH] Added support for Lazarus/FPC (windows 32bit) --- demos/CookieVisitor/uCookieVisitor.pas | 2 +- .../uCustomResourceHandler.pas | 2 +- demos/CustomResourceBrowser/uMainForm.pas | 2 +- demos/DOMVisitor/uDOMVisitor.pas | 2 +- .../uExternalPumpBrowser.pas | 2 +- .../uFMXApplicationService.pas | 2 +- .../uFMXExternalPumpBrowser.pas | 2 +- demos/FullScreenBrowser/uMainForm.pas | 2 +- .../JavaScript/JSDialog/uJSDialogBrowser.pas | 2 +- demos/JavaScript/JSEval/uJSEval.pas | 2 +- .../uJSExecutingFunctions.pas | 2 +- .../JSExecutingFunctions/uMyV8Handler.pas | 2 +- demos/JavaScript/JSExtension/uJSExtension.pas | 2 +- .../JSExtension/uTestExtensionHandler.pas | 2 +- .../uJSExtensionWithFunction.pas | 2 +- .../JSExtensionWithFunction/uMyV8Handler.pas | 2 +- .../uJSExtensionWithObjectParameter.pas | 2 +- .../uMyV8Handler.pas | 2 +- .../JSRTTIExtension/uJSRTTIExtension.pas | 2 +- .../JSRTTIExtension/uTestExtension.pas | 2 +- .../JSSimpleExtension/uJSSimpleExtension.pas | 2 +- .../uJSSimpleWindowBinding.pas | 2 +- .../uJSSimpleWindowBinding.pas | 2 +- .../uJSWindowBindingWithFunction.pas | 2 +- .../uMyV8Handler.pas | 2 +- .../uJSWindowBindingWithObject.pas | 2 +- .../uMyV8Accessor.pas | 2 +- demos/MDIBrowser/uChildForm.pas | 2 +- demos/MDIBrowser/uMainForm.pas | 2 +- demos/MDIExternalPumpBrowser/uChildForm.pas | 2 +- demos/MDIExternalPumpBrowser/uMainForm.pas | 2 +- demos/MiniBrowser/uMiniBrowser.pas | 2 +- demos/MiniBrowser/uPreferences.pas | 2 +- .../uOSRExternalPumpBrowser.pas | 2 +- demos/PopupBrowser/uChildForm.pas | 2 +- demos/PopupBrowser/uMainForm.pas | 2 +- demos/PopupBrowser2/uChildForm.pas | 2 +- demos/PopupBrowser2/uMainForm.pas | 2 +- .../uResponseFilterBrowser.pas | 2 +- .../uHelloScheme.pas | 2 +- .../uSchemeRegistrationBrowser.pas | 2 +- demos/SimpleBrowser/uSimpleBrowser.pas | 2 +- demos/SimpleBrowser2/uSimpleBrowser2.pas | 2 +- .../uSimpleExternalPumpBrowser.pas | 2 +- .../uFMXApplicationService.pas | 2 +- demos/SimpleFMXBrowser/uSimpleFMXBrowser.pas | 2 +- demos/SimpleLazarusBrowser/00-Delete.bat | 2 + .../SimpleLazarusBrowser.ico | Bin 0 -> 137040 bytes .../SimpleLazarusBrowser.lpi | 79 + .../SimpleLazarusBrowser.lpr | 29 + .../SimpleLazarusBrowser.lps | 252 + .../SimpleLazarusBrowser.res | Bin 0 -> 138932 bytes .../usimplelazarusbrowser.lfm | 68 + .../usimplelazarusbrowser.pas | 234 + demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas | 2 +- demos/SimpleServer/uSimpleServer.pas | 2 +- demos/SubProcess/uSimpleBrowser.pas | 2 +- demos/TabbedBrowser/uMainForm.pas | 2 +- demos/ToolBoxBrowser/uChildForm.pas | 2 +- demos/ToolBoxBrowser/uMainForm.pas | 2 +- ...urces.bat => 00-CreateDelphiResources.bat} | 0 packages/00-CreateLazarusResources.bat | 7 + packages/00-DeleteDCUs.bat | 10 +- packages/CEF4Delphi.dpk | 1 - packages/CEF4Delphi_D7.dpk | 1 - packages/CEF4Delphi_D7_Register.pas | 2 +- packages/CEF4Delphi_FMX.dpk | 16 +- packages/CEF4Delphi_FMX.dproj | 1 - packages/CEF4Delphi_FMX_Register.pas | 2 +- packages/CEF4Delphi_Register.pas | 2 +- packages/cef4delphi_lazarus.lpk | 577 +++ packages/cef4delphi_lazarus.pas | 64 + packages/tbufferpanel.png | Bin 0 -> 192 bytes packages/tcefservercomponent.png | Bin 0 -> 923 bytes packages/tcefwindowparent.png | Bin 0 -> 271 bytes packages/tcefworkscheduler.png | Bin 0 -> 924 bytes packages/tchromium.png | Bin 0 -> 1165 bytes packages/tchromiumwindow.png | Bin 0 -> 875 bytes source/00-DeleteDCUs.bat | 9 +- source/cef.inc | 54 +- source/tbufferpanel.lrs | 9 + source/tcefservercomponent.lrs | 39 + source/tcefwindowparent.lrs | 13 + source/tcefworkscheduler.lrs | 40 + source/tchromium.lrs | 50 + source/tchromiumwindow.lrs | 38 + source/uBufferPanel.pas | 41 +- source/uCEFAccessibilityHandler.pas | 10 +- source/uCEFApp.pas | 16 +- source/uCEFApplication.pas | 373 +- source/uCEFAuthCallback.pas | 21 +- source/uCEFBaseRefCounted.pas | 22 +- source/uCEFBaseScopedWrapper.pas | 6 +- source/uCEFBeforeDownloadCallback.pas | 23 +- source/uCEFBinaryValue.pas | 42 +- source/uCEFBrowser.pas | 155 +- source/uCEFBrowserProcessHandler.pas | 16 +- source/uCEFCallback.pas | 6 +- source/uCEFChromium.pas | 282 +- source/uCEFChromiumEvents.pas | 8 +- source/uCEFChromiumFontOptions.pas | 6 +- source/uCEFChromiumOptions.pas | 6 +- source/uCEFChromiumWindow.pas | 39 +- source/uCEFClient.pas | 34 +- source/uCEFCommandLine.pas | 52 +- source/uCEFCompletionCallback.pas | 8 +- source/uCEFConstants.pas | 6 +- source/uCEFContextMenuHandler.pas | 14 +- source/uCEFContextMenuParams.pas | 48 +- source/uCEFCookieManager.pas | 34 +- source/uCEFCookieVisitor.pas | 30 +- source/uCEFCustomStreamReader.pas | 16 +- source/uCEFDeleteCookiesCallback.pas | 8 +- source/uCEFDialogHandler.pas | 8 +- source/uCEFDictionaryValue.pas | 168 +- source/uCEFDisplayHandler.pas | 24 +- source/uCEFDomDocument.pas | 23 +- source/uCEFDomNode.pas | 90 +- source/uCEFDomVisitor.pas | 8 +- source/uCEFDownLoadItem.pas | 11 +- source/uCEFDownloadHandler.pas | 10 +- source/uCEFDownloadImageCallBack.pas | 9 +- source/uCEFDownloadItemCallback.pas | 17 +- source/uCEFDragAndDropMgr.pas | 6 +- source/uCEFDragData.pas | 122 +- source/uCEFDragHandler.pas | 10 +- source/uCEFEndTracingCallback.pas | 11 +- source/uCEFExtension.pas | 22 +- source/uCEFExtensionHandler.pas | 50 +- source/uCEFFileDialogCallback.pas | 14 +- source/uCEFFindHandler.pas | 8 +- source/uCEFFocusHandler.pas | 12 +- source/uCEFFrame.pas | 54 +- source/uCEFGetExtensionResourceCallback.pas | 10 +- source/uCEFImage.pas | 32 +- source/uCEFInterfaces.pas | 4175 +++++++++-------- source/uCEFJsDialogCallback.pas | 12 +- source/uCEFJsDialogHandler.pas | 14 +- source/uCEFKeyboardHandler.pas | 10 +- source/uCEFLibFunctions.pas | 342 +- source/uCEFLifeSpanHandler.pas | 14 +- source/uCEFListValue.pas | 73 +- source/uCEFLoadHandler.pas | 14 +- source/uCEFMenuModel.pas | 260 +- source/uCEFMenuModelDelegate.pas | 32 +- source/uCEFMiscFunctions.pas | 59 +- source/uCEFNavigationEntry.pas | 26 +- source/uCEFNavigationEntryVisitor.pas | 9 +- source/uCEFPDFPrintCallback.pas | 9 +- source/uCEFPDFPrintOptions.pas | 6 +- source/uCEFPostData.pas | 18 +- source/uCEFPostDataElement.pas | 24 +- source/uCEFPrintSettings.pas | 100 +- source/uCEFProcessMessage.pas | 6 +- source/uCEFRegisterCDMCallback.pas | 11 +- source/uCEFRenderHandler.pas | 34 +- source/uCEFRenderProcessHandler.pas | 26 +- source/uCEFRequest.pas | 77 +- source/uCEFRequestCallback.pas | 10 +- source/uCEFRequestContext.pas | 85 +- source/uCEFRequestContextHandler.pas | 58 +- source/uCEFRequestHandler.pas | 44 +- source/uCEFResolveCallback.pas | 9 +- source/uCEFResourceBundle.pas | 27 +- source/uCEFResourceBundleHandler.pas | 12 +- source/uCEFResourceHandler.pas | 22 +- source/uCEFResponse.pas | 8 +- source/uCEFResponseFilter.pas | 10 +- source/uCEFRunContextMenuCallback.pas | 21 +- source/uCEFRunFileDialogCallback.pas | 9 +- source/uCEFSSLStatus.pas | 16 +- source/uCEFSchemeHandlerFactory.pas | 8 +- source/uCEFSchemeRegistrar.pas | 36 +- .../uCEFSelectClientCertificateCallback.pas | 8 +- source/uCEFServer.pas | 32 +- source/uCEFServerComponent.pas | 25 +- source/uCEFServerEvents.pas | 6 +- source/uCEFServerHandler.pas | 22 +- source/uCEFSetCookieCallback.pas | 9 +- source/uCEFSslInfo.pas | 10 +- source/uCEFStreamReader.pas | 25 +- source/uCEFStreamWriter.pas | 25 +- source/uCEFStringList.pas | 8 +- source/uCEFStringMap.pas | 8 +- source/uCEFStringMultimap.pas | 8 +- source/uCEFStringVisitor.pas | 8 +- source/uCEFTask.pas | 16 +- source/uCEFTaskRunner.pas | 16 +- source/uCEFThread.pas | 14 +- source/uCEFTypes.pas | 15 +- source/uCEFUrlRequest.pas | 18 +- source/uCEFUrlrequestClient.pas | 16 +- source/uCEFV8Exception.pas | 22 +- source/uCEFValue.pas | 52 +- source/uCEFWaitableEvent.pas | 16 +- source/uCEFWebPluginInfo.pas | 11 +- source/uCEFWebPluginInfoVisitor.pas | 17 +- source/uCEFWebPluginUnstableCallback.pas | 10 +- source/uCEFWindowParent.pas | 32 +- source/uCEFWorkScheduler.pas | 39 +- source/uCEFWorkSchedulerThread.pas | 8 +- source/uCEFWriteHandler.pas | 58 +- source/uCEFX509CertPrincipal.pas | 24 +- source/uCEFX509Certificate.pas | 42 +- source/uCEFXmlReader.pas | 115 +- source/uCEFZipReader.pas | 49 +- source/uCEFv8Accessor.pas | 15 +- source/uCEFv8ArrayBufferReleaseCallback.pas | 13 +- source/uCEFv8Context.pas | 22 +- source/uCEFv8Handler.pas | 16 +- source/uCEFv8Interceptor.pas | 16 +- source/uCEFv8StackFrame.pas | 27 +- source/uCEFv8StackTrace.pas | 17 +- source/uCEFv8Types.pas | 68 - source/uCEFv8Value.pas | 97 +- source/uFMXBufferPanel.pas | 2 +- source/uFMXChromium.pas | 109 +- source/uFMXWindowParent.pas | 2 +- source/uFMXWorkScheduler.pas | 2 +- source/uOLEDragAndDrop.pas | 6 +- 220 files changed, 6385 insertions(+), 4281 deletions(-) create mode 100644 demos/SimpleLazarusBrowser/00-Delete.bat create mode 100644 demos/SimpleLazarusBrowser/SimpleLazarusBrowser.ico create mode 100644 demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpi create mode 100644 demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpr create mode 100644 demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lps create mode 100644 demos/SimpleLazarusBrowser/SimpleLazarusBrowser.res create mode 100644 demos/SimpleLazarusBrowser/usimplelazarusbrowser.lfm create mode 100644 demos/SimpleLazarusBrowser/usimplelazarusbrowser.pas rename packages/{00-CreateResources.bat => 00-CreateDelphiResources.bat} (100%) create mode 100644 packages/00-CreateLazarusResources.bat create mode 100644 packages/cef4delphi_lazarus.lpk create mode 100644 packages/cef4delphi_lazarus.pas create mode 100644 packages/tbufferpanel.png create mode 100644 packages/tcefservercomponent.png create mode 100644 packages/tcefwindowparent.png create mode 100644 packages/tcefworkscheduler.png create mode 100644 packages/tchromium.png create mode 100644 packages/tchromiumwindow.png create mode 100644 source/tbufferpanel.lrs create mode 100644 source/tcefservercomponent.lrs create mode 100644 source/tcefwindowparent.lrs create mode 100644 source/tcefworkscheduler.lrs create mode 100644 source/tchromium.lrs create mode 100644 source/tchromiumwindow.lrs delete mode 100644 source/uCEFv8Types.pas diff --git a/demos/CookieVisitor/uCookieVisitor.pas b/demos/CookieVisitor/uCookieVisitor.pas index 11432ada..cfa19169 100644 --- a/demos/CookieVisitor/uCookieVisitor.pas +++ b/demos/CookieVisitor/uCookieVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/CustomResourceBrowser/uCustomResourceHandler.pas b/demos/CustomResourceBrowser/uCustomResourceHandler.pas index 0c73e15b..96d82f54 100644 --- a/demos/CustomResourceBrowser/uCustomResourceHandler.pas +++ b/demos/CustomResourceBrowser/uCustomResourceHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/CustomResourceBrowser/uMainForm.pas b/demos/CustomResourceBrowser/uMainForm.pas index 66eb1290..dae4006f 100644 --- a/demos/CustomResourceBrowser/uMainForm.pas +++ b/demos/CustomResourceBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/DOMVisitor/uDOMVisitor.pas b/demos/DOMVisitor/uDOMVisitor.pas index 65a58663..b64c259f 100644 --- a/demos/DOMVisitor/uDOMVisitor.pas +++ b/demos/DOMVisitor/uDOMVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/ExternalPumpBrowser/uExternalPumpBrowser.pas b/demos/ExternalPumpBrowser/uExternalPumpBrowser.pas index 7c89a29e..d022cd40 100644 --- a/demos/ExternalPumpBrowser/uExternalPumpBrowser.pas +++ b/demos/ExternalPumpBrowser/uExternalPumpBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/FMXExternalPumpBrowser/uFMXApplicationService.pas b/demos/FMXExternalPumpBrowser/uFMXApplicationService.pas index 8fcd6c05..db2c50c7 100644 --- a/demos/FMXExternalPumpBrowser/uFMXApplicationService.pas +++ b/demos/FMXExternalPumpBrowser/uFMXApplicationService.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas b/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas index 4e7eec84..5846ffc0 100644 --- a/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas +++ b/demos/FMXExternalPumpBrowser/uFMXExternalPumpBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/FullScreenBrowser/uMainForm.pas b/demos/FullScreenBrowser/uMainForm.pas index e7f75b2f..4829da1d 100644 --- a/demos/FullScreenBrowser/uMainForm.pas +++ b/demos/FullScreenBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSDialog/uJSDialogBrowser.pas b/demos/JavaScript/JSDialog/uJSDialogBrowser.pas index e2a0ce0b..89fc24de 100644 --- a/demos/JavaScript/JSDialog/uJSDialogBrowser.pas +++ b/demos/JavaScript/JSDialog/uJSDialogBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSEval/uJSEval.pas b/demos/JavaScript/JSEval/uJSEval.pas index 3ae4442c..ed617912 100644 --- a/demos/JavaScript/JSEval/uJSEval.pas +++ b/demos/JavaScript/JSEval/uJSEval.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExecutingFunctions/uJSExecutingFunctions.pas b/demos/JavaScript/JSExecutingFunctions/uJSExecutingFunctions.pas index 68bdf7fa..86ad3101 100644 --- a/demos/JavaScript/JSExecutingFunctions/uJSExecutingFunctions.pas +++ b/demos/JavaScript/JSExecutingFunctions/uJSExecutingFunctions.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExecutingFunctions/uMyV8Handler.pas b/demos/JavaScript/JSExecutingFunctions/uMyV8Handler.pas index f641882b..603abd32 100644 --- a/demos/JavaScript/JSExecutingFunctions/uMyV8Handler.pas +++ b/demos/JavaScript/JSExecutingFunctions/uMyV8Handler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExtension/uJSExtension.pas b/demos/JavaScript/JSExtension/uJSExtension.pas index 2f0bca61..e9735647 100644 --- a/demos/JavaScript/JSExtension/uJSExtension.pas +++ b/demos/JavaScript/JSExtension/uJSExtension.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExtension/uTestExtensionHandler.pas b/demos/JavaScript/JSExtension/uTestExtensionHandler.pas index 54f62790..e5013135 100644 --- a/demos/JavaScript/JSExtension/uTestExtensionHandler.pas +++ b/demos/JavaScript/JSExtension/uTestExtensionHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExtensionWithFunction/uJSExtensionWithFunction.pas b/demos/JavaScript/JSExtensionWithFunction/uJSExtensionWithFunction.pas index e552ce5a..b4dbf26e 100644 --- a/demos/JavaScript/JSExtensionWithFunction/uJSExtensionWithFunction.pas +++ b/demos/JavaScript/JSExtensionWithFunction/uJSExtensionWithFunction.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExtensionWithFunction/uMyV8Handler.pas b/demos/JavaScript/JSExtensionWithFunction/uMyV8Handler.pas index b4f5ec14..e20855d6 100644 --- a/demos/JavaScript/JSExtensionWithFunction/uMyV8Handler.pas +++ b/demos/JavaScript/JSExtensionWithFunction/uMyV8Handler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExtensionWithObjectParameter/uJSExtensionWithObjectParameter.pas b/demos/JavaScript/JSExtensionWithObjectParameter/uJSExtensionWithObjectParameter.pas index d4048785..708e2209 100644 --- a/demos/JavaScript/JSExtensionWithObjectParameter/uJSExtensionWithObjectParameter.pas +++ b/demos/JavaScript/JSExtensionWithObjectParameter/uJSExtensionWithObjectParameter.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSExtensionWithObjectParameter/uMyV8Handler.pas b/demos/JavaScript/JSExtensionWithObjectParameter/uMyV8Handler.pas index f1eb6f58..9f25d64d 100644 --- a/demos/JavaScript/JSExtensionWithObjectParameter/uMyV8Handler.pas +++ b/demos/JavaScript/JSExtensionWithObjectParameter/uMyV8Handler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSRTTIExtension/uJSRTTIExtension.pas b/demos/JavaScript/JSRTTIExtension/uJSRTTIExtension.pas index 31db6100..0ca83c99 100644 --- a/demos/JavaScript/JSRTTIExtension/uJSRTTIExtension.pas +++ b/demos/JavaScript/JSRTTIExtension/uJSRTTIExtension.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// Copyright © 2017 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSRTTIExtension/uTestExtension.pas b/demos/JavaScript/JSRTTIExtension/uTestExtension.pas index 3242aba2..11fd5559 100644 --- a/demos/JavaScript/JSRTTIExtension/uTestExtension.pas +++ b/demos/JavaScript/JSRTTIExtension/uTestExtension.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// Copyright © 2017 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSSimpleExtension/uJSSimpleExtension.pas b/demos/JavaScript/JSSimpleExtension/uJSSimpleExtension.pas index f9ecb6dc..77ff5e93 100644 --- a/demos/JavaScript/JSSimpleExtension/uJSSimpleExtension.pas +++ b/demos/JavaScript/JSSimpleExtension/uJSSimpleExtension.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSSimpleWindowBinding/uJSSimpleWindowBinding.pas b/demos/JavaScript/JSSimpleWindowBinding/uJSSimpleWindowBinding.pas index e1b7a5ed..b0c44bcd 100644 --- a/demos/JavaScript/JSSimpleWindowBinding/uJSSimpleWindowBinding.pas +++ b/demos/JavaScript/JSSimpleWindowBinding/uJSSimpleWindowBinding.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSWindowBindingSubProcess/uJSSimpleWindowBinding.pas b/demos/JavaScript/JSWindowBindingSubProcess/uJSSimpleWindowBinding.pas index b7898d2e..8330ffed 100644 --- a/demos/JavaScript/JSWindowBindingSubProcess/uJSSimpleWindowBinding.pas +++ b/demos/JavaScript/JSWindowBindingSubProcess/uJSSimpleWindowBinding.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSWindowBindingWithFunction/uJSWindowBindingWithFunction.pas b/demos/JavaScript/JSWindowBindingWithFunction/uJSWindowBindingWithFunction.pas index dd1960ee..7ab9cdc0 100644 --- a/demos/JavaScript/JSWindowBindingWithFunction/uJSWindowBindingWithFunction.pas +++ b/demos/JavaScript/JSWindowBindingWithFunction/uJSWindowBindingWithFunction.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSWindowBindingWithFunction/uMyV8Handler.pas b/demos/JavaScript/JSWindowBindingWithFunction/uMyV8Handler.pas index 8306c597..02015f68 100644 --- a/demos/JavaScript/JSWindowBindingWithFunction/uMyV8Handler.pas +++ b/demos/JavaScript/JSWindowBindingWithFunction/uMyV8Handler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSWindowBindingWithObject/uJSWindowBindingWithObject.pas b/demos/JavaScript/JSWindowBindingWithObject/uJSWindowBindingWithObject.pas index b3acff8b..df6a022e 100644 --- a/demos/JavaScript/JSWindowBindingWithObject/uJSWindowBindingWithObject.pas +++ b/demos/JavaScript/JSWindowBindingWithObject/uJSWindowBindingWithObject.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/JavaScript/JSWindowBindingWithObject/uMyV8Accessor.pas b/demos/JavaScript/JSWindowBindingWithObject/uMyV8Accessor.pas index bd25cb03..05b17e44 100644 --- a/demos/JavaScript/JSWindowBindingWithObject/uMyV8Accessor.pas +++ b/demos/JavaScript/JSWindowBindingWithObject/uMyV8Accessor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/MDIBrowser/uChildForm.pas b/demos/MDIBrowser/uChildForm.pas index 330f5ed4..18a7d26e 100644 --- a/demos/MDIBrowser/uChildForm.pas +++ b/demos/MDIBrowser/uChildForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/MDIBrowser/uMainForm.pas b/demos/MDIBrowser/uMainForm.pas index 0d78653e..dbcc8c57 100644 --- a/demos/MDIBrowser/uMainForm.pas +++ b/demos/MDIBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/MDIExternalPumpBrowser/uChildForm.pas b/demos/MDIExternalPumpBrowser/uChildForm.pas index ccf55162..06197195 100644 --- a/demos/MDIExternalPumpBrowser/uChildForm.pas +++ b/demos/MDIExternalPumpBrowser/uChildForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/MDIExternalPumpBrowser/uMainForm.pas b/demos/MDIExternalPumpBrowser/uMainForm.pas index 148f74cb..a4a9ac9b 100644 --- a/demos/MDIExternalPumpBrowser/uMainForm.pas +++ b/demos/MDIExternalPumpBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/MiniBrowser/uMiniBrowser.pas b/demos/MiniBrowser/uMiniBrowser.pas index 14c699a7..255f77db 100644 --- a/demos/MiniBrowser/uMiniBrowser.pas +++ b/demos/MiniBrowser/uMiniBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/MiniBrowser/uPreferences.pas b/demos/MiniBrowser/uPreferences.pas index b3661dc5..5190de7f 100644 --- a/demos/MiniBrowser/uPreferences.pas +++ b/demos/MiniBrowser/uPreferences.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas b/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas index 6146ffce..3063dc0a 100644 --- a/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas +++ b/demos/OSRExternalPumpBrowser/uOSRExternalPumpBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/PopupBrowser/uChildForm.pas b/demos/PopupBrowser/uChildForm.pas index 5fc8389a..9d694795 100644 --- a/demos/PopupBrowser/uChildForm.pas +++ b/demos/PopupBrowser/uChildForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/PopupBrowser/uMainForm.pas b/demos/PopupBrowser/uMainForm.pas index 813c23bf..618a8fc2 100644 --- a/demos/PopupBrowser/uMainForm.pas +++ b/demos/PopupBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/PopupBrowser2/uChildForm.pas b/demos/PopupBrowser2/uChildForm.pas index 064c0390..948b5474 100644 --- a/demos/PopupBrowser2/uChildForm.pas +++ b/demos/PopupBrowser2/uChildForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/PopupBrowser2/uMainForm.pas b/demos/PopupBrowser2/uMainForm.pas index 6529cdea..ff3db2ca 100644 --- a/demos/PopupBrowser2/uMainForm.pas +++ b/demos/PopupBrowser2/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/ResponseFilterBrowser/uResponseFilterBrowser.pas b/demos/ResponseFilterBrowser/uResponseFilterBrowser.pas index 51f36848..04912113 100644 --- a/demos/ResponseFilterBrowser/uResponseFilterBrowser.pas +++ b/demos/ResponseFilterBrowser/uResponseFilterBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SchemeRegistrationBrowser/uHelloScheme.pas b/demos/SchemeRegistrationBrowser/uHelloScheme.pas index f3a43871..2ce74e9c 100644 --- a/demos/SchemeRegistrationBrowser/uHelloScheme.pas +++ b/demos/SchemeRegistrationBrowser/uHelloScheme.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas b/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas index c2764f2f..a65be990 100644 --- a/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas +++ b/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleBrowser/uSimpleBrowser.pas b/demos/SimpleBrowser/uSimpleBrowser.pas index 7fdd409a..17fdde77 100644 --- a/demos/SimpleBrowser/uSimpleBrowser.pas +++ b/demos/SimpleBrowser/uSimpleBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleBrowser2/uSimpleBrowser2.pas b/demos/SimpleBrowser2/uSimpleBrowser2.pas index cca87961..0042a830 100644 --- a/demos/SimpleBrowser2/uSimpleBrowser2.pas +++ b/demos/SimpleBrowser2/uSimpleBrowser2.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleExternalPumpBrowser/uSimpleExternalPumpBrowser.pas b/demos/SimpleExternalPumpBrowser/uSimpleExternalPumpBrowser.pas index 3d2110bb..535cf040 100644 --- a/demos/SimpleExternalPumpBrowser/uSimpleExternalPumpBrowser.pas +++ b/demos/SimpleExternalPumpBrowser/uSimpleExternalPumpBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleFMXBrowser/uFMXApplicationService.pas b/demos/SimpleFMXBrowser/uFMXApplicationService.pas index d900bc6c..1826db47 100644 --- a/demos/SimpleFMXBrowser/uFMXApplicationService.pas +++ b/demos/SimpleFMXBrowser/uFMXApplicationService.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleFMXBrowser/uSimpleFMXBrowser.pas b/demos/SimpleFMXBrowser/uSimpleFMXBrowser.pas index b5454acc..cee2b44d 100644 --- a/demos/SimpleFMXBrowser/uSimpleFMXBrowser.pas +++ b/demos/SimpleFMXBrowser/uSimpleFMXBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleLazarusBrowser/00-Delete.bat b/demos/SimpleLazarusBrowser/00-Delete.bat new file mode 100644 index 00000000..0b5ba5c8 --- /dev/null +++ b/demos/SimpleLazarusBrowser/00-Delete.bat @@ -0,0 +1,2 @@ +rmdir /S /Q lib +rmdir /S /Q backup diff --git a/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.ico b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.ico new file mode 100644 index 0000000000000000000000000000000000000000..0341321b5d952e1662a3d9444a73cf9f42a7db37 GIT binary patch literal 137040 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 G`+orYGy**U literal 0 HcmV?d00001 diff --git a/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpi b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpi new file mode 100644 index 00000000..08245704 --- /dev/null +++ b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpi @@ -0,0 +1,79 @@ + + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="CEF4Delphi_Lazarus"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="SimpleLazarusBrowser.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + <Unit1> + <Filename Value="usimplelazarusbrowser.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="uSimpleLazarusBrowser"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="..\..\bin\SimpleLazarusBrowser"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpr b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpr new file mode 100644 index 00000000..48485cc9 --- /dev/null +++ b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lpr @@ -0,0 +1,29 @@ +program SimpleLazarusBrowser; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, uSimpleLazarusBrowser + { you can add units after this } + ,uCEFApplication; + +{$R *.res} + +begin + GlobalCEFApp := TCefApplication.Create; + + if GlobalCEFApp.StartMainProcess then + begin + RequireDerivedFormResource:=True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; + end; + + GlobalCEFApp.Free; +end. + diff --git a/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lps b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lps new file mode 100644 index 00000000..4ea08cbc --- /dev/null +++ b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.lps @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <ProjectSession> + <PathDelim Value="\"/> + <Version Value="10"/> + <BuildModes Active="Default"/> + <Units Count="30"> + <Unit0> + <Filename Value="SimpleLazarusBrowser.lpr"/> + <IsPartOfProject Value="True"/> + <EditorIndex Value="-1"/> + <CursorPos X="3" Y="26"/> + <UsageCount Value="33"/> + </Unit0> + <Unit1> + <Filename Value="usimplelazarusbrowser.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="uSimpleLazarusBrowser"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="-1"/> + <TopLine Value="166"/> + <CursorPos X="53" Y="110"/> + <UsageCount Value="33"/> + </Unit1> + <Unit2> + <Filename Value="..\..\source\uCEFChromium.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="34"/> + <CursorPos Y="49"/> + <UsageCount Value="16"/> + <Bookmarks Count="6"> + <Item0 X="35" Y="771" ID="1"/> + <Item1 X="46" Y="119" ID="2"/> + <Item2 X="17" Y="843" ID="3"/> + <Item3 X="20" Y="621" ID="4"/> + <Item4 X="57" Y="3494" ID="5"/> + <Item5 X="3" Y="1079" ID="6"/> + </Bookmarks> + </Unit2> + <Unit3> + <Filename Value="E:\lazarus\fpc\3.0.4\source\rtl\win32\classes.pp"/> + <UnitName Value="Classes"/> + <EditorIndex Value="-1"/> + <TopLine Value="129"/> + <CursorPos X="5" Y="181"/> + <UsageCount Value="10"/> + </Unit3> + <Unit4> + <Filename Value="..\..\source\uCEFChromiumWindow.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="47"/> + <CursorPos Y="57"/> + <UsageCount Value="10"/> + </Unit4> + <Unit5> + <Filename Value="E:\lazarus\fpc\3.0.4\source\rtl\win\messages.pp"/> + <EditorIndex Value="-1"/> + <UsageCount Value="10"/> + </Unit5> + <Unit6> + <Filename Value="E:\lazarus\lcl\lmessages.pp"/> + <UnitName Value="LMessages"/> + <EditorIndex Value="-1"/> + <TopLine Value="100"/> + <UsageCount Value="10"/> + </Unit6> + <Unit7> + <Filename Value="..\..\source\uCEFWindowParent.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="36"/> + <CursorPos X="49" Y="160"/> + <UsageCount Value="10"/> + </Unit7> + <Unit8> + <Filename Value="..\..\source\uCEFWorkScheduler.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="40"/> + <CursorPos X="15" Y="62"/> + <UsageCount Value="10"/> + </Unit8> + <Unit9> + <Filename Value="..\..\source\uBufferPanel.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="40"/> + <CursorPos X="36" Y="62"/> + <UsageCount Value="10"/> + </Unit9> + <Unit10> + <Filename Value="..\..\source\uCEFServerComponent.pas"/> + <EditorIndex Value="-1"/> + <WindowIndex Value="-1"/> + <TopLine Value="40"/> + <CursorPos Y="58"/> + <UsageCount Value="10"/> + </Unit10> + <Unit11> + <Filename Value="E:\lazarus\fpc\3.0.4\source\rtl\objpas\classes\classesh.inc"/> + <EditorIndex Value="-1"/> + <TopLine Value="1713"/> + <CursorPos X="5" Y="1726"/> + <UsageCount Value="10"/> + </Unit11> + <Unit12> + <Filename Value="..\..\..\Lazarus\test - 001\mywincontrol.pas"/> + <UnitName Value="MyWinControl"/> + <EditorIndex Value="-1"/> + <UsageCount Value="10"/> + </Unit12> + <Unit13> + <Filename Value="..\..\source\uCEFBaseRefCounted.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="184"/> + <CursorPos Y="207"/> + <UsageCount Value="10"/> + </Unit13> + <Unit14> + <Filename Value="..\..\source\uCEFBrowser.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="145"/> + <CursorPos Y="164"/> + <UsageCount Value="11"/> + </Unit14> + <Unit15> + <Filename Value="..\..\source\uCEFValue.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="151"/> + <CursorPos X="38" Y="164"/> + <UsageCount Value="11"/> + </Unit15> + <Unit16> + <Filename Value="..\..\source\uCEFInterfaces.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="367"/> + <CursorPos X="14" Y="382"/> + <UsageCount Value="12"/> + </Unit16> + <Unit17> + <Filename Value="..\..\source\uCEFApplication.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="1498"/> + <CursorPos X="50" Y="1521"/> + <UsageCount Value="11"/> + </Unit17> + <Unit18> + <Filename Value="C:\lazarus\lcl\forms.pp"/> + <UnitName Value="Forms"/> + <EditorIndex Value="-1"/> + <TopLine Value="556"/> + <CursorPos X="15" Y="581"/> + <UsageCount Value="11"/> + </Unit18> + <Unit19> + <Filename Value="C:\lazarus\lcl\include\customform.inc"/> + <EditorIndex Value="-1"/> + <TopLine Value="1389"/> + <CursorPos X="3" Y="1398"/> + <UsageCount Value="11"/> + </Unit19> + <Unit20> + <Filename Value="C:\lazarus\lcl\controls.pp"/> + <UnitName Value="Controls"/> + <EditorIndex Value="-1"/> + <TopLine Value="2284"/> + <CursorPos X="3" Y="2307"/> + <UsageCount Value="11"/> + </Unit20> + <Unit21> + <Filename Value="C:\lazarus\lcl\lmessages.pp"/> + <UnitName Value="LMessages"/> + <EditorIndex Value="-1"/> + <TopLine Value="120"/> + <CursorPos X="3" Y="146"/> + <UsageCount Value="11"/> + </Unit21> + <Unit22> + <Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\win\wininc\base.inc"/> + <EditorIndex Value="-1"/> + <TopLine Value="627"/> + <CursorPos X="6" Y="650"/> + <UsageCount Value="11"/> + </Unit22> + <Unit23> + <Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\win64\classes.pp"/> + <UnitName Value="Classes"/> + <EditorIndex Value="-1"/> + <TopLine Value="24"/> + <CursorPos X="18" Y="38"/> + <UsageCount Value="10"/> + </Unit23> + <Unit24> + <Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\win\wininc\messages.inc"/> + <EditorIndex Value="-1"/> + <TopLine Value="1321"/> + <CursorPos X="44" Y="1334"/> + <UsageCount Value="10"/> + </Unit24> + <Unit25> + <Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\win32\classes.pp"/> + <UnitName Value="Classes"/> + <EditorIndex Value="-1"/> + <TopLine Value="114"/> + <CursorPos X="49" Y="105"/> + <UsageCount Value="10"/> + </Unit25> + <Unit26> + <Filename Value="C:\lazarus\fpc\3.0.4\source\rtl\inc\resh.inc"/> + <EditorIndex Value="-1"/> + <TopLine Value="42"/> + <CursorPos X="10" Y="56"/> + <UsageCount Value="11"/> + </Unit26> + <Unit27> + <Filename Value="..\..\source\uCEFLibFunctions.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="33"/> + <CursorPos X="205" Y="308"/> + <UsageCount Value="11"/> + </Unit27> + <Unit28> + <Filename Value="..\..\source\uCEFTypes.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="1248"/> + <UsageCount Value="11"/> + </Unit28> + <Unit29> + <Filename Value="..\..\source\uCEFMiscFunctions.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="106"/> + <CursorPos X="50" Y="124"/> + <UsageCount Value="10"/> + </Unit29> + </Units> + <General> + <ActiveWindowIndexAtStart Value="-1"/> + </General> + <JumpHistory HistoryIndex="-1"/> + </ProjectSession> + <Debugging> + <BreakPoints Count="1"> + <Item1> + <Kind Value="bpkSource"/> + <WatchScope Value="wpsLocal"/> + <WatchKind Value="wpkWrite"/> + <Source Value="..\..\source\uCEFChromium.pas"/> + <Line Value="2233"/> + </Item1> + </BreakPoints> + </Debugging> +</CONFIG> diff --git a/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.res b/demos/SimpleLazarusBrowser/SimpleLazarusBrowser.res new file mode 100644 index 0000000000000000000000000000000000000000..877868cb4251927ab961b2295948c0d753ecb7cd GIT binary patch literal 138932 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%0Dyf&^Ri6{F0PF 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�naFVJ}8`g;O3<vub`1MHe&zT1Sh zM%zGdk<Tvhri;t{&=#~Qr7iI1_66k9CLBwME<sl1%gX$#urH`{td}}XYf|bI$8Wb8 zvbhPF+}IF6*VnhDoHcFe{4!rUHrJE(j(4KeLDm>EH$cBoRmcVWwH4pmT3K>FxEuJd z0S$#;c7PAyb!271LrLZV!WbX>7t~>fy87E%ny>NKR(QjHpLtpmZb+$vMYL~{D;=Nb zP3IF^)0H)C>DszL;Gahug3!K_rBIiq|61$|>H&YQU$X*D=wbYA89-LoLD!N4=<=#I zbT+|{vS)eHuCY$YsVr%_zczJ1oMoTuqu2N`u;4hb9mH#hx`1>!H-`@Jnt_t~<F$Jg zQ8usD4Ft_-rPt(EpjHFST`37XZR}?y@OX5NH=SMDnl7yhpsUGf$NC`Xa~`GOSi)4P zeDV5u5YR8zpGNYsbTk1u|Ch4Jlhd`7VAxF%<v@NHSG1+mi~Z>EbWh3{?m+8$n$vK% zmO>l|(3B%rW9`epgXfGl0v|jtA^2wHyj-v(e1I^w1N`eC=A#PhC?`|>9RV5*gnsEz zm*yC^v;c38bZEL4onGQk7gq+r_Je?bFkM~8ZTUI0C`$Cpu`4Nkk&%|7QJoCGDx0h8 zbLEzk97LDb1k#1&0d#VqA7#aPP<oUd);^n1FO09S@AcPG_zQ91FmT~{qGdSt0U3gL zO?gT90KxW=U#P+Nhu~rQxvjO8Ua<e^YOYF&?Tsld(jL5d(uoDF>3mWEY(E(IhtQSe z5a@8|Pos{WE&o{j^Yy4#Ypp`%!}7bbCK&PzqI1gv=;&Nu+CAQlHVv?$S#5REA5fw| zEjjYiZ*~{h^VlFihZqYxZH1#U@<8qn7RLt&ai47;<zX7aI?COk#fbn7Im}NeQJjw! zZRm$Nta0v?J=c%UEXDg%SAyTwq0rk9y1W+0pGZEUMt?m1l9Cd%Y=mRsa)KN$tq!3J zD}w3NlD2esh7bDIE|lEEk|Ld&BNxOxkw$}$4(7%ufe)Tf7JLBjRbWs8d4Lphz6vOd zpKA}cvoJ|$qbc{EZNHzWDc0+m)3#yGbO=11S{z8{l7i{ts!##{ORK|h{JGS@<IlH$ z_5)>0%TV?b_|3xP1({x08A|68gXzS=Hk38lo3;$Lr-X20jJc?wKPX3j+A1%AQ@#(F zgwMQgObNF8!+imcAH1dm{=^*R4e`=#e7UV=1Htwe1R2og2z%N)$%~FHXiI071=INz z%x4%VoGz^T`E)8Nl%%EqUH$%izh2a%3vet{W-QMYVX&`II-L+q*|Ys==NNZd-&;iE zJvAvrNALmUY@&MsK7jLp1RVMKSzTbrdr|zz95Ijgl!e`^pd4R&OVb7LGauOYqa4&Q zCS^q#Bi-omOn>;L5IUO({+5S92f}|TwYL3p`hVZji7FM#d|Pgi?YX2d*jXr@h!3Lu zQ++8t+L@MjG^4Jjs)7&j)mCO7z<q%YAl~=J3Ha3q{=9CqNPny|xS#jl&_NkJz4V%% zVcQSYSE2<$+}C%ceQ_9{SP(>~mxj^Vq;T-}d#E*H5gPZ$(>7rGEg7<m&%n-3C4^A+ zoB-N2&Wlp|+6q2^`vR~}Lf`BxaN}o=c`u_d&f7VLLq0{y19?3ku&)Q~9c;`^<NP%m zyyskVkZm)pUB%k9(Vld8R$Dr;2tH{k_*(XRsWbfGpRNP#UDdxY$HaDs0bz7}VF(?V z=1=J{u9Vc?lsXx!5ZkAZw#qZ$&d(9>+|XcPZw5ckd)O7FFDS`ly|}jt$_nz-Yj%Wn zD;T-voVEtEDS~akH65K7OedFw(<$J8dMWt&%{02B1xfwO<^hVLlcCP)-<9Dh$oN!3 zIP5Nrj?4+9o#R{4x<0lv+FhLj5u4kn*C$6a!&AV23$TmB(Tn#}DaslV_Wiu35BC~~ ztSlq^HRRr~ZuPTjOsl$D()JM^bZ}-M9g7d66N}qH2mU=YZ=e&w(fyIWptFaTc(R1d zPb?0nqYFYQYib)xi*li*;U;+2SV@Qh-nxw+0(;H_7vtC&#Cs4`gf5CTH_UU0=sVVB z-|uRqxrTL$eg9-{JoDb)fp$-7O-JU2(6L3#$G?x<O#jSrfj)lvV$1XRqV{xbVK^O{ z9gJAqiq`hDp(uMb;;|XT>JJzb<n@Bdz&?s&0FL602TJnTF=Bs1+|$NKTlI2Vjr!Cc zd0%3<8R8A*B&P*Z_PlV^-wr;Ycr>%G18Fs?i@A|X#5r)8Qqlq`)|Dl9)5gTV|41FB zQBF~O@4w;NDLrkA)>g>>$lNg68{3994RWEGt@S>|0N5?h3v2=LSb!V+e*-a}9g^ZT zy|_oy*1~jP8}$Ys*!M@-;rYxSHnd}`AAEl(@NY-i3);g6{TK~wV+_2@iiHu6m4`ZN z6sa!l#&yLi``>^&^T2CUiz>_P1;8J6xPN*OZ5!^5zMutlHbNeVT#fTUV94u3=E08# zqaV<i*XyFLZ}tN?Ph?-gV?G}GYAJ&6$N17LKRwzQ;X-@j0^oCyd(3T*y1D+M(SbQ( zq}R0m4`EZed>L9l+E=VPeXZ1fsE*&I4|26Ci`A|#<$W0PKR7cCd7wWf_p+zqPA!Cf z0ON)+8|*V7>|5H4`|-R+@H=b8g}FZHOMP7L>Z_%6gUjiJd4{BR=9E6n8~H{s9h}{c z4$mn%?VAxo)hm}P7A|ElR=R$q?|19>GW)Z}1Y$z)EZh&s^bqbjI4hj?Ob$d0aHIMD z2E_BijGMb*%WJS@-g|5)$Wn}c;HTJcV`(0WGCpwZk4B$=b$2_;7~@Y_)5GY%taiBs zJvdMVQm7+aEbQ}bvqIU@lr{6)b-NiiE|I$O>-?F=#&Xq*B*)KW&REP0r+rgHY3s07 zuu}`_Vx%nKkKFAka8H9hV?R9`-fyY?cX9w>t`|O|g`1Ja6xJb*C6hh1C}n^P?VK2h z+%Jsw&uCX<GHxzkqIh_jHTxzHP6mHQAAtRS>bQV!w&i>B&YBMVflJ1iHh7NEjv_@( zfLnc`AAtFKeuj7!F!cxiD)0e?&IfU9;244Hb<v01&iDtR-?uo>h*BfHXxF4*+B=o& zDjH4g=2)WGvn@&^U)mKHS|~5}da5N}XG!@0=Dl{+iqy;7piuscD&xIV!f3~YKw96= zm15mA1-oVZ98L9)0?$RjzkPwR;IEDY<d6H{dQ(45#p`^3H~5moc9w|!ezYq#gm%Y; zA=VU)s#h-mQ?M8vCMuK{2i<=U{@i|@M)fGnL5mjkcQ2IZqRRE}>q7-xc1{SUO+&nB zVOt{#z}h^<&%>a_HDHhZ(M7$0zc#NAE-VM++~3H^s21k=U2*RRzCQ}SWK~yN+BUKc z{C^1ToD>Q_AU^f*F!(9hvn{$BHZGKx$(<d3TD{`<0Um?YZ_<F4MX=u#UtT|Y?aoOd zu>WA%65~h9!px})#sV2X^aGy)`?a9K@c%}@Shf)Sg|$A&6Y6;wsSo0NIfhJfQK#hI zF0^fQ0A-F30b#tU2vo0nrJsg_NK^Tnyl|c<4pt?74X@{j?P&i^-ijhav9BE$Lg~Z( zX+<X+8jP`e#*oJXfj#d@J_3H7_nWQGejaW9@-P3{9tAJmCUbJ}Z$Ptsb&>md!2Sbi z`<S32QR;{QJeTqF#^S^6wZ6%Zowmv^$Dik)mJaaxCSOIBV^OY8AKn&yHAfm{-(0|- zal|+PuL~Ow?Cn9d+0TCoKF)>p9=J}~M@MxN-xrMBFTSlIZ5-rH>A-R;bYSZ!@u{Pe z&QFs+%XvvZ&u{XxA;zC7mHV|mAk0?tn>-aoenq|(_@n{<<UVc`=cfJ%e`ixYeoln< znRQ|RUdS_IpZflOT8hUQ|IT=hdr6QfZ5-@FX~WtUnN;dl{b~3IS*eS~&ywCAR0`wA z(C?p4s`aXg#nX?-QrvsC3~fv6`g_t`AKg!V0Cz+6bHINJ@b`f2H-P{D+CFl^oIieV zg8ANijDKGfRazQqA>f}H?N3D|9=9)Px%2Z>9tKT{#LJ{m8}t`To|l4cD=i~UYa)D# z#8*+}DbDqqqx@<80B>5@+JHi}vF9*w#M-SJ@cYw2yhn>dA!`97d7Y50g_%0;`N;Q0 zS~kL-l_J_O$d@(_X<Z~56JTB9*jKMqj%IdnED|62e6Q@^iZqq$lsHeU1Dxwe`k4I? zU-|r%<dN}T6kv=#fTDmu`T&n$|1*KVFEB1_O|Y=m+sR1VoUvybj&a}Ro$M)PppT#f z8wUH5xMb2)uEb=`Ht(j_NbI`5#p9$98>){!NlC2}DqBj1Mh94m#amBjJyMgaK}{M| zr)CXm;B!rCAzzc)+u}KjBFOfe*ADWd_0aVtL1xq&&j~V)ep*V;f&DDlKJOo=3?Kis zF+c%-SA&+0`S_1U4!NR>1N?~(r9}7@iDWB?H@92RhkosI^-ASwMtjF1)h#ZsQLtIl zrt-vog>~#}^?&O-)jCyaRX^`<^0uIht565Whi{d|zniNmP(ly)Z<Z%c+t&4KMG1)8 z{mmN+__x+ncqIn@g8#>yZ!5;1$Nk4UwxE?=ooU?wUqJ_055%EWeZ0Tf)^Eun|2M(r zbsLFQpEx{y@0w(^t-qTg={KxTvgOMbx`vF$6bu_Rps{VOzssA8cEcjefn$k|a^3Hi z{jK&S_w}ZwVb&C3nLh>~_ZRGbM!x?qEdKMFPfwl3f%*7Pa%o8`ySvi5em>9vKe4HU zt#*;yosT;oYs*%oS?!&~uCFM(iF@s8w0TTh5shqZMZ^6pDaOZwW_Ms)5Kj(X2F06y zR<2!@){0rzmprZQ+lrR8v!O_<rg?pU1|NX^G|)HmKVJ9cqtmcsKK_&4G-zcvS6bT# z>&yE2icQTB*9zh(?q`n4e#XtkuBRwG{mN?t&DDRX{a?ySwNAAklLh=Q;~yhx_NfnO zV{OIxzx%iPf1DTiYOC}T@W&d086KJf{%ZvMeZY%&R0aOCU|YoL2g+5iO!GRqh+T)c zy!?*qDwHX?F{eH*hDDP}Umsf2+Y8TS+tF~l=AZDlvovS_@679Z3mgC8xB&dS<l{fx zU5l1?b)hxAylE}U6_?6k{JS9jWBjej+o0K3$AWpiXQ-uy*ky~$!|%FoX?M@h+Fno& zKk~VJnNmfP4cqGKUY@Xj;BWgk{#eg5899I*`hT@x=U*NFWxW9YZS(P;;;v0eon2^k zPj6b?8|8{g1?{~i=05Z9n-%Uv;Z~YtsisJx7D_ZRz~<9$`PcmE$K^e}N)&(AneoU& z#Fh(ebyW{f<bSplW25%T{;jPnM*x2d_<+LZe<WBhT4^ae=i?vi3j8}dp*-N<i}Cjn ziwgFox;yBLb&t4Z{|VQX)YwA4zp&R(6<>zHX=Qg0JP%@vxqIM`IL^=R0e61apdm0W zZ2nh*=LNmBR7~^npWupjpmuPemCz>vf7Sspi1DvqtrCS;Xoz*aIA#7x*KppJk6lR| z6>3xwTaK&XtCx3mr-Tp@4Yo%92mD)W$iD{mJuv>G#cTV)(^uF3@VWr(Db*q$|FO;* zc;})$t?1@KT<)r#t;C{bUA@G*PTcaoc3o0;FB;`*MWN8KzD|bpE9(3jA7A@!sJBIl z;$N$B1@YwxU%jH6J1q&erh!&@_-iUW1@__4fo9yt2mXaU10dzC-%Kta|5146VrjS? z^vQ!(GWNZEe=Ch{Eh4t9!sc>#ELOgTEDdxs{jGemoGO<qQ(`($17o1#%6=vAUyht@ zagZhTF>5T?Kjw4q0ee5h|H8(8p%TKMq_vqzIpF`A{YIp13ydS$0Dm{&5Bu-s^IK?6 zI~S@|r9zS9S+{B>8sl&CTli%;wbE}^Bz__NLa(n{p`6(5VEj2}UlfRS;KmJw{15X# z7lFU?H|GBH;Fpl#_2GEt>onuv*P<yc4z@yhZty>x`}zHHiVJd}?~R>*OLqRoEq*!A zET@%_7q9dE7H{JIrc|q{SZ!F<3-$JBMTs3<D87vuh3e)$4~%_#b_09fr~kXpfN~Cq z`Tu0bzl%{rto^oxKXFC=fpLXCt$!)a40j=!V$R!hE;^>Q?Jwm!UrxFzKlYs4mwI8> zQdMmJ*-jHXIMHlBBRmV5yDt#tbe3`M$M1_l*<a25@O}QD6!0I*^FJZbpZEYX*gx<G z_G|mM{iP&_ycbLrn>a664x9Yd{Lky`S?D}cQQ8&ZVJ;T$Yx=bj;>0qnk%;xev%p$- zcL?V4+>Et`!S)-8xhJS3@DE}9S$}5x8VmTZ>5JzJ2L@4c#IK<q&Zfo2y`YQ(EVK&c z-QQG`nl`9K^{Q2-${4%mF*lxrQj@PuHX4m+T##d-_kK?vDs`$CyB(_r1c+7t+5v&I zs<$utYz{QaNej;b=C1#-H#g#EfAXLG%D3}EkACWM`m8ssKNH<`5l@^1|FaJGuNxHd zOQ>AwQpJ{ALHrxmt?>`OLq&SR-g^bFE9|qGnli2ZfwqqcbShRmWRd%cEA!-mz#nls z0b_rIZJG=C!<Jtn?>FJSAPZUd{SQ6xGuJ5t{GYS_MB1s-(suR&{_6*YQc7g_Pp1Vv z{E8*BuVL7zUd_+=?&4%z<T@&1?tg5M^JnFVBaa&BzkiJ<alY&CX(e`j>mq`Mae^fw z*4PiKk<j<UGu(L3ylr!g`-#2(3;2=*{;8Y;b~VBKnb8O2oHk`h7;T8|KpTHD1zGF; zu)GSBsfS_9Pkhhn;`_tvzj*9nW@n#IWr-t;KJJ!3)SlY1mBg-xabZ8P660d?koyPc z<^Fh%b1v*(zK}H^5ZBlL{M8!_;2eO<ncvo2&@0yUjYB)prlFmGDz#K9nY<Y-6Xee0 z@yq&$eB#-%W$~U3=Ge3%BK%W%;>e@y55%+4!Px6rOj&P?=_ug8yo)=H_t5{8`@0&d zw=IhA&({XOmi2V<bHIsS2ErIH+yACvT_|-#x1UNis#N?Td&$T9%Oln_e#UPt*wvTU z6!pAjl}eC>_;O$#ic&{yj9-Z>=gq^r3VOo%8Ru$)5VJXUW8UW}{C<<~jQN7CfBu;& zRFg&wc*NxlMtO-HvGxi6h3ncfs^?Fodeuv2p9r*yDq<Y=OMVL*Kj!O;Laoen{!#Xq zbrn3XTTT4_>_A@!vCB>!)kDCa`?ow^-!U)tW88NKzoRj4&xe14{GD%r{|e3l+8Z`R z4q%5qXn=r!+UVYtHnz`CBh~t~i-g0sFdG`={trG2&QE{q-tYaUSiAZ^%KnyIRz-Kl z-e#Y#jrm#~th3)L=gZ%=jP51G<<*#XnC@r#DfVM6Uo_TqR6!kId)^aYfBVm0y}ldA zfFK=3ifd&g^ex!`r;qJRTgUgKtrPnH6w*{xC=vXP)KtI9UrFIFBQ5>a^1mmS$N*Q; zYobh*(YFHv{~#|jUGd8W4ryb0(}t+_#Ib*fy=MNn&s#kA$M1#w;djHr{!4-Ga|{?D zQpY&3n~?vfkL^d>CJv-+lOlc!IqDaG{iJNg3Y0$K>-?1z{*2wmF_1+u<WQmP=ktWj z+r}|{#4i&#q>bq%#O4I}{`N+>{XVSuPvf;7;`aFq^91k#Q#l5N8mQuZzP7}DO!hz9 zV+T>j<RL$W77y<951aU!ofP&R%aF?`jK7jvpTqSOR)@IXm-^zlkVbNKi&Q4-9>;&4 zbBJwa{K@yX(pC)y{$G2}r!c6$`n`Y4`nvfsV62CMFb=@=ZI2sFnNy>G8WrXn3&XtN z_lk9Dev>cu+Xb)x(a+qcE3OQ_+#g|VCx7wFoDwDY3GO5EnxB56mU+Iv!9!PDtD42N zeaJ=lLku{<F`z5<)Jwz~Z65Pr``<AwhIURL_EX4CPveI%^0zVhCQoI4pf3(V{DYs` zRjYinp6|&fW$eJu%50$`U!?L__c+(!e%ZVr5rydS9`IQ2rKvExBy2wqehI{Yfc&wb zSRYfNACNw-AMKbvly=P;0UBB2v|?o6&t&s8`4{%xs*(K)<!4Io@E<Ps%ld*GEeowj z9GOh$7W|2q(&!hYO^z-?c_Rcr!Tn2KgEj<vOXbb?{^hCLq-janKI;JNpT`0&u@C5B z*<A27JPyG6w|mZL+B0{|Poa7>ioTALee$>XX;7>9^Kq;P97A@@9`((-zQqUswkbA> zOf{OJPgshEwQntUS-a<q5%h#(Fz5XX(Kin>z*-;JzQ2b2lH%n2jQ7|6fPV+}0qkR@ zwzd#_4#xn-fA9S9KZQ&*ioS<$GbOn~c}W=7=aapmjm7$GuGPHIdVZEXK9xIf9Pl4O z>Erqe>oTI9b@OfiJ@UThh3xP3HCV;|4*2t&;7y(r?q$W#g?b6&Q#)r4r@ad%P*(h; z5+}o!MSq5}qnBf$eCVl_%$~5NVXvvvh8J4T&yYoanfn$_6!eaLFXv&4!W}3)ug{0M z-j#^^{A^EQ>wCq<`)d~h|6c54*ayV=nhQQ4BW{SmPu8M1+P`=*?O#%IWC|MtA7YbI z{W`Q~QS4WF;O|Rf+?V@&(+73^Y8@rn_OF%&`DURV96LDw;yKwN4%))_9DMT!Urj}= zpM^c^1Mn}6dd{*B=w#ZImUech)REn3_pDI@_6HKC(SfBUM>Ymp|G-`f^RJA-mwM5% zk@7d|o-&}zKkoUm3~|oec{+Tvo|0_;Kgvp&3ZD}z^t(9j&kRJ)udkXH_Z!SB$(#?e z`05{YK$PDXh;cO#`U2Zy2UFI<Npx`O3_6rJv&6{N-0&Zm^$+nC%8wsDfWm-<ubl-Y zjUDpcIwzL^{&q$>->s)4+y8l4GX%ZcJ9nHg{<gAvE9!wb%(e(T?)zvd*92fc#qWQq z2+)D$90$S-8`0bld)gG!S;$A({tqvoLr0d+EfMmu`+VI*DH)j`E_YUB?|<kL+9lR^ zJYLv81n)d5p?3X9IfoNx2|kwNKKJ*>d1IbOPg$`2HX3s6eiint3&6iVbnZF#H+x#E z3v14|A|CBqFj2rid*yt}UbUdu6xHeP{xM@!tD0=F%2aP$^gW@=l_^6BW1@;xZ?R<o zd9p9qJ$sBW{~C|IQQ8|f$zR{OuW!4+ADZ7|EPwP5I?zjq1JJ=??uN8(Aoc~G5={pa zrqj{Y3+dR}Ma8CliL*bm&z6l;id|+iRi)3$MEeUpS8h;`_AH%U>^h4ji#74Y_LLPL zhdI{)!gD3PMH>12y}#OO$!q>7hQ+xL_zP<Uc}$4oz_dUcAr9=p*u;?)bLn{U5<0Oy z0kpJORI&WubEGboCdDc%pO^JB#*@fUm)N!o!{5ijx<u;Auk*)_33M!Zv0(c<rVSNr zY$$9^@cS5xX`|7gZ*edz?!C}~n(zU_m_R3UHClrHKpN&QSyzuiZ%=MWq*EK07mHdp z&fP<+c|#S-TCuQLWqrxZ`2Ib<ihoPQi7&7H)#oQSBnkS*w!dfYSi!cYVZRKvHMTj( zJ_Y#wl6>!5dICPop#$%EjYwbYeY^_uklQB>68Zvc|ED&upwp?Vewd=Wcc8(Y@Q&eP zlu_8ditz7f+h<f6>jsWN_J!T^tG++AX*q0vk<i~y!}^{@9o(p+X|w!%|C(=$dey&$ z%dh+mIuObI0rpEnT+k=Pa|oQL9$qm=u%k0uR@2$^wf`zgUp(_O+*uEJY+=K^DZiah zme+}tWkP?CV}4?{R@5DNcHaEXJIu)&|4MwnR~PV?0tsscc|2m6hY77897ellju3J| zZqK=G>;F~MvdKT!fXDRc^!s_-x=!$!hm&R#kFBog?N5EMKWzSbe$2&o_#Pg=<9FbX z=f>-A&CdtN_?TmEssnL8$T`f}^klk_xe>I9F6`L+TWP_#;h)()k0%cA)9ttN#Bw>G zv4PlDvRBQc9aCdyP5(d|;HdX^KVQ9m)bGGn+&Y1OMbJS(2aFoi#Mait&n57f)$w%+ zbZ+~4y0|lyF74Vvmv*Q9HtO9j=o9`j7*mR$H0rnUBFF*qV4L6=$zugOrwtRHwH=ID zn!lz4a-AkF4!`p{@X39GbNM<j&d&<-R2^y0ys^k<69gT<v^$+H@7+pQ_HO$v#PyfP zI)U=#%F@=vg};S|{I;_kSO?C*@AJ3`uc=vs=XeJ(_IYFbkm(B0_nzDTov?paH+WTq z4qVCCff3$$u>kW{tOFNzY!qakvp<u57mXU&n+~TY|F-(M-B+?Q=<=R)A?IMb=bU+E zzqZuhL9d|Q^E;UNeI0+)A9$_{9XOVs55#zw(mEk094X`joC|RKuO8e<*ADIe-=c%N z=<0zTf)8Z7=lKB6^^$tErrvhi1>^lf$nk4?b^Z~$0N$%W2X?RygkpVC1bo^G=y&E6 zjHj=hC+I!vz_r7B==zbpbR&D;|9j$gvc9w5=Uk8Hc=>sXh1e^kJH~ZC&FQGuANxmu z{2eBt17$&L^T!9cjSD(?3T@`LpGjLoSN3hE>xcK!&7=G2=CK2G^Z5TmLc4Bc?+5mK z5bx75HkyQWGZSd@u&xvvXh$8))N<ExXv*=scY1wCtbf$cXb-O+9RVHq$m4|E)(LHF z@yuFhp>M!r<J>2>4%yr~c93qJJWRJw9{K-4Cyvmq6NjPK`-NC{A!FmGJa6@YV2VOq z3`1WjZyx^<<mC28fm;M-(KcJegL~XoZu1~lBTDMi2G0@<CZ69um%fg!?%yH!fIFwM z>CWk6bob2hKa%d8IR^fZ3OdYo&-wnTO)G@C5q@5eePB-;Eg{F}_z1b|hkO)@AkIJX zQnayNeonx#u9Ia;niPO{Oktd0_w3QaydjSfa6DiiaQEy9x_9m*-8+Bk&miU%JhR@i z-CsklcYb?{Fel3M<E#1y(@-ySYG=|k-{13GPAsU@9|`CWFpaiyJcx!Kyx}oz_62>= z=ULFjJ8%9lmQHP0F7%B!CtyFo_}{;9h8|pGI{PoAGXj6CtL(d2e|b!Y$3A)8#>Syt zX>za=b+ytcX!ExrhyS<!{(Gu{wyQ!1wg|Z)_L*sq`K=f)Gg{WW4c0pJr~Qj23-d=; z_G}Yk!rimSb9La-IeK{c0zJBN@wXE5@bL0^dH{azpFb`5`x{60(ZwC9f*<2~TYgq@ zE_{7I?1L}FdES#zQ|>+59tYz682{)0Act1agBu(NIVN;4YfjOg=9JLOU(kcBg>k}s z7{>*cFZ%=b1%eJ-y+n_%Ue2X!SLpH2Ce-x^bw0|uC}7XHbDR?VJjU;N-2=~gq>ku8 zb2<WdCj)ASwOX9_vYw-zd(d9>|9Q~A5CCMta|fd!pJ$vOhUlsY{e&UNkK?=Iy{aR7 z3hT_XSIiT}$#b$Y>DKXsLagO@z<4nBPp)63CpU8G>CJ2OIbFy3_vrI`^2>U1Jx9<n z_BkAbIKFdUcNu*-UgL0R*$iR)E+x7X-dE^GePQp6JI~wY<#$)mzF^RAU$gOr=>Jux zkWW<*=LW*wL+lSYSL%)YU=sG>TrnU7&%6#0)|&Eo`PsC!0tP&;a_7`h_=VGgT^7^_ z)`4fYZsgMKoAj(O!Zo@2aZS)8_A6Wt`*+SiZlf>9V>j%FPH$c*jN5U}x&`~;Ebi5Y zM)`@TtF@-!=h@x^G=#kVTpsR!>^R=<P!Pzh5{UPpyUX^&^5ikZj^-`UZ#1Uq;qJ6z zV2H36&CVIaiPxU<nnRvLV|>^@@OUEo=6mN(<mQc+zsMVaE!*?MD~RJ)^5Qt+3g;QO zP8<@(BY14;Lgr>+td8}K*S2vUzj<U2O6b!TeHTaQroNE7@LV0|vw430IQaJi{W0@4 zzXRv*)d~6W9yIRIgVm7hTOmh)Pvv!RoG0|M*TXv+ZD@8Uyq^Gj^6_3M8F7(9&V69< z6k(j1$Cub%*;nv*JNL&fWMCZvuSLK-#QAM0!q@|k$MU)>)+2t7fwA5-bEL4IZ8PF| zV!t4o*3O-xy)393`tF>shUzyIbTiM#-v_T#LAu{-*MGkkT>_A6HBcw$!anH2$9%uQ zb{B5gM9_yGc=u?ehZ&7)V@K25dr*82f5A^AM|PwQF<oJ|J%v6dKd-=j41SJ|_cPl( zqC2g}b1Z9yw4)^S(HC^{r75AVf^J2)7*jX+bso25z2lg~cAkg%8`e$m<p%nn>BAQt zy^_5HvaSL0f$V34F0#*MJQx?wxp?lJvEm$z?Ua2*CySQU8U1gz-Cp*()Ynm;dfDj; zF}pL~LCCR%G3I<D+^C6gKkF8k$2qBhH~Ma<kH_jpfviEi$IgF$zgYsnK>-v58V7um zL8m}(gjme|u6+Ffj*KPi$tTLgHV@z2_?_EVdx|m+f|jD(Xpk$2_tX3D?+=gwu;O*8 zN+25$zt=nj)D08?LSIvEB96mA{Xv~U{O)THkSVD4AJD}ASo}`{|4HCK3H&F4|0M83 z5}@3_7>T?OxrZF=7+m0sk6g6*-(Ni8^D=**$ME^zB?y-nxZ#cPvqY8r8**~bKh+SE zd!AoF-tC_Xc%S#PghFlsLhbxr9tS!3zvmSglYcImdwu??ghVud@u~Q{3O*Gtky}9? zw|tkt@u%wYD$M!2JfXtOzt4pVWBxuDT2$ba87NS_z|d#s=0pY95g01Kj=)d>b_9mL zJkKdu9~jL1);SoCDfs)B=V(B|pBdxN&!azM9}W8A-2BV)&zc7WzBpI-^8B;rLjd19 z|4bYZ(D%-BK5tK%FV3Zld!8xr*`M@x&LzM2{oi)}5B_sLYo0{0<@G(hzVrKc_2WzZ z`BLA$bN&x~{!+icIFJ6)UcNa0!v0`iF$D$sr9I+2v*7PvvG1IMzr#a*b`FR3nE-MA znLrf2IRDZg!GC=wAo{|e;k;l2!R}`b68vS%-wX;4JoE2!!QbZmeXhXw7hqU8FTk)l z|6YKhXg>cN0ipT=3<=d2VCc*EAyi+WLIp0afJCB&)4waoJ^fT*Uh$tG$}9d;feQK8 z=W!gJf1WF{Pq*h`md6cWB;4@#<w6agO6LncO60YbPm1){#7aU!5fUeo7Knu}E6e}q z{x!kD0u%$16t2XFf6t#J?{~-hT{7Wa2c`1%KK%bS$0~`vy-MRfPF3(OuUh;b-@JD^ zso>o{>im8;kOkiHsEgm5;9Y+T{JuZPrVhXRhu{17Gxmi1nQFlNGT+QUw-s$OMB9S! zIod`fnj#WeFSM}{t-x_DXgw$e=j%YLMb_2{xMn6~Fb4Pa0NH~YfodBY8&~?7dn6WD zCfsg*Pb=D~44iG5f3#%=x6{_vI^E9BdY6N(b(XWp<fxmK(HT!my-U898rQrnwXe8a z8J>3$nVfVKSsZb&6J^=kiS|Gq8Mt=?%2|RkV?aKvGq9JMdGCe!SJ(=-8~9cLW-8#- z4}4Fzv9U_Av$f7}u{JsCYu@rkxM{;zoy?WqcQ(gf<mL+0-BJP1Mk{?7<lOMX06Ucr zJ*<>IcC%2RE@tx7*-YU>2Q!toZOqi}yIUEYx3{rAXlrA=3+1Ll2FpObAYUEmLXA9q zC@yqAdcP#=IomAS?GCJCZEbBfxmp>W@HcO9o7=!`9pt3?VMahRTH3KCt?H&h8~SKb z+CUxJHdu!;qjhQf5FJX#`KEr_w6>=vC3aS)d7)}F+_TZg9#)Ff$xP`(kXh45UKV<n zZEdU$LMOIE1_`LM3#g^LyL++U6;V_HFy^ScI@)dpUd8~M6lY7rW5K44o_9f;qg@+) zoD<xfl6z@VMwBjPjnk*>$p&<Mx*?sKZTNrXeFc0J#}_b^;>8`}LR>E{cex}Nce{8l zN=kqbBuIeZPARShid&H2u0;#91u97Y6l)6<*KoP_y|>98Cws{y(Eh&P_wDcZZgzKO zp3Kb7?#(=b-@fsH>nl9r=1NbvvC;#6Tjl}3Eb)NL3*6y{*=}%th8r9o;{tn%onTd- zEli0wmlgRL$@07mE8+xBw*vir&-wZJ9z@#9kOc{!&o``ZtfaciPGb&f_CWblkcTy4 z{@&-)yv!f><{QAI7<1XS{yaD~+7-@Cb4PhdJ}<blkq>`u6TpL=0{CaQ0G{mgfoBJN z;Q2uzlRn)igvWb);Neam_`6&H_saP2`x<ZfWvLfj_}T+bPH=;LL!Dt^x(yU!JLGs7 zzlj#Q-oWv82Kk^lVx&+gw8M8zbCl=bnim?<yBcZr#CGp5Lb{1w)_;BJZ73TZX)fE? zhX=>UdcaTf`EX;E0PbuOqP)KF^ngD+KkN@LkBQ**aesJoLIiKW6Tv%zQ&s8PlOpE+ zYs`CvWnLWdho=Yq;L#pGxWC00{<p>l+d=?mrg-9W;sUc%tf8-up-kdo`Z84Lc^P>+ zgzz=?3!k0`8lQFT*ILRm&pP(K6VjOw<nMDd!`<ZN0FkL|bv_S{lzPI&*#fw}$`Af3 z4}iz}0^!-AAe1=>UY`htHzyIk3qip2R4}|{0k7rfc#p}aGFbjK!mHy!*mgni<UkNS z+#LwF*89WdMM5|^5p6PyTwy}Ag)G;@pfW<>dJX4=6Uf^NoQtDqZbW%LSsPHlBVHcj zpB3io`F)OuQN@TbbJ@;;?r?6V5Pn@A0C%?p!=t^S@a#w!yf_vPFOMUf2!~fE5h$%I zRM#UsFA$y|4Ts13!{DzSA#h_&0Q@lD4-S`l!JHIZ$oDdUSZ{~BI1io1vAG_{K|Fnb ze2Qm*o_Cbp9N#$;qXf=Zay<-XQ{t^<`-giY4<fj=DGdJJ6$y_IM8VS|QOIXBJU_+) zUdzwfd-YGBA?_!KqTs>aNVvN-9DZ3I49Ca&z=|9m6bOuDi5`}Z0{s2XVn40M`5=(K znLefs$S*CnCB5H@BfWW-^E~unewrg39xa5+OM>C{)@XRJFBbke7zd9J$H9{$@ioH3 zL$NR-#~LE|I^bm40lXbLgIJ^wLozI(Y?^nCb>+B`&f`Pz@aRA++}{xczpV^|Q&at6 zV;?v4X=x%$b~AhG@9X;=^1KN9%>(<dzWe<2UDFxm&kYf{pU84Ekdf@iCy3zcvIw}n zEe`(PCq_OH4kp$L*^#CgdqCa)G4>Drjbwmg%Cv9Y6ogJ)VPb(JT-y?(886a(uwM-K zcE-cCHBoSOW)PGWdf_*eu`Jfp=1-LW7{UyE9&GaR^6ISLg6;MN)(s61dhd|98oZwp zYXe8eiQwmNqfvG-{JAFy<xhdX_ov_(NUjmWymaL<va)KMHf!1lqVSvI{I?NmG>G<J zdy?U9c@kV-7l&;S3afg#VJs~Ji1c>)9r-_qZ7>}Bum{r9`n^cw9_J4ee;=PYsV>H^ zN`ftA`%2KS;5RYw$JS)Hw<{Iy?@7}NruKEKx9qBI)U{&^7@A=Zw|Au|(?)*oY)^sT z)+E5m$sw>H%?Wib4P>D{?mwgaTX8N3v9+~riTJcSu<zSqz0?F3v%CF-J!R#Cgm7U& z4BXtD3b%J;z}=nNL%UX*eKjI8^=cdP>l@^*2e-=8<h<P3kq)=Eroq(}VmLe|2&TlL z-z_HtX@IYQ=ELbY7L1Tyt^QW4=X>iAZ`Z97Cp}ox%M;Fg9Sy&&O@;q$lfWO_2{N^U zYn#&RC7-tK(z1DDjN=hs&5HzXAzwF;<`0X-u(u=t|7V%X;@m9%M%n2bF|j(PWQ}70 z%XL8Lo#br%WK@W??8x|VxVkb8@n*u!vTXQ$OP1EKc$nY6DnGSTo0d)B+GdHIr<-M2 z@Y}i!I5#^EmS(!+7|@di`gmW&HduiF6D+8IH8lV|_xP+>g?Tz1%yKcnZ(1L?xG))h zTb~8jH|5j|x_A7vF_F2(MxmIe#M`wE*>L6C3^-64hOxygWMUWd$JnR45mNA5PNVG- z&G{l<-`EtM{>zDxc5rlJG+bGk1;4DzfnV3x4^Aykg~p$M_OFfu!)|TV`1^Tn4xF2l z1mEU*qu!V<ga|x-K>4TOcU*T({g3%wBHisaNqG9QE&cuB{QNYyvMLv@uKqYEn-GIB zENXuDbM>pX_d2(0$-!eD{J0GD>_<n!Fd73+CeQFaxB;I72Mx~veealKxqBrd3pg?{ z4laF@4L_~Os}U9s3V{@nHH5mGKuMYxoSc`zS$_Gj@PBO#7<F&QN%O}Qxo~=R8Z6E5 zMBP9gS%9zbAj+5+5fMS(#YzX>ZyDg@9hYjSQ@J439nQ?jfJ;krHA49$F_`pd$0<_; z#&zMU`)`eb!HMpi^e%mq3*Rrwf}KM`Art4pa8KT^*#F}xwzQJ)c!6WTLxj8S@^nW% z*|q@~D`S2(oL`iSkf#Q#hDT#8kDA}zx}Dpo)ob12(|-$m-sm$mI!Zh*%!R`f6JeO2 zg)G6j=M$8F4UKcvH3IzJ>xOZcuMG6*Dce6f9!}5AfioO%YIY9BCU3&o@7Rn=_owEG zlyJ0Z`RU}xk6Gxc(*b4`1S!$r;`#WDbeJu6A-~fyoZri_uif!or{tR|L@3lpUE6ol zqwxRTq*ORLGn*6mHu_33s>-Z*P5de1>DK<^-i4px9BQfG2@1kp(0(XG3AZ90)$`*s zvS4FD0NHTL!n~Z%qx?bmEz|;eWsioTJS!j69fcJVJ{+E$0Y|1t)Zox0Nv-1^5z5;~ zuTvW(9GU26SuwvZ=Z$fkuPKgI!pFrU=e@}iC@+qNd{=|YXgBK{_zWaeuMIHr(|1pd zlNssI!iM|+I4~{^4vbG%gTb+$b>hE7%vZv(Z)`erXx*YtIH--t&*!qjNF`ic{MB@C zS4jd4@G^op{7-}L!5n-C%6CiYS%`Bs8=2v#SGlPm81{@zhCQRy!PY>#`1Uk6#=2W@ z;wT%M0QxvC>eBaFe)gQWxOmibZ`bey7%nu0L?@Gfu>Xr_zGpfgf3Pi@#XFhK%X8M3 zZtfcjJBKB5LKBsk$6PXWXw@7R_0o)k#a$BX1y;J9plJ;_so#5{T@YJ`(rIb_Ouc4J zJ_mxfEt`SZ!xGAeBq)_rtV8EJh9$tb04qr08NNc<hv9cH#ob{J>i<NZ(VBi9MwOfU zN5b|YVl^lm9A9If(R>``Vy0G)3zzD>Wxc~e>}dsN-8+C$mv&&<tv$+Q1?!4pmGJpk zX`XxO+hQKZlvBkmzb;OIY2o&e;-FW7{oh})|LOV1*t5Hf`KGYBFdDWF605<;Sb;|Q zySHlv^Rq+M>Tuzy@4Xy9^_XJVc}hGr$MLWMW2$n|*fKC4X2rUoZLf|D*9VoJe;NcB ze{*ZGw<*R)jDjr#64W5fvC8kXoqiV>8N&yIPHn-kb32%pB2p{MRsUn}2`n}Dy<$7K z828}hr>rOr<##0;85#b^Rhs`9`5pA;_wzK7Zosj)xhP%@=4AzgkEH=@<jCVH|Ecc< z+8HbLwW7?5=Uv-=p~gG$vZ*i@rbh4})lvT)j{iW~yCu2VBhkTdL@!t4igmq$F)lCK zq<*BFQO@RI(W4{uXx|E)jk`nt5Vw!Qxw3bpR`Sy`z{UH<zA-Q^*cMWpjGp25uPe=Y ztn8E~IT%W^oDJTu&JJYa5|<4SW1Pae1I-i7(MK<$R0Eo;7v_Z53or3v(zW)u!t{TD zi|>tnqhW-fCD8v{ocnqre@gpfiOz<?bVq&J$}ADqPrx}Osm@Rmt$B`Q+oN^!rchQ7 z+{DlL#M;->I<;=8#`hMiyRmN+3=){j;+=b*$M=0#<VWd9wC`$w^25?pA;tzwh3&&6 zb%vJBwEJH)8Ex-b{H~^Y%y?;q?b5bobLif_HB8G0mFKhN*tGo@AL0t30BU2*%fe8t z?lz2Tv7sOedVBS(#P6K-ir>D9jezS!4<<)Cp%3qLCO$L8YSb2H_li~Hg^NGBH!Uj? zZJQ;~5&KG0nKYpjC+(t0AB}bByK~JTb>7Q|XTi#xAjrUVtr!=JZ0vu|HP940-9-Zg z7Sb&PlVLadc%)e2+Cs9>StDPHGB(Ee+dE2o!{9hkt>sG+@mrjOhmLKy|3`XQ7;%>0 zF(MnL$GFqn|JKLHMF;ueJWzg-#MwZ)_RB~H5BVg}7E=AS+vh2a_G54+`nc38{}=d7 zaM7RJCz-SEh7rBg%I}+4#5@m!e63_+N5kVaum3jqJe{Za>T9t#<NxZ=jG>?{3=)TM z@`Md7zi+PBU5-y+XD+|5SVr~y0NVO<@vwPxU&sjb0{ZTzIyOc+oaOdU8OX#r%ycoT zjB_^WP2aj$UgMF9KHH1^t)&$Ifa0{1&tq+1KgLdCc|qiAveBLum0@vt+iE92TV7Mj z(pp#APmY@{dt}x~Cg$k86d|NL=vM@I*ml+^cy&gqtxga<1FJD67{!UFIN{ntk4~E3 z&j#H(DdBOotcnlD^3RoifqwpLqJ0>B?o&N`Qv=R&<d>c1?;;;7DaP2|iDi}E`FPEF z;D3bEB|(l-@&R{p(L^Q&0>we74FcUXukVOO-tziK7Ea)dg^bK7jhjgY>GC?7Xt%|< zS6ikIQ!j@;`;W{T0Sht$$X>oO&e70@Q&^6h7?;!;{r1Sd&5vT@)l=+hiW6QN48<6~ zsxr_u{g2-?6=Mxo<0#Eb<t(RI*TPUwUY@PTl`bmj$64;w(y2@glRkV)X|jXfa>R{~ zr}js>eUGxiBD;6w^OfSGQ;g)=VAc4ca=E&9>HyXlv(m=Y5SES_s8rX-$xdDlIZ`|S z9N&@q7fe;EQyXoie2nFJV&Qn0o$62T{5LT?J+<}z+FBynM$d@$&zIo;dh&xwzV6BQ zdrfd2eF3xb99uq1V_A{Ale`>To=w}}c-}pKipIJ%(Wg9$VM+Z}J~9vW!ptjh&3jC3 zvTDjtbI=`|=h3rb)8KTupDK!nQxniU-=lM<8p}}qU~e~Q()e?wb}%#4hl^WR)>>C1 zee{1s@>A@w;lWN){GR<i&8~~qdLJC^&@kOWcUPg%=G|`evqOHg$j=h_&C>)F_jCE= zQjPhF^`;H|5XaHfKu@bWiuF~`$zK%3w4WR&kVza2Uc_7Jm~hBcr(5w>oxVtO)Vnr3 z)cHO64<rBY6cda5QE@?`1oZ_p<f-28(X}(v|IM2<#n^?Lw63R$hpw5J1gqx2!t8ML zdt)F?wC&+rCqZi{oMzj_FoS3CY*K=cjC`XKE%K2|{@OkUD27w3mM!7Cveh4fXAk2S zjQoDB>7RspPbTD}HNOUN>Xnt`pd-lO8NS1qIMQPn=ZT4bKyi>T4n}?9^o~vN3;L+5 zZ++Is9nJmA3S!akk?DK%T{x#+0%}ny*`^yWgQxdkNU(FozNy7b8&DjWI}``xKZYuQ zj(gzD@|o~;Mv#oY?^7N0hG`+jM-@rs>373<^-@1y+jm<>eaXy+6cdJte}I0&$#?j_ z3O}KLL-J9L@d%F18;5ox-tX~S?M<?M_y5cvwZy=n8Ga*g$n`L*n41~Kd>`Dv`G8`8 zkPk-kqyDLZ{K=C~Nb(O!@A>t`nJ_@)@D9Ii?<ZO7*nU)}*0VCc8}m_D=%0Q<yLaSw zj-Eq`4^`#Ql>8iD`)D8^xg`7Di)WZP1lz~;gOTAL6*S)Q`(#PHLs$7eRz1b|sA~9b zXo-A`LSJjI2L(94TRT|7d@J2NvA@dCFZy34U##SZm+|pSetv5K^506nddVL<%`ZP~ zTMc{A-`|9Ip%i_?$xuh7Jk_?l*+(({i7Qh-(A+C=HG1D0zn75L$_>Nw@LO~?^KPR# zfqV~>pLvpv#s=fV6n&9XA3wN$mFed{uU=$iCV$ksCJ#p6^I<SB(CHod#KZmRQ)#w3 zuAi9oPl^t|x!R}N_DIig(A$yiYVtN;VEw){+VlO~oCsJoC<C^R=?D8~j=~r^Gnn}3 z<SYKjyz#JO(qLFOESK>II$7)|!x$S?GV}DWVC>WpX|}r7pOn%609m}dPIDZm5$X22 z-$<Mc&S$$A-_Le6eMdeD$+zK`0vjpgw-9|D=D7E)%yKpPC)3&RXKcHjsdnA_BwBaZ z{SVmu&q+w^4cewSbhS*wZ&aK+oamhzA78s}_J7Xk{|5xo>A>46j|J#|p_E(@px*|@ zN5N5CF`;W}1WXuT27+p@3i{Q~5wIW@W1J3+rW7kMDORA%4}N7zt9>U3s#E=HZxC$S zrrKKsn>M{gwULus_=88&Tlj+q>&HYjW&N$l)6q=v1`V}Mk5-qjC6&{?RaL%Gb=p)l zRgs7FZ^Fu}uhJf+)!r}Iw7UJ+_Cy~OM;qXQ?adIv9%Be#KQIl6{lXw91*Rg?Z&-op zM=XfNm;#hw4SoD!kM*Vv8W<qvDnAlc+d`^-B<wL?g3ypDi6{T^L2LBn6N2`r$@Y-+ zlL+XX?p5c}I)0tj^!`P*8Gjble6~gX0teJF3&(xt40HrA0QF7A1o-<;!0Td!Y|M{A z@WOrg&ZLJ(@*r<otxbPo85o;h;sf~-`3r?3(5ATz?d^{T2l|}~6$!qN_V>6P=jU`S z*5BpVNPn*%(MQ2q@=riE`Dk-WHu=*~r#>E2qiUUs|3Z$2WbaLUV>@ReA6r92!c%d+ z&et;e=1=?h7)pyohLyuYOr&FCdP=7zT2xMqGp`&OVJaOQXe>n=>dJg?<G0Ct+xwAz zo|jRUQ;6dL;zIfTdREKvZ;h?byu7^HAssQ=t8R?+b-$eB-ScIU$f$Bkf<@(O^b@du z7}-)g!>LIwaDIA~?fiwAu5fmWE1Vqf!uSo?KEMGMW?0Ee!c3)T`}sbFZ}WGsNO&Io z5Kx~KAq_oE`@HoXLxd08$QWtN4)yiAkm+sqd{}5t+%H92k<l)2VJ6!4FZY7m8~AV^ zZP@?X#z&iWvU&G`N4wDey_^q!Zso(>O?<TJ_JYgvJ>c|YH`rb5jBC}_l?6UVQnA3{ zPGErOG`7zsfk5C*&s2T+RjfyI2eylw$j^6U3g7y{zyK5Jid=iNt@ngqm-(QLKH01L zq20DWydqom69H(Gj)1o5Z@&v*Y}T3U;{j;LE`pawMeukp+NW>xga54+!lgOhuzQFr zOii$=%;y_dL<rq~K^gWV|0&h_2K63K)CTyBMFjc@4rO_ozM3YssXUA}=T{c_!kx_l z@MM25JU<eG_U56;cPR4ALKvQ_LRH>tEc5C_2-<3gppAJ5${qwa*NEWUS3YP*>WqE{ zOr&uF-XAE#G1M0uhCH-YY)@^^={d!A_X+j!I@Qa|sA6%ZqwLHKU-*4J(%cil*fT#r zN_Nsw$V=UU>JdCc+v~>%BH-S(F!*^{AnY0D3By7xq$%Fkk8n;y{~@A6oG<FM7EbRW zl;1W);CZ;0x3P3xfh$~?69l)*qTu0vvO`9j=fi08%mGIh`lB6h7vQ6fv%gDMv{&p7 zF+yFKJ<tj6?nXOqjyjL=-aiN8;IG}WXxAJLN5=TV_!yhY6nFEd*oH@t7jYe)hlXhH zri(T$8*<!@E7pAJ20ttagWFr;;qSdk$UnjXZt$}2qEXMCbWE`Caqr?YurzE7L(nJ1 zon7J&xDf9Hgg<vB!nM`WjJ<S8h@~{%+wMN{zaRTSfHH9EpD2zgdN1PpXh?>;>C5@) zPO|UkMxgC&65K~y*FX1YhWr>yjl2`zszCA(SQ@s2)nk1>;NFe4r8}x@YWI!sLt9ES zX$0T-I?AvL`6vGh8V|B9!7|ojH_JQYqwFeAP78+{8&eqD**j=ITN9A}8X~S2kQ_~$ zG=lOOA#xgjY)gmB%i>{6kpS0+jiiA>{&}3k(`Y`_Bmg}pL41$-xgN&S{iA~5=hdlb zUzrL2+nQA)9Gt7Y4pdDt(ta`7j#kkln^p;YKOgmXlbmHqZj3D>`cw*_|Hf)_Dm}9} zU-6P%%^uB7b%9HZli}J%?d&%%uaV%mZd9+fSCxlsRTOPTe_1PmLu0}r-`hkQ#P_^} z&p|#{AJDx}FXt)wsEd1WY$V$CRoP#X4W>4*eryD@->%9}eXh?eN&7$(?I|xTN`plb z4@hw_d4bQtYA!uG@`07?Y<h2g3i|Pxk7I9TZk^$)zWz1p(r6<KJqxq?2Po10X?YGD z8W#h3?#9w!AJ21W2WP8j2S(@q0)bN+PfxlF?G-OB$w3>)JSDiWBoAT*=1d#o;A8AM z$*ya|=vbw4ZNF&tQR9ek@1K#Xgp=&~&d!y<q)2;NjJwTke2#M!#}NHDigdG^QOGxY ze{5O`oL_+Uduacr2wl)tlyIxIAw6@8287AWS{qjFO{$jD=9=&ubZslgrAYtW{2W-* z+YeHChHvnlwjew_TyBR&@3v$Y(~DolIm3ysGU3#$Y$Xu;Sab5u@?_ehgS>n^#sgvR zYm*Ys)CN5|wt`}@ryP$e4|KhEWGvu%o-{zn--A4Vf%ut&{x{%W@r$*+{Nd<S2^^i4 zDTl*TGHZP<$)1I+GbYWqMp==dTt4DG+S5W_m&KteJvcrE2K$&v(H`^)@=Shmn1kkh z+|#JoQWy&R$E7MkajXaO|A8h}kkhAg;vv?<LSAR@m{c&=>8O<q(HH|rm0pe4V^dI< z-3FrFZEhmZhDaaDH)s&f<8{O}^7m!^BVcC<+At}Ajh^Q5OgbAmA_t}NY~4tgo<RAU zWDm4Ame(ssdig;-h{ty58|o~-&*D-{r$u2oSBpRK8Fr+17V#hF(9=5G+2Gxl0nupB zBvyiED!L+AoM~IKFIe4Ay}WAuuTT#x2zl+;ss(gI8wqza9q1G6ET>Tr=){aql9T$9 zfNY9}M|;W3DB_$ab_bm2ALBD@!_J{eJOkg}ZpLrR&~8c928Y3k?MQqRkREWhucKNy z)q2`omkrQtn?-%MFgHw%&XN>9q&gYB#OGHB`C-OSqP-!nm#fk1&4n>aHZ*Jd#6VO0 zE*O^}ge7_5P>6BkKGvQ`vHqf*FnPPM?W34_ndvIgD?{6q1xenJ=3@E;zmw&0Z6Y1a zx@Doh*ZSTOXvc*%JavG{7y~ih)e_RZ?Vv#93>)iEm*|jvsv^&d=Z0u2rOZnl%#3k` zBp35P6z5M`2g^Vm?REKKXu~2#NYn~Edg@h;SsJ_5&+6x&eFhW6{#w;1IwD&Wjr{9% zY@>{)e*#Plb%X>ri__I>MJO(FG(`P~C#&;9VC#@Hg!Eb=KfsmY9c!!6Z;H=6i=!mY z7ZN?~AWh&1r3wD>`)vN2q9o2airOO&X|Uy(6zw}o{B0^@oy`|luRT_?-=IMzPw&jU zWC4)Q{Em^iwL*thnr#^9*&`exdozXpsgg6s!%hvitzmbyHX#1DtMEbgDZSiG-iuu= zN#}uic3A;Z>~;GL^S61oYxI|#wg9U31YGUT-ZSdfk-@=UtERqoW=b?RU>rl@SFxNi z>OHH{T-PU>baK%a;lsBB)?tn$2fglShxM|2cs9nk8^px9qgZ#Efc|G-MKz##eB-Fz zuzl<Y9Xr)>q-Uy%w|9guv_yS0w(P?G5~VVv5Bs%PfOC)WG1ald2!KBlC;i`6^ol_J z@e<TQ9$6!FXw7ZQ;c98Z)LT8GfOA|Ee<Zsm{FJZPrK4ItwP}C8`MV@X<9L=|)s*zd z2K!pQJdFDKq(@s52zl1>wj!DY^sd|U)d;5E)PgjP{5NmfL?dn*M=M75Rm!J$sq6ZS z>D%)ue(T7;n^pPu@oDh6gr|3Jb-#E<FZ}fK8K4P<O5)YVZ2Q)&<mC;zbKAVr_?lLj zEib2vKRwh>Esyl^2l(2&OLZ_PP~}<m8to8b`|-_R97i3eb8F_JZp}PS*f4cORhwgb zwZ*xpONVx_Y1$}x*+v}iCF&nbBlIb!0Vmge(kWimH=gvV@8H0x(T0ST1?SSMi*mzd z->+K$mo_isgbNrK8_R>2gDq!%$F^;h-VemPz{#GotR@<yFGX!%;AQqQ*;Y4<<*&9h z-L6N^EN8=~TT0NE(6*JR`?`)3nlx?<I~Gjm%%eKJ5@Y1g2%T%f!*&1ij<rDXU`xYY z-%1?yH`K<nYJQ4c_kdm=#?KGWDuti-Zf10MNq<)n3epmlt`+m>T;x?{+r@X`)mToo z9>p~N33amPWCTfZPW&kz*TPl#)8-oE-3`L$=J}~_ro%OiRe$ruzB+-mnJKtC+SjQL z>GhI+^~ypq;QQz=)bpy<cBm#<P^V>TAHK!&12ad!&6E3qbS6o+>)!y<!6QBGd6}V7 z)Tg<h=Ge`mCf>BoOR>{Q&2cw*ws}N8{QlhmMkkNa`~2~ImHy{Prldc4`}^-0J^OJn zp06@_`j?V;-D_NH)|Pj+9O;i?n>?B#_I-PH)m*su6Y6YM>!p!yTD_oJH<QNY7PQOj z%eQ<kanN0rSGBLrlKy0AmRZME5=Y(XIc_G;7Uajgzr14|BSV#5-F0~U$IaRS<A*cx z;Zg67^l1;y9t}f+9G~M@zfO8dpN!cW5G6Y3cE@+b`aBPl=M&=uuXju?#(3A8;o-HP z8UCN#{-2WGBwe$y?MeUnH0sVRD@>6M@V9xA<z)01>P4m^Ii>I68pwaLEQyst*EBo5 zyc`$f@3P&DUlfb%pH5E>c(b%`5^O5%3wvjlLOIH|dPok;&54qZjrM%e$IJXlmW$B? ze7`J6w$bJP-=hCT`mD)zx`Al>l$YsbI5x+{aBYsO@$np2qutpqM)UFgKM?2Rq$E2% zt54Q|{|_KS#iXi0IIJ2O>LuxulF_YdHKe1AmKdWSCRZyf{h+qQ=tBuq)XP{kCrlB| z2lXdb9ZEH2)un1nQQK)W;nS4XQ2!`Z!+a)Hpnr?*v+7xFs=z;^rltQuU5k}hQEdy^ z`OrQ{fN4-fjA)pO`joQm3rCU4hhshN&Kn>LReD^cPNW_W$N=y8AT(r3;>o8yn3xc_ z9^08+&-}FLm9f!(XA$~1_xJamfVw-og8T#*!i1hzLwvoj1o-)UkGeJc@ct}ZpNu7* zlxx@j3in%DV|<fBr1e9t$mZeDQ1jR0Vk|1Ai7nsH%dnQtO0|+sPOz*P9c}(@K(NKj zRDZ`i=!5tY?w3tOUi9iuxj_Tc0SOnnUn~r;cr_=@MtWeR6Y9{o!>x6m7$?CS9_-*_ z{0P#o@rIkLFm}XDH`qGB5p6^)D{}p;A0r<ZkdMN;_7Ar8=Yb;Oh#X(5Cts!5N>5F} zm=>EUK7$B#M^GQ;L?Fg72!wa1gD|E;5bB%+q7F?U#&8Hgy%K+n2O&g#3^y1VX;~o_ zI+0GvLehcKvMm~-|K7QM{4HN?9qcB%xi%Oc?8bNiq$_ef5@QSyL~#P;6FfZ}iN4~) z;L4H!n49h(l?ZJgAP<|k)?ZY4!abhizP=W34viJUt<6#B?>!#%KE&wnK0yw7(WcO@ zbrWdUstNuFZ35QDZDGj>H+lZ!Ls%B;{Jl3Gep?j|tNXagGWb@sc0Pw)J6EMk*Qhh- zohz_>v1cU4z}O^4U+3iSJXHz!4&6A{7ij%}{O)#c*BtsMTEn$X2~55FyHTfMbsQ|r zbd@Gx%mm~ii;Fh#mF#8n%c=rz*>7u6ccEN@`U{zApsjD;M(F$A+PDK#|Bvk%=%YFg z#zZ>24-$A@z<yBs#trfDN+}Moes^(E65QCFg^;ZV7gnU9Pkqhn&M24se<z*Oe`i~h zP7I!F8#CeX_z1}Mws?+XVYq4=q`I45+g==q`|sKC^V(dEP@L+<tV5~N(sWHeyIFic zF3*H%NiNb*zUxKBwKRdJdxyS4t2bxoro)fRbLB9*FaYBNG>1-YTR@~&Px*aKerUOP zXxXf>yxtGXa$(<ST#IzKc#8W_E^He_x!Dwbo$Mh!i+i=_7F5Atu?Mpc#^R*5w81@M z%1`#QQEF$ljABabMUBzdU$1bU94FQNZk7c4_*lM09j!u^e!8p4@lE|h;rR4SIdJ(N zr1fzsGc8x7wuYrhyA}Ft9g^UMd$J$!vAB<6{V8#-(ok=gWi0(n7vme-2S>xcF)0j` zCh^stF<RSpGwUHQW2M(gseM@bM0>}`BzZX&r((J=oexnS4u@I#*{;TSwhoMi@}al~ zh+vJlS$vdII}VQYkms}IhDLdSIr<Q6(X=rGIvrZU`T?=9s$V2@Yxf0E8@59qTv@($ zN_CfI`a*)c^-nDQJXfPTWdq~nduDCWZ*ME~?L>6RXQL(`dz$v@h^8X{v~D{&8TT-% z{S1Da69_48=9gLexh_W6HuZ~vvZ4eACMWsH&)IvF4h(gN!QmdT9M_r^@2j3W8}(44 zPrL-#naJxbO818(H_L-8ecXdRzp)@1whT<-gw?nX*b>)nX^v&)S)7AP<Aj`L3CHMo zq1xC8ap);8KPOQDv2NDWS^7CndW%-}3WxHNY)%l`sP9#gFR7uizDyreKehj&1#BFg zA+N9KldTc%jjbJ+CeIre<tB~gnebWqxc<$X66gJf{GV_^YqasFHe`X?Al1(mTDMT{ zXS!zV4;2T?+n_!2%HF5Fk$jJyXr!Qg^z$;kc4+!g#s>}gp-}{DLmfG7;(^xDDW6ih zW`Wv4vEK5bxlG>l-pTU&TZd%>{trE-Ouaz^?1KgC2BykRE}n!j7L=hVDMC(zWG_yO zf#c}Yr7_yGv$QE~f%_<`b&Yy-Rk}AW#_MgmgN}nLee8qQg?#f{wB~ni)odl$h`v+^ zf3qe{fc%V5{>(x7N^{_6*vB&m_EM@x<&G?wD!;d9(g4VDHc*qD<t2xwSF*Hs>|3%$ zR0YC+0oSzI`x~Z@ftJmiGxH?vD~&J2_ZCMz_TB~b6*4T4_YmbYV(D?E*blpQOdKF1 zp96}}H$745n(`(LEMVGY>BNz0d5U#ujb&zf@QW;-u7r!G;yvWAS)Pl*g+p`4$!N{5 zCMYc`fQdtjYAi!`(#s1|-eB8mZKsbsw8`e_9osg(=<VH$r{V4oXX^#D?m8na_@8W^ z?ifWGwK+!~KErzRCnfs-`2*VHKD_>m*6`QQKf<AT6Do^@RyQ&obwA2ZoyJS9lit3s zvm+m#SoXDy)?c6hc~1?V-M<Ytj_rk=Ge*209_n%%+xsi5t8vdvn>J7^gSd2X{FL-^ z);l#c$nn~gw2*sC2S^?*=$rgte1h+tB7w!#JSV-~84fyPEL$hNb45DZo+FLM2zm&e z5%BY@eg{YexVV8U4>-TbFwQ$I<KW~>c6m*2Asnr;!6Q4khNHCuD$7FCTZp3?pFZLy zd%#kn#n43B`KTFg(131GT;r<k5><P&wwO<4>bj0W`l`WxzOLckPQ%0aE<-UMgeU&@ zAapezq+==ewBFRu&-~RaiB-j}Qpd`z!yPK8rCL_x3wpkc^5!kq^j|X6-O(Y()9m4q zDXub#cliEv0K7j_4R}trBxS>Rm8tF)_e6Y8M@2^Xj@C{4`I$Zb-zKz^I1&#}kH*95 zaUS5q>jEL3-C<O&4V?T&#N=IB9s-$O=6@>cQ>M6@?>R9mLZ%q6$;+-AGe;sFCZ(8U z?lxWF!YcHeJW5m<?P0&3c)&5#VrGud+v{8U!1b~|uzXYmTwH~|)RJ74>JuLNwqH0j z6yxv|puU*%Yg%7GKdV9I6EkF2Hw=ZOfGXe3VO~~nW?6s6Z#PT7eVZ20KS=;oj^LX? zG4I2@U7gZhOcozoFcfxtJ&^H})T2{7{7;<?7uSr3vH7tWJI)L|>`Y<fl)f;dC<WF| z=*{GnPwGQH?o03+ZrzE+6JXWYB3LxMHyp)%{L{;)qQ8)-aCXHsIV{FJdWY+xuE2NS zOom<PZ!po>bOb)P3ERdGkg@yPd*_S=W1Vj3+o=Prn@|j;dC9PO%5bbR4QP*?{8k;9 zKLM5w%6cz$FtDd*amDb0*R=mfuy{<BZ!m)%-C*J9V*KCQ2>7^<OL=og41^ee0dqb* zPy7Pwenx#TDA?u4Uk{cu`*v3`HPP3DaRd9oz&r`l2f0b{@;$xpcW#7B<!dqio7HZr zO9$f7Upn;5r{qV0VCR}|nRNHMl@RPFgxi<SGS`$xeg`IIME;F+<oc|H1Lw_L+)sb{ z<n}H39Q*X%9r-!Uy$^5x3X2BkKf<|PKy_4)RQn#5<5GivxpHKW^vS*3P+1{`%6Ap; z2=`#V-?_PBSh(j&q}xTcp5is;H$vd!J80bCV5h_AlWI?vqi!+Yb5bnFp1;-KEWFip cv+!u6&BD<QtDr%H%|b3<^QkP=d5U%a59OI8(EtDd literal 0 HcmV?d00001 diff --git a/demos/SimpleLazarusBrowser/usimplelazarusbrowser.lfm b/demos/SimpleLazarusBrowser/usimplelazarusbrowser.lfm new file mode 100644 index 00000000..8f6a8fb4 --- /dev/null +++ b/demos/SimpleLazarusBrowser/usimplelazarusbrowser.lfm @@ -0,0 +1,68 @@ +object Form1: TForm1 + Left = 298 + Height = 574 + Top = 142 + Width = 878 + Caption = 'Initializing browser. Please wait...' + ClientHeight = 574 + ClientWidth = 878 + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnShow = FormShow + Position = poScreenCenter + LCLVersion = '1.8.2.0' + object AddressPnl: TPanel + Left = 0 + Height = 23 + Top = 0 + Width = 878 + Align = alTop + BevelOuter = bvNone + ClientHeight = 23 + ClientWidth = 878 + Enabled = False + TabOrder = 0 + object AddressEdt: TEdit + Left = 0 + Height = 23 + Top = 0 + Width = 843 + Align = alClient + TabOrder = 0 + Text = 'https://www.google.com' + end + object GoBtn: TButton + Left = 843 + Height = 23 + Top = 0 + Width = 35 + Align = alRight + Caption = 'Go' + OnClick = GoBtnClick + TabOrder = 1 + end + end + object CEFWindowParent1: TCEFWindowParent + Left = 0 + Height = 551 + Top = 23 + Width = 878 + Align = alClient + TabOrder = 1 + end + object Timer1: TTimer + Enabled = False + Interval = 500 + OnTimer = Timer1Timer + left = 40 + top = 64 + end + object Chromium1: TChromium + OnBeforePopup = Chromium1BeforePopup + OnAfterCreated = Chromium1AfterCreated + OnBeforeClose = Chromium1BeforeClose + OnClose = Chromium1Close + left = 40 + top = 136 + end +end diff --git a/demos/SimpleLazarusBrowser/usimplelazarusbrowser.pas b/demos/SimpleLazarusBrowser/usimplelazarusbrowser.pas new file mode 100644 index 00000000..d23e474d --- /dev/null +++ b/demos/SimpleLazarusBrowser/usimplelazarusbrowser.pas @@ -0,0 +1,234 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + +unit uSimpleLazarusBrowser; + +{$mode objfpc}{$H+} + +interface + +uses + Windows, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, + StdCtrls, LMessages, + uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes, uCEFChromiumEvents; + +type + + { TForm1 } + + TForm1 = class(TForm) + CEFWindowParent1: TCEFWindowParent; + Chromium1: TChromium; + GoBtn: TButton; + AddressEdt: TEdit; + AddressPnl: TPanel; + Timer1: TTimer; + procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser + ); + procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); + procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; + const frame: ICefFrame; const targetUrl, targetFrameName: ustring; + targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; + const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; + var client: ICefClient; var settings: TCefBrowserSettings; + var noJavascriptAccess: Boolean; var Result: Boolean); + procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; out + Result: Boolean); + procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure GoBtnClick(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + protected + // Variables to control when can we destroy the form safely + FCanClose : boolean; // Set to True in TChromium.OnBeforeClose + FClosing : boolean; // Set to True in the CloseQuery event. + + // You have to handle this two messages to call NotifyMoveOrResizeStarted or some page elements will be misaligned. + procedure WMMove(var aMessage : TWMMove); message WM_MOVE; + procedure WMMoving(var aMessage : TMessage); message WM_MOVING; + // You also have to handle these two messages to set GlobalCEFApp.OsmodalLoop + procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP; + procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP; + + procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED; + procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY; + public + + end; + +var + Form1 : TForm1; + +implementation + +{$R *.lfm} + +// This is a demo with the simplest web browser you can build using CEF4Delphi and +// it doesn't show any sign of progress like other web browsers do. + +// Remember that it may take a few seconds to load if Windows update, your antivirus or +// any other windows service is using your hard drive. + +// Depending on your internet connection it may take longer than expected. + +// Please check that your firewall or antivirus are not blocking this application +// or the domain "google.com". If you don't live in the US, you'll be redirected to +// another domain which will take a little time too. + +// This demo uses a TChromium and a TCEFWindowParent + +uses + uCEFApplication; + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +begin + FCanClose := False; + FClosing := False; +end; + +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; + +procedure TForm1.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); +begin + // Now the browser is fully initialized we can send a message to the main form to load the initial web page. + PostMessage(Handle, CEF_AFTERCREATED, 0, 0); +end; + +procedure TForm1.Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); +begin + FCanClose := True; + PostMessage(Handle, WM_CLOSE, 0, 0); +end; + +procedure TForm1.Chromium1BeforePopup(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, + targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; + userGesture: Boolean; const popupFeatures: TCefPopupFeatures; + var windowInfo: TCefWindowInfo; var client: ICefClient; + var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean; + var Result: Boolean); +begin + // For simplicity, this demo blocks all popup windows and new tabs + Result := (targetDisposition in [WOD_NEW_FOREGROUND_TAB, WOD_NEW_BACKGROUND_TAB, WOD_NEW_POPUP, WOD_NEW_WINDOW]); +end; + +procedure TForm1.Chromium1Close(Sender: TObject; const browser: ICefBrowser; out Result: Boolean); +begin + PostMessage(Handle, CEF_DESTROY, 0, 0); + Result := True; +end; + +procedure TForm1.FormShow(Sender: TObject); +begin + // You *MUST* call CreateBrowser to create and initialize the browser. + // This will trigger the AfterCreated event when the browser is fully + // initialized and ready to receive commands. + + // GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser + // If it's not initialized yet, we use a simple timer to create the browser later. + //if not(Chromium1.CreateBrowser(CEFWindowParent1)) then Timer1.Enabled := True; + Chromium1.CreateBrowser(CEFWindowParent1); +end; + +procedure TForm1.GoBtnClick(Sender: TObject); +begin + // This will load the URL in the edit box + Chromium1.LoadURL(UTF8Decode(AddressEdt.Text)); +end; + +procedure TForm1.Timer1Timer(Sender: TObject); +begin + Timer1.Enabled := False; + if not(Chromium1.CreateBrowser(CEFWindowParent1)) and not(Chromium1.Initialized) then + Timer1.Enabled := True; +end; + +procedure TForm1.WMMove(var aMessage: TWMMove); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TForm1.WMMoving(var aMessage: TMessage); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TForm1.WMEnterMenuLoop(var aMessage: TMessage); +begin + inherited; + + if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := True; +end; + +procedure TForm1.WMExitMenuLoop(var aMessage: TMessage); +begin + inherited; + + if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := False; +end; + +procedure TForm1.BrowserCreatedMsg(var aMessage: TMessage); +begin + Caption := 'Simple Lazarus Browser'; + AddressPnl.Enabled := True; + GoBtn.Click; +end; + +procedure TForm1.BrowserDestroyMsg(var aMessage: TMessage); +begin + CEFWindowParent1.Free; +end; + +end. + diff --git a/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas b/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas index 467d9ec2..08e52974 100644 --- a/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas +++ b/demos/SimpleOSRBrowser/uSimpleOSRBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SimpleServer/uSimpleServer.pas b/demos/SimpleServer/uSimpleServer.pas index 35b77c92..4e812098 100644 --- a/demos/SimpleServer/uSimpleServer.pas +++ b/demos/SimpleServer/uSimpleServer.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/SubProcess/uSimpleBrowser.pas b/demos/SubProcess/uSimpleBrowser.pas index be93e686..63e9518d 100644 --- a/demos/SubProcess/uSimpleBrowser.pas +++ b/demos/SubProcess/uSimpleBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/TabbedBrowser/uMainForm.pas b/demos/TabbedBrowser/uMainForm.pas index 4b58e999..8b513b79 100644 --- a/demos/TabbedBrowser/uMainForm.pas +++ b/demos/TabbedBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/ToolBoxBrowser/uChildForm.pas b/demos/ToolBoxBrowser/uChildForm.pas index 6fcdcf79..6a4b20d4 100644 --- a/demos/ToolBoxBrowser/uChildForm.pas +++ b/demos/ToolBoxBrowser/uChildForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/demos/ToolBoxBrowser/uMainForm.pas b/demos/ToolBoxBrowser/uMainForm.pas index 434659ae..82f0d580 100644 --- a/demos/ToolBoxBrowser/uMainForm.pas +++ b/demos/ToolBoxBrowser/uMainForm.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/packages/00-CreateResources.bat b/packages/00-CreateDelphiResources.bat similarity index 100% rename from packages/00-CreateResources.bat rename to packages/00-CreateDelphiResources.bat diff --git a/packages/00-CreateLazarusResources.bat b/packages/00-CreateLazarusResources.bat new file mode 100644 index 00000000..4682bd29 --- /dev/null +++ b/packages/00-CreateLazarusResources.bat @@ -0,0 +1,7 @@ +e:\lazarus\tools\lazres.exe ..\source\tbufferpanel.lrs tbufferpanel.png +e:\lazarus\tools\lazres.exe ..\source\tcefservercomponent.lrs tcefservercomponent.png +e:\lazarus\tools\lazres.exe ..\source\tcefwindowparent.lrs tcefwindowparent.png +e:\lazarus\tools\lazres.exe ..\source\tcefworkscheduler.lrs tcefworkscheduler.png +e:\lazarus\tools\lazres.exe ..\source\tchromium.lrs tchromium.png +e:\lazarus\tools\lazres.exe ..\source\tchromiumwindow.lrs tchromiumwindow.png +pause \ No newline at end of file diff --git a/packages/00-DeleteDCUs.bat b/packages/00-DeleteDCUs.bat index 9ab8921e..28d93f4c 100644 --- a/packages/00-DeleteDCUs.bat +++ b/packages/00-DeleteDCUs.bat @@ -6,8 +6,8 @@ del /s /q *.identcache del /s /q *.stat del /s /q *.local del /s /q *.~* -rmdir Win32\Debug -rmdir Win32\Release -rmdir Win32 -rmdir __history -rmdir __recovery +rmdir /S /Q Win32 +rmdir /S /Q backup +rmdir /S /Q lib +rmdir /S /Q __history +rmdir /S /Q __recovery diff --git a/packages/CEF4Delphi.dpk b/packages/CEF4Delphi.dpk index 90566c47..9bfb01c3 100644 --- a/packages/CEF4Delphi.dpk +++ b/packages/CEF4Delphi.dpk @@ -130,7 +130,6 @@ contains uCEFResponseFilter in '..\source\uCEFResponseFilter.pas', uCEFImage in '..\source\uCEFImage.pas', uCEFMenuModelDelegate in '..\source\uCEFMenuModelDelegate.pas', - uCEFv8Types in '..\source\uCEFv8Types.pas', uCEFWindowParent in '..\source\uCEFWindowParent.pas', uCEFChromium in '..\source\uCEFChromium.pas', uCEFChromiumEvents in '..\source\uCEFChromiumEvents.pas', diff --git a/packages/CEF4Delphi_D7.dpk b/packages/CEF4Delphi_D7.dpk index 5ca528b3..e162fa95 100644 --- a/packages/CEF4Delphi_D7.dpk +++ b/packages/CEF4Delphi_D7.dpk @@ -128,7 +128,6 @@ contains uCEFResponseFilter in '..\source\uCEFResponseFilter.pas', uCEFImage in '..\source\uCEFImage.pas', uCEFMenuModelDelegate in '..\source\uCEFMenuModelDelegate.pas', - uCEFv8Types in '..\source\uCEFv8Types.pas', uCEFWindowParent in '..\source\uCEFWindowParent.pas', uCEFChromium in '..\source\uCEFChromium.pas', uCEFChromiumEvents in '..\source\uCEFChromiumEvents.pas', diff --git a/packages/CEF4Delphi_D7_Register.pas b/packages/CEF4Delphi_D7_Register.pas index c02a38ca..2b4ea12f 100644 --- a/packages/CEF4Delphi_D7_Register.pas +++ b/packages/CEF4Delphi_D7_Register.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/packages/CEF4Delphi_FMX.dpk b/packages/CEF4Delphi_FMX.dpk index d682a370..f1e0d396 100644 --- a/packages/CEF4Delphi_FMX.dpk +++ b/packages/CEF4Delphi_FMX.dpk @@ -9,22 +9,23 @@ package CEF4Delphi_FMX; {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} -{$LOCALSYMBOLS OFF} +{$LOCALSYMBOLS ON} {$LONGSTRINGS ON} {$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS ON} +{$RANGECHECKS ON} +{$REFERENCEINFO ON} {$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} +{$STACKFRAMES ON} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} -{$DEFINE RELEASE} +{$DEFINE DEBUG} {$ENDIF IMPLICITBUILDING} +{$DESCRIPTION 'CEF4Delphi'} {$IMPLICITBUILD OFF} requires @@ -130,7 +131,6 @@ contains uCEFResponseFilter in '..\source\uCEFResponseFilter.pas', uCEFImage in '..\source\uCEFImage.pas', uCEFMenuModelDelegate in '..\source\uCEFMenuModelDelegate.pas', - uCEFv8Types in '..\source\uCEFv8Types.pas', uCEFWindowParent in '..\source\uCEFWindowParent.pas', uCEFChromium in '..\source\uCEFChromium.pas', uCEFChromiumEvents in '..\source\uCEFChromiumEvents.pas', diff --git a/packages/CEF4Delphi_FMX.dproj b/packages/CEF4Delphi_FMX.dproj index 71ef031e..fa30ba67 100644 --- a/packages/CEF4Delphi_FMX.dproj +++ b/packages/CEF4Delphi_FMX.dproj @@ -241,7 +241,6 @@ <DCCReference Include="..\source\uCEFResponseFilter.pas"/> <DCCReference Include="..\source\uCEFImage.pas"/> <DCCReference Include="..\source\uCEFMenuModelDelegate.pas"/> - <DCCReference Include="..\source\uCEFv8Types.pas"/> <DCCReference Include="..\source\uCEFWindowParent.pas"/> <DCCReference Include="..\source\uCEFChromium.pas"/> <DCCReference Include="..\source\uCEFChromiumEvents.pas"/> diff --git a/packages/CEF4Delphi_FMX_Register.pas b/packages/CEF4Delphi_FMX_Register.pas index 70c4a9bc..22ee3b60 100644 --- a/packages/CEF4Delphi_FMX_Register.pas +++ b/packages/CEF4Delphi_FMX_Register.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/packages/CEF4Delphi_Register.pas b/packages/CEF4Delphi_Register.pas index 1caeb449..46962392 100644 --- a/packages/CEF4Delphi_Register.pas +++ b/packages/CEF4Delphi_Register.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/packages/cef4delphi_lazarus.lpk b/packages/cef4delphi_lazarus.lpk new file mode 100644 index 00000000..dc675864 --- /dev/null +++ b/packages/cef4delphi_lazarus.lpk @@ -0,0 +1,577 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <Package Version="4"> + <PathDelim Value="\"/> + <Name Value="CEF4Delphi_Lazarus"/> + <Type Value="RunAndDesignTime"/> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <IncludeFiles Value="..\source"/> + <OtherUnitFiles Value="..\source"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + </CompilerOptions> + <Files Count="133"> + <Item1> + <Filename Value="..\source\uCEFAccessibilityHandler.pas"/> + <UnitName Value="uCEFAccessibilityHandler"/> + </Item1> + <Item2> + <Filename Value="..\source\uCEFApp.pas"/> + <UnitName Value="uCEFApp"/> + </Item2> + <Item3> + <Filename Value="..\source\uCEFApplication.pas"/> + <UnitName Value="uCEFApplication"/> + </Item3> + <Item4> + <Filename Value="..\source\uCEFAuthCallback.pas"/> + <UnitName Value="uCEFAuthCallback"/> + </Item4> + <Item5> + <Filename Value="..\source\uCEFBaseRefCounted.pas"/> + <UnitName Value="uCEFBaseRefCounted"/> + </Item5> + <Item6> + <Filename Value="..\source\uCEFBaseScopedWrapper.pas"/> + <UnitName Value="uCEFBaseScopedWrapper"/> + </Item6> + <Item7> + <Filename Value="..\source\uCEFBeforeDownloadCallback.pas"/> + <UnitName Value="uCEFBeforeDownloadCallback"/> + </Item7> + <Item8> + <Filename Value="..\source\uCEFBinaryValue.pas"/> + <UnitName Value="uCEFBinaryValue"/> + </Item8> + <Item9> + <Filename Value="..\source\uCEFBrowser.pas"/> + <UnitName Value="uCEFBrowser"/> + </Item9> + <Item10> + <Filename Value="..\source\uCEFBrowserProcessHandler.pas"/> + <UnitName Value="uCEFBrowserProcessHandler"/> + </Item10> + <Item11> + <Filename Value="..\source\uCEFCallback.pas"/> + <UnitName Value="uCEFCallback"/> + </Item11> + <Item12> + <Filename Value="..\source\uCEFChromiumEvents.pas"/> + <UnitName Value="uCEFChromiumEvents"/> + </Item12> + <Item13> + <Filename Value="..\source\uCEFChromiumFontOptions.pas"/> + <UnitName Value="uCEFChromiumFontOptions"/> + </Item13> + <Item14> + <Filename Value="..\source\uCEFChromiumOptions.pas"/> + <UnitName Value="uCEFChromiumOptions"/> + </Item14> + <Item15> + <Filename Value="..\source\uCEFChromiumWindow.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="uCEFChromiumWindow"/> + </Item15> + <Item16> + <Filename Value="..\source\uCEFClient.pas"/> + <UnitName Value="uCEFClient"/> + </Item16> + <Item17> + <Filename Value="..\source\uCEFCommandLine.pas"/> + <UnitName Value="uCEFCommandLine"/> + </Item17> + <Item18> + <Filename Value="..\source\uCEFCompletionCallback.pas"/> + <UnitName Value="uCEFCompletionCallback"/> + </Item18> + <Item19> + <Filename Value="..\source\uCEFConstants.pas"/> + <UnitName Value="uCEFConstants"/> + </Item19> + <Item20> + <Filename Value="..\source\uCEFContextMenuHandler.pas"/> + <UnitName Value="uCEFContextMenuHandler"/> + </Item20> + <Item21> + <Filename Value="..\source\uCEFContextMenuParams.pas"/> + <UnitName Value="uCEFContextMenuParams"/> + </Item21> + <Item22> + <Filename Value="..\source\uCEFCookieManager.pas"/> + <UnitName Value="uCEFCookieManager"/> + </Item22> + <Item23> + <Filename Value="..\source\uCEFCookieVisitor.pas"/> + <UnitName Value="uCEFCookieVisitor"/> + </Item23> + <Item24> + <Filename Value="..\source\uCEFCustomStreamReader.pas"/> + <UnitName Value="uCEFCustomStreamReader"/> + </Item24> + <Item25> + <Filename Value="..\source\uCEFDeleteCookiesCallback.pas"/> + <UnitName Value="uCEFDeleteCookiesCallback"/> + </Item25> + <Item26> + <Filename Value="..\source\uCEFDialogHandler.pas"/> + <UnitName Value="uCEFDialogHandler"/> + </Item26> + <Item27> + <Filename Value="..\source\uCEFDictionaryValue.pas"/> + <UnitName Value="uCEFDictionaryValue"/> + </Item27> + <Item28> + <Filename Value="..\source\uCEFDisplayHandler.pas"/> + <UnitName Value="uCEFDisplayHandler"/> + </Item28> + <Item29> + <Filename Value="..\source\uCEFDomDocument.pas"/> + <UnitName Value="uCEFDomDocument"/> + </Item29> + <Item30> + <Filename Value="..\source\uCEFDomNode.pas"/> + <UnitName Value="uCEFDomNode"/> + </Item30> + <Item31> + <Filename Value="..\source\uCEFDomVisitor.pas"/> + <UnitName Value="uCEFDomVisitor"/> + </Item31> + <Item32> + <Filename Value="..\source\uCEFDownloadHandler.pas"/> + <UnitName Value="uCEFDownloadHandler"/> + </Item32> + <Item33> + <Filename Value="..\source\uCEFDownloadImageCallBack.pas"/> + <UnitName Value="uCEFDownloadImageCallBack"/> + </Item33> + <Item34> + <Filename Value="..\source\uCEFDownLoadItem.pas"/> + <UnitName Value="uCEFDownLoadItem"/> + </Item34> + <Item35> + <Filename Value="..\source\uCEFDownloadItemCallback.pas"/> + <UnitName Value="uCEFDownloadItemCallback"/> + </Item35> + <Item36> + <Filename Value="..\source\uCEFDragData.pas"/> + <UnitName Value="uCEFDragData"/> + </Item36> + <Item37> + <Filename Value="..\source\uCEFDragHandler.pas"/> + <UnitName Value="uCEFDragHandler"/> + </Item37> + <Item38> + <Filename Value="..\source\uCEFEndTracingCallback.pas"/> + <UnitName Value="uCEFEndTracingCallback"/> + </Item38> + <Item39> + <Filename Value="..\source\uCEFExtension.pas"/> + <UnitName Value="uCEFExtension"/> + </Item39> + <Item40> + <Filename Value="..\source\uCEFExtensionHandler.pas"/> + <UnitName Value="uCEFExtensionHandler"/> + </Item40> + <Item41> + <Filename Value="..\source\uCEFFileDialogCallback.pas"/> + <UnitName Value="uCEFFileDialogCallback"/> + </Item41> + <Item42> + <Filename Value="..\source\uCEFFindHandler.pas"/> + <UnitName Value="uCEFFindHandler"/> + </Item42> + <Item43> + <Filename Value="..\source\uCEFFocusHandler.pas"/> + <UnitName Value="uCEFFocusHandler"/> + </Item43> + <Item44> + <Filename Value="..\source\uCEFFrame.pas"/> + <UnitName Value="uCEFFrame"/> + </Item44> + <Item45> + <Filename Value="..\source\uCEFGetExtensionResourceCallback.pas"/> + <UnitName Value="uCEFGetExtensionResourceCallback"/> + </Item45> + <Item46> + <Filename Value="..\source\uCEFImage.pas"/> + <UnitName Value="uCEFImage"/> + </Item46> + <Item47> + <Filename Value="..\source\uCEFInterfaces.pas"/> + <UnitName Value="uCEFInterfaces"/> + </Item47> + <Item48> + <Filename Value="..\source\uCEFJsDialogCallback.pas"/> + <UnitName Value="uCEFJsDialogCallback"/> + </Item48> + <Item49> + <Filename Value="..\source\uCEFJsDialogHandler.pas"/> + <UnitName Value="uCEFJsDialogHandler"/> + </Item49> + <Item50> + <Filename Value="..\source\uCEFKeyboardHandler.pas"/> + <UnitName Value="uCEFKeyboardHandler"/> + </Item50> + <Item51> + <Filename Value="..\source\uCEFLibFunctions.pas"/> + <UnitName Value="uCEFLibFunctions"/> + </Item51> + <Item52> + <Filename Value="..\source\uCEFLifeSpanHandler.pas"/> + <UnitName Value="uCEFLifeSpanHandler"/> + </Item52> + <Item53> + <Filename Value="..\source\uCEFListValue.pas"/> + <UnitName Value="uCEFListValue"/> + </Item53> + <Item54> + <Filename Value="..\source\uCEFLoadHandler.pas"/> + <UnitName Value="uCEFLoadHandler"/> + </Item54> + <Item55> + <Filename Value="..\source\uCEFMenuModel.pas"/> + <UnitName Value="uCEFMenuModel"/> + </Item55> + <Item56> + <Filename Value="..\source\uCEFMenuModelDelegate.pas"/> + <UnitName Value="uCEFMenuModelDelegate"/> + </Item56> + <Item57> + <Filename Value="..\source\uCEFMiscFunctions.pas"/> + <UnitName Value="uCEFMiscFunctions"/> + </Item57> + <Item58> + <Filename Value="..\source\uCEFNavigationEntry.pas"/> + <UnitName Value="uCEFNavigationEntry"/> + </Item58> + <Item59> + <Filename Value="..\source\uCEFNavigationEntryVisitor.pas"/> + <UnitName Value="uCEFNavigationEntryVisitor"/> + </Item59> + <Item60> + <Filename Value="..\source\uCEFPDFPrintCallback.pas"/> + <UnitName Value="uCEFPDFPrintCallback"/> + </Item60> + <Item61> + <Filename Value="..\source\uCEFPDFPrintOptions.pas"/> + <UnitName Value="uCEFPDFPrintOptions"/> + </Item61> + <Item62> + <Filename Value="..\source\uCEFPostData.pas"/> + <UnitName Value="uCEFPostData"/> + </Item62> + <Item63> + <Filename Value="..\source\uCEFPostDataElement.pas"/> + <UnitName Value="uCEFPostDataElement"/> + </Item63> + <Item64> + <Filename Value="..\source\uCEFPrintSettings.pas"/> + <UnitName Value="uCEFPrintSettings"/> + </Item64> + <Item65> + <Filename Value="..\source\uCEFProcessMessage.pas"/> + <UnitName Value="uCEFProcessMessage"/> + </Item65> + <Item66> + <Filename Value="..\source\uCEFRegisterCDMCallback.pas"/> + <UnitName Value="uCEFRegisterCDMCallback"/> + </Item66> + <Item67> + <Filename Value="..\source\uCEFRenderHandler.pas"/> + <UnitName Value="uCEFRenderHandler"/> + </Item67> + <Item68> + <Filename Value="..\source\uCEFRenderProcessHandler.pas"/> + <UnitName Value="uCEFRenderProcessHandler"/> + </Item68> + <Item69> + <Filename Value="..\source\uCEFRequest.pas"/> + <UnitName Value="uCEFRequest"/> + </Item69> + <Item70> + <Filename Value="..\source\uCEFRequestCallback.pas"/> + <UnitName Value="uCEFRequestCallback"/> + </Item70> + <Item71> + <Filename Value="..\source\uCEFRequestContext.pas"/> + <UnitName Value="uCEFRequestContext"/> + </Item71> + <Item72> + <Filename Value="..\source\uCEFRequestContextHandler.pas"/> + <UnitName Value="uCEFRequestContextHandler"/> + </Item72> + <Item73> + <Filename Value="..\source\uCEFRequestHandler.pas"/> + <UnitName Value="uCEFRequestHandler"/> + </Item73> + <Item74> + <Filename Value="..\source\uCEFResolveCallback.pas"/> + <UnitName Value="uCEFResolveCallback"/> + </Item74> + <Item75> + <Filename Value="..\source\uCEFResourceBundle.pas"/> + <UnitName Value="uCEFResourceBundle"/> + </Item75> + <Item76> + <Filename Value="..\source\uCEFResourceBundleHandler.pas"/> + <UnitName Value="uCEFResourceBundleHandler"/> + </Item76> + <Item77> + <Filename Value="..\source\uCEFResourceHandler.pas"/> + <UnitName Value="uCEFResourceHandler"/> + </Item77> + <Item78> + <Filename Value="..\source\uCEFResponse.pas"/> + <UnitName Value="uCEFResponse"/> + </Item78> + <Item79> + <Filename Value="..\source\uCEFResponseFilter.pas"/> + <UnitName Value="uCEFResponseFilter"/> + </Item79> + <Item80> + <Filename Value="..\source\uCEFRunContextMenuCallback.pas"/> + <UnitName Value="uCEFRunContextMenuCallback"/> + </Item80> + <Item81> + <Filename Value="..\source\uCEFRunFileDialogCallback.pas"/> + <UnitName Value="uCEFRunFileDialogCallback"/> + </Item81> + <Item82> + <Filename Value="..\source\uCEFSchemeHandlerFactory.pas"/> + <UnitName Value="uCEFSchemeHandlerFactory"/> + </Item82> + <Item83> + <Filename Value="..\source\uCEFSchemeRegistrar.pas"/> + <UnitName Value="uCEFSchemeRegistrar"/> + </Item83> + <Item84> + <Filename Value="..\source\uCEFSelectClientCertificateCallback.pas"/> + <UnitName Value="uCEFSelectClientCertificateCallback"/> + </Item84> + <Item85> + <Filename Value="..\source\uCEFSetCookieCallback.pas"/> + <UnitName Value="uCEFSetCookieCallback"/> + </Item85> + <Item86> + <Filename Value="..\source\uCEFSslInfo.pas"/> + <UnitName Value="uCEFSslInfo"/> + </Item86> + <Item87> + <Filename Value="..\source\uCEFSSLStatus.pas"/> + <UnitName Value="uCEFSSLStatus"/> + </Item87> + <Item88> + <Filename Value="..\source\uCEFStreamReader.pas"/> + <UnitName Value="uCEFStreamReader"/> + </Item88> + <Item89> + <Filename Value="..\source\uCEFStreamWriter.pas"/> + <UnitName Value="uCEFStreamWriter"/> + </Item89> + <Item90> + <Filename Value="..\source\uCEFStringList.pas"/> + <UnitName Value="uCEFStringList"/> + </Item90> + <Item91> + <Filename Value="..\source\uCEFStringMap.pas"/> + <UnitName Value="uCEFStringMap"/> + </Item91> + <Item92> + <Filename Value="..\source\uCEFStringMultimap.pas"/> + <UnitName Value="uCEFStringMultimap"/> + </Item92> + <Item93> + <Filename Value="..\source\uCEFStringVisitor.pas"/> + <UnitName Value="uCEFStringVisitor"/> + </Item93> + <Item94> + <Filename Value="..\source\uCEFTask.pas"/> + <UnitName Value="uCEFTask"/> + </Item94> + <Item95> + <Filename Value="..\source\uCEFTaskRunner.pas"/> + <UnitName Value="uCEFTaskRunner"/> + </Item95> + <Item96> + <Filename Value="..\source\uCEFThread.pas"/> + <UnitName Value="uCEFThread"/> + </Item96> + <Item97> + <Filename Value="..\source\uCEFTypes.pas"/> + <UnitName Value="uCEFTypes"/> + </Item97> + <Item98> + <Filename Value="..\source\uCEFUrlRequest.pas"/> + <UnitName Value="uCEFUrlRequest"/> + </Item98> + <Item99> + <Filename Value="..\source\uCEFUrlrequestClient.pas"/> + <UnitName Value="uCEFUrlrequestClient"/> + </Item99> + <Item100> + <Filename Value="..\source\uCEFv8Accessor.pas"/> + <UnitName Value="uCEFv8Accessor"/> + </Item100> + <Item101> + <Filename Value="..\source\uCEFv8ArrayBufferReleaseCallback.pas"/> + <UnitName Value="uCEFv8ArrayBufferReleaseCallback"/> + </Item101> + <Item102> + <Filename Value="..\source\uCEFv8Context.pas"/> + <UnitName Value="uCEFv8Context"/> + </Item102> + <Item103> + <Filename Value="..\source\uCEFV8Exception.pas"/> + <UnitName Value="uCEFV8Exception"/> + </Item103> + <Item104> + <Filename Value="..\source\uCEFv8Handler.pas"/> + <UnitName Value="uCEFv8Handler"/> + </Item104> + <Item105> + <Filename Value="..\source\uCEFv8Interceptor.pas"/> + <UnitName Value="uCEFv8Interceptor"/> + </Item105> + <Item106> + <Filename Value="..\source\uCEFv8StackFrame.pas"/> + <UnitName Value="uCEFv8StackFrame"/> + </Item106> + <Item107> + <Filename Value="..\source\uCEFv8StackTrace.pas"/> + <UnitName Value="uCEFv8StackTrace"/> + </Item107> + <Item108> + <Filename Value="..\source\uCEFv8Value.pas"/> + <UnitName Value="uCEFv8Value"/> + </Item108> + <Item109> + <Filename Value="..\source\uCEFValue.pas"/> + <UnitName Value="uCEFValue"/> + </Item109> + <Item110> + <Filename Value="..\source\uCEFWaitableEvent.pas"/> + <UnitName Value="uCEFWaitableEvent"/> + </Item110> + <Item111> + <Filename Value="..\source\uCEFWebPluginInfo.pas"/> + <UnitName Value="uCEFWebPluginInfo"/> + </Item111> + <Item112> + <Filename Value="..\source\uCEFWebPluginInfoVisitor.pas"/> + <UnitName Value="uCEFWebPluginInfoVisitor"/> + </Item112> + <Item113> + <Filename Value="..\source\uCEFWebPluginUnstableCallback.pas"/> + <UnitName Value="uCEFWebPluginUnstableCallback"/> + </Item113> + <Item114> + <Filename Value="..\source\uCEFWindowParent.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="uCEFWindowParent"/> + </Item114> + <Item115> + <Filename Value="..\source\uCEFWorkScheduler.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="uCEFWorkScheduler"/> + </Item115> + <Item116> + <Filename Value="..\source\uCEFWorkSchedulerThread.pas"/> + <UnitName Value="uCEFWorkSchedulerThread"/> + </Item116> + <Item117> + <Filename Value="..\source\uCEFWriteHandler.pas"/> + <UnitName Value="uCEFWriteHandler"/> + </Item117> + <Item118> + <Filename Value="..\source\uCEFX509Certificate.pas"/> + <UnitName Value="uCEFX509Certificate"/> + </Item118> + <Item119> + <Filename Value="..\source\uCEFX509CertPrincipal.pas"/> + <UnitName Value="uCEFX509CertPrincipal"/> + </Item119> + <Item120> + <Filename Value="..\source\uCEFXmlReader.pas"/> + <UnitName Value="uCEFXmlReader"/> + </Item120> + <Item121> + <Filename Value="..\source\uCEFZipReader.pas"/> + <UnitName Value="uCEFZipReader"/> + </Item121> + <Item122> + <Filename Value="..\source\uCEFChromium.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="uCEFChromium"/> + </Item122> + <Item123> + <Filename Value="..\source\uBufferPanel.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="uBufferPanel"/> + </Item123> + <Item124> + <Filename Value="..\source\uCEFServer.pas"/> + <UnitName Value="uCEFServer"/> + </Item124> + <Item125> + <Filename Value="..\source\uCEFServerComponent.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="uCEFServerComponent"/> + </Item125> + <Item126> + <Filename Value="..\source\uCEFServerEvents.pas"/> + <UnitName Value="uCEFServerEvents"/> + </Item126> + <Item127> + <Filename Value="..\source\uCEFServerHandler.pas"/> + <UnitName Value="uCEFServerHandler"/> + </Item127> + <Item128> + <Filename Value="..\source\tbufferpanel.lrs"/> + <Type Value="LRS"/> + </Item128> + <Item129> + <Filename Value="..\source\tcefservercomponent.lrs"/> + <Type Value="LRS"/> + </Item129> + <Item130> + <Filename Value="..\source\tcefwindowparent.lrs"/> + <Type Value="LRS"/> + </Item130> + <Item131> + <Filename Value="..\source\tcefworkscheduler.lrs"/> + <Type Value="LRS"/> + </Item131> + <Item132> + <Filename Value="..\source\tchromium.lrs"/> + <Type Value="LRS"/> + </Item132> + <Item133> + <Filename Value="..\source\tchromiumwindow.lrs"/> + <Type Value="LRS"/> + </Item133> + </Files> + <RequiredPkgs Count="3"> + <Item1> + <PackageName Value="LCL"/> + </Item1> + <Item2> + <PackageName Value="LCLBase"/> + </Item2> + <Item3> + <PackageName Value="FCL"/> + </Item3> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + <CustomOptions Items="ExternHelp" Version="2"> + <_ExternHelp Items="Count"/> + </CustomOptions> + </Package> +</CONFIG> diff --git a/packages/cef4delphi_lazarus.pas b/packages/cef4delphi_lazarus.pas new file mode 100644 index 00000000..4b14ac9e --- /dev/null +++ b/packages/cef4delphi_lazarus.pas @@ -0,0 +1,64 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit CEF4Delphi_Lazarus; + +{$warn 5023 off : no warning about unused units} +interface + +uses + uCEFAccessibilityHandler, uCEFApp, uCEFApplication, uCEFAuthCallback, + uCEFBaseRefCounted, uCEFBaseScopedWrapper, uCEFBeforeDownloadCallback, + uCEFBinaryValue, uCEFBrowser, uCEFBrowserProcessHandler, uCEFCallback, + uCEFChromiumEvents, uCEFChromiumFontOptions, uCEFChromiumOptions, + uCEFChromiumWindow, uCEFClient, uCEFCommandLine, uCEFCompletionCallback, + uCEFConstants, uCEFContextMenuHandler, uCEFContextMenuParams, + uCEFCookieManager, uCEFCookieVisitor, uCEFCustomStreamReader, + uCEFDeleteCookiesCallback, uCEFDialogHandler, uCEFDictionaryValue, + uCEFDisplayHandler, uCEFDomDocument, uCEFDomNode, uCEFDomVisitor, + uCEFDownloadHandler, uCEFDownloadImageCallBack, uCEFDownLoadItem, + uCEFDownloadItemCallback, uCEFDragData, uCEFDragHandler, + uCEFEndTracingCallback, uCEFExtension, uCEFExtensionHandler, + uCEFFileDialogCallback, uCEFFindHandler, uCEFFocusHandler, uCEFFrame, + uCEFGetExtensionResourceCallback, uCEFImage, uCEFInterfaces, + uCEFJsDialogCallback, uCEFJsDialogHandler, uCEFKeyboardHandler, + uCEFLibFunctions, uCEFLifeSpanHandler, uCEFListValue, uCEFLoadHandler, + uCEFMenuModel, uCEFMenuModelDelegate, uCEFMiscFunctions, + uCEFNavigationEntry, uCEFNavigationEntryVisitor, uCEFPDFPrintCallback, + uCEFPDFPrintOptions, uCEFPostData, uCEFPostDataElement, uCEFPrintSettings, + uCEFProcessMessage, uCEFRegisterCDMCallback, uCEFRenderHandler, + uCEFRenderProcessHandler, uCEFRequest, uCEFRequestCallback, + uCEFRequestContext, uCEFRequestContextHandler, uCEFRequestHandler, + uCEFResolveCallback, uCEFResourceBundle, uCEFResourceBundleHandler, + uCEFResourceHandler, uCEFResponse, uCEFResponseFilter, + uCEFRunContextMenuCallback, uCEFRunFileDialogCallback, + uCEFSchemeHandlerFactory, uCEFSchemeRegistrar, + uCEFSelectClientCertificateCallback, uCEFSetCookieCallback, uCEFSslInfo, + uCEFSSLStatus, uCEFStreamReader, uCEFStreamWriter, uCEFStringList, + uCEFStringMap, uCEFStringMultimap, uCEFStringVisitor, uCEFTask, + uCEFTaskRunner, uCEFThread, uCEFTypes, uCEFUrlRequest, uCEFUrlrequestClient, + uCEFv8Accessor, uCEFv8ArrayBufferReleaseCallback, uCEFv8Context, + uCEFV8Exception, uCEFv8Handler, uCEFv8Interceptor, uCEFv8StackFrame, + uCEFv8StackTrace, uCEFv8Value, uCEFValue, uCEFWaitableEvent, + uCEFWebPluginInfo, uCEFWebPluginInfoVisitor, uCEFWebPluginUnstableCallback, + uCEFWindowParent, uCEFWorkScheduler, uCEFWorkSchedulerThread, + uCEFWriteHandler, uCEFX509Certificate, uCEFX509CertPrincipal, uCEFXmlReader, + uCEFZipReader, uCEFChromium, uBufferPanel, uCEFServer, uCEFServerComponent, + uCEFServerEvents, uCEFServerHandler, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('uCEFChromiumWindow', @uCEFChromiumWindow.Register); + RegisterUnit('uCEFWindowParent', @uCEFWindowParent.Register); + RegisterUnit('uCEFWorkScheduler', @uCEFWorkScheduler.Register); + RegisterUnit('uCEFChromium', @uCEFChromium.Register); + RegisterUnit('uBufferPanel', @uBufferPanel.Register); + RegisterUnit('uCEFServerComponent', @uCEFServerComponent.Register); +end; + +initialization + RegisterPackage('CEF4Delphi_Lazarus', @Register); +end. diff --git a/packages/tbufferpanel.png b/packages/tbufferpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e0ea7d958f6f4160e35398939f01ac082db77c GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9oCO|{#S9GG!XV7ZFl!D-1$&97 zuPgf_R&FkNM*HH$Z9t)TPZ!4!i_>qXZsa}Sz`^`hgSqm*<{6hI6)z|MTG-jb{p3}O z22WscnqD#UhFZ6YTmH7Hg*vJzH>HSfIhV9M-PF@|fu~8Q+Qt7u8<+Mo6l^y?=~cOZ kLC1=Jlb7b_%bj6AdML;%cIEYrK&u!$UHx3vIVCg!07DEw1poj5 literal 0 HcmV?d00001 diff --git a/packages/tcefservercomponent.png b/packages/tcefservercomponent.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbe1e2bb316233a237094765962c8d7002b6e9f GIT binary patch literal 923 zcmV;M17!S(P)<h;3K|Lk000e1NJLTq000;O000;W0ssI2ZxyPq00009a7bBm000fw z000fw0YWI7cmMzZ2XskIMF-*q3ko18B_9#i0009zNkl<ZILpmcT~8xr6h80Fv@_D_ zZl$IKh(%$MCPFHyMhKX!LWv<^Zwwd4d;f#~!7Kj*#tUyq5F<=tNGMAd$SREuQISHH zQfMgcFrBaW<Lt$ZO}8eS-GmFz)y#R%`@H8o&pC%6BHV>Za7U)R{1_3px3|yE&bs`X zrp?aI_Vx9>YDR@ZK_EnX?nkt^tj0*B2V_l1Dp9n}&CS=y=;Go6C2f3S(zV@t$pj)G zA|meXKTV}l-9T4YSB7D<Sto=nE-oe#iQt!``1bq9KIN2g$~a@fXZ#)g=8O643qX$J z?C<X{FE4k>x4ynUKR>VQIsgdHubVbwf->$i?z+@$d2jXGU2@C0TyAb|&T$;tVWXp? zhGAqfnNq3bGx+Jr<;|_*+s(IoZr+UE_Ql-f8`Nzz%jI&hSZp?%>2z9QjFn0y%d$G* z<MBA9G%QVU%k}`^%ZK-K*(u9v2_Xa`ionpPtWYQ@fyOW4dpz^t>(6QckQpAdnVg-N zjA|-MGG!bQe8zv<+tC!R06=eVFJr9pax$4bIXMA<bUJO_nvXvJ6cNki@{>RQnizT4 zYuS5$R)75Uh%(_*_SGkeP_^spYgv{%foio{NTDoOtJO-S5;URb()Y&F0I>1&S-t64 zwrAR&;P(KeFr#X<N(gD!*x%oOdU^@~M@L69Gc$qn@bIwSG=KQzcSL+#JbQN42*Nq% zAy70LMMO#|A`(J`5T54+mq$iMR#sMo5Spe94i4Im_sw@dcag}22urKgYV~?O9*>iM zO_IXVnVz0zj9HeI&*#_H)*gO1JU-m$0{Uq3{eO=CRsu#fO#^^PBocfCtr$+DBoRUs zMKMkD<J<?bEC*8($c>2S=jTI1L!tbh=Mh4D-*2^A0k4;rmpeN<0C0SKtZABI7>?tV zN+r&Ddocv_L<mWxQsL0LuG=LXr8MZ$SS*&!W_NdYlgVT*mum-@rWrh`s_NF(meOc6 zbX^}97$AhSgLGY2Rdr!uAy@#FN@Z$l>fqpDb#?W>9jmHpKA$HW8ym%9Q3%m>JT^AA xw6yf<8<Mnzf5A&gBocY8RZISN%m2=Ro&z8u&!BZMBOd?&002ovPDHLkV1f}@v4j8s literal 0 HcmV?d00001 diff --git a/packages/tcefwindowparent.png b/packages/tcefwindowparent.png new file mode 100644 index 0000000000000000000000000000000000000000..e442de4737f990d5928d63df84360edf728aee53 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9oCO|{#X$M%Ak65bF}ngN$X?>< z>&pI!m77amZC0h&TcFT7PZ!4!i_>eTSo0lG;Boob(X?5i@W1v1=_ewY6FNi;Em&9o zog#gE@BDekr@4kUyC1!FYu|e}uXC1HqC8hE^tcw~DAeG}&fv+iyomXzz@a&p*|!)~ z_XtevpUCeKs(X3u(&Mg*nVcS>@rxsS_PB4BUVCqc#<U)WGnRjQ-bk*ME-^Jq`@+0Q z`sdz>uXiylnW8iOZuRuX7Ta>I&lmT6e9tc+DCns<HR#FipN>KA>+6|cRNPCf=Q<Dc P6$68(tDnm{r-UW|9`0w5 literal 0 HcmV?d00001 diff --git a/packages/tcefworkscheduler.png b/packages/tcefworkscheduler.png new file mode 100644 index 0000000000000000000000000000000000000000..53b83227ef9667e149ed81a23c90575ff813fe65 GIT binary patch literal 924 zcmV;N17rM&P)<h;3K|Lk000e1NJLTq000;O000;W0ssI2ZxyPq00009a7bBm000fw z000fw0YWI7cmMzZ2XskIMF-*q3kn}JX~1Wt0009!Nkl<ZILob7%}?V-6rVTa#2*p1 z*(Hz&qONl5!Vz)k9^eF0_t<dnYSjb(&i1t3{v8}RaRq^dgji4#&;oI`kw{2vWY5_1 z(Zf{kVp7^e-)ZKJ=jrz`?-`U*=>G^KUtL~a-rwJ2j1fXY2q~pfN=hk&(3w1`7ea_y zt+uwdRxBihXf~Vq763F@04QX1D5bjH?i56XklWkaFbn~p(P$uqq9}@@2qC1mg#Z9T z$dp3*>}lkna%lgek(81UVp$ddL{X%PSeB*fV2l}Kj4_0e>$=Ys(igHU1Ar{cgb>|s zmr|-rr)gTLRGQ5uA;kCnr(WZ45#?OsI6gT!F$_aWnWikuGR`?;?BL)aj$;787;As0 zBhpo*l<jugaU6`{&6^)gvy3sOlzsVfou=vO>8ay57~=xLM};uP0MO}lW@csp;O*NV z9mk=Ra?YicFJ8=^otalxR~Hu-%gf6J?Qy|1%d(Or3B&O9>+egY5&)Q{St^zE`*`*0 zJ1OOOJobIxahz|JDvF(^DIrADOp*j4^x?y=Y07qXc80^zczi!MH+Oe;H#<99&>K(H z$S@4UFes%TKmHa)50gps{{1hXKcCsQ0|1<Jt@m_9QcBPBJkL8iI%14*o_+fCd#m+R zwOSQIP)aqB!C;VOS+Cc7PHZjH{QUfIIPCTM@8124F&+#Cgb>@dU%s3Rf_|E&3kwVR zLzzx3P1DI_va+%gMbY*3b*FO~$8<Cr>5lvQ^^e2DLm|Y*#)j|vmSsIMD(888eC)bz z7={>Q(=>N?cgy86A!KoJQA!yE0b@)`*=n`w^}13@DRq8+zPh^lkJJ!CwOVa^dwXwh zZ!{XU+ijh%*Xx^`o1W)sL7!_{&+~lW2Y{QK8vxka+A>X(QVIZ-N`-SinM}ekY&05$ z*;E{CPkY+7?MkJh%?`sbzdXHZl~O?vXteqZ*L6M5GfgwkD5c8fvgdiO>*g8Gc@PAD zBZ}iViXz6CHUa>u)#}r!W?7aVDY=@Av4@9;BuQ-B{wv$>_xJbrd%a#k#loy894##^ yt*@`w>-9(WQ%aL0;hg{1|Bqofj-%-#g#H8`VEJ1rq8*0-0000<MNUMnLSTY4jkcBm literal 0 HcmV?d00001 diff --git a/packages/tchromium.png b/packages/tchromium.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d51c7ff142ece29584cefa980f367885362614 GIT binary patch literal 1165 zcmV;81akX{P)<h;3K|Lk000e1NJLTq000;O000;W0ssI2ZxyPq00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-*q3ke1WI8h;F000CmNkl<ZILob+&u>&!6vxlG_rCY$ z%}n2e(rFn=i-l4lfJ#^x1F|tJ)M$bWckXnpE_APJ{{`dDt!oWSB<>oO_zM&nD3-Q# zX5P$u_uXITxR^-=K@$`2_9mZv&-Z-K7xhTP|MAqne>3y;paO(W-bBRz24d#zL3w5U z_nVu=-QAiQ5CD-EXB(>rvzN}U%<pSG4#mHXHXQ3OuKoD+Pxl21rIb_(0T=)nd~nXW zK=k6t?i=S%<n87^f_97X$Dd!_8tP`6N+|?R-$W)61!5mUS?Ps5{phWWvswEIpxxp4 zgHNw)4s@%TMp8^bLLdMFFf)V+$Oq@cxYCDbTc5mhX*O>^;*t0M%kMXPJEc;ptgRF% zg^*&ZhXM9LfryBuif-?WKl^I^-ODd1rKTWezCS2$mC=!<<=&k;pd=AHAOLuJdH&E` z1^}MG69NDt2mu073N+3ZrQV;l5m5m^2;rMs1A%z*#A>g1*Et_WDovudUwhtC0zwEx z1YSCjJSYPrCK0BQOd_P<w=0vif|{r@#@rovsnRHt$B(bBuYa318}Gk)@#lLUrHPaP zKp&{LRlR&}zH%I?>Fxu{x)#P5rIY{wYi-{MDFpx=JG#_r&74}EE3_DCr)ytoS81nf zH!9tCzYS+nxwk1PB}rwi1pvj&yQO1hW&i-C#OX69*Y^2e|0s3sy&@qH0Ei(3y0J03 zaC)wG^iX=iI6nn>?}(X*nE?@&mlhT?+PpCu*FKUc1R?-2_&|Y3N%1g+m^~3QD*(tE zA`k~+VwQ+fU^~x_EQG5+>?kQD0ss=TCtm3`YZvxF#Owkq#mp=aQAyPTW32OmCIepI zD9@joHz5ov+pk=|vi-{15H3A8Kh*xAp@P$u6cP~yA}Xck8o?OnJ?*j9H>&quUpsp= zw;|XN&K=7?yu7C3X@D6Z5NqSuYNgaPM{yjV?M63#A?s;!)k=!3!fqAt?ArW=Gu=Q` z=&+;dP~$I(@l+aGP%e(+X|j_fS?pv__3qy;0b1$ALM4Sjyt!=vz}S$d@_4s7T_3UW z)F0Kp*g9~iog@hWh)Eo>ne4(!qd|H!*0l}B24lT(!Fh6?LZD}sTFl_WL`c{f>S9<N zZc;XrNhzlwL`>6kaiR0dN@!3u8dtUPwF$NL+IU_2rP(Bjq;^!AFw|jlQ1yq!VX=F# zGnc06q-Un)DW&o}Us(>X!p61U;PyC|0^>+UkrD`<EFM(eIA7JivLULrR$6{}v76`l z<j5YW+BlA9_s>cp^Y(UcbNBiK`M@TFI$7?t?)7zG7PgH1xT~seC-2N1%=3I=^OLLA zd#|-FMny3!#^u-;V*>y{EFnpfcB`G`SvHfUX}YK7$)HI+g%FG})>`j9F#*7&!s9qj fl0-`Rc=`Vccj}oSaf#%500000NkvXXu0mjf+FKcl literal 0 HcmV?d00001 diff --git a/packages/tchromiumwindow.png b/packages/tchromiumwindow.png new file mode 100644 index 0000000000000000000000000000000000000000..53faa1f8cfa630eba5c4e47e059137d1fd46fa2d GIT binary patch literal 875 zcmV-x1C;!UP)<h;3K|Lk000e1NJLTq000;O000;W0ssI2ZxyPq00009a7bBm000fw z000fw0YWI7cmMzZ2XskIMF-*q3kn|+yUpTQ0009DNkl<ZILob-O>7%g5XWbpH{Qij zYqv>BLTn?PN=*z_iKq}oASyUfZV@1ksN%@Ay>R4!)LYd9T&u#RJs?z3flz}Qie#r0 zP({>8311Rv;@a^?)_%L*eKW&hBX{#rDUi--HE-TuGryU6iy{J#!z|Zz7Z(@zsZuN! zp<FH#k?g~Ws9Y{9B2r52Cmp2}5$#E$XZFD8Q3q=-TrJ<f@%>E!1b_s<sn=h9=f&}{ zgO3(s=55|jZ#BQZcFj&&nM@i50f2>PXJ@Zp58nUa%)67jG+F_Gh;Ym<+-zRD{DqZt z&`Nf+?`p55yX}rPlHf%0lk*qOU0IIDM+3B(QGc3h9?s9-P9&YS_Q<dwn&XAh1F7U{ z%eMsvl?<f^@814l{q!@3oXsnUxG5B66nW?V9w;6w)N1Q)r+YMa`16n6UTqVLWHZ*? zf4Vy4lx_92Ym{OR`&|P7D^ek%$Xoe&AwNF$>~m9Je)a9##WNpYS+WNdB6@y!c4lJv zfd?Ggj<fXV{Y>F-ACQQssI*wYKy32a(f3Zj^2_fVji%N*(7M-hd$)e8r;-U~5P>aF znRh9TScsT~rY0xax>sv^h8PiAI_L%lfB^sj41*z77%Q!xQ6v<E6d18>S=k6*n;cqo zy$4+%0Srs2kkJ7n0t57jK$r#k(_=*{eMTpyrx)%mj2t;+DRtwX``L#td~;__MBaFQ z#4v~eAT*loTsBLz(TB~<+Znw)*6DP8&o_p+-U+YXX$=jf?bP7Xnr}!DAT-eIgc;~; zW3+uBhm*leC#F}bb<Yobff1tRs&4Dx*i(Zcu@2>rm0EUu)P`X9fsAj-Te*glD1G<i zuc;^OboyXu_~h~7wnx=^Yuyc=&gXJgGrm+0yB22@*{P96@y&_3YNj&()063ezgE!= zXzFO;<dN0^tG+dMtI*E99kzQj`RYtQ7xPsCU`HT4Wb}C6>>vn~QjX*NZwW-yT4STp zs8lMR=NV)E>mLOX5z%p+QmKUT%R5Q!<-v|V{sl>RaT-Qf-C_U$002ovPDHLkV1mfD Bm1qC} literal 0 HcmV?d00001 diff --git a/source/00-DeleteDCUs.bat b/source/00-DeleteDCUs.bat index 9ab8921e..c546615d 100644 --- a/source/00-DeleteDCUs.bat +++ b/source/00-DeleteDCUs.bat @@ -6,8 +6,7 @@ del /s /q *.identcache del /s /q *.stat del /s /q *.local del /s /q *.~* -rmdir Win32\Debug -rmdir Win32\Release -rmdir Win32 -rmdir __history -rmdir __recovery +rmdir /S /Q Win32 +rmdir /S /Q backup +rmdir /S /Q __history +rmdir /S /Q __recovery diff --git a/source/cef.inc b/source/cef.inc index 984ae795..cda5fc23 100644 --- a/source/cef.inc +++ b/source/cef.inc @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// Copyright © 2017 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -40,11 +40,6 @@ {$DEFINE DELPHI_VERSION_UNKNOW} -{$IFDEF FPC} - {$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} - {$DEFINE SUPPORTS_INLINE} -{$ENDIF} - // Delphi 5 {$IFDEF VER130} {$UNDEF DELPHI_VERSION_UNKNOW} @@ -354,28 +349,31 @@ {$DEFINE DELPHI25_UP} {$ENDIF} - -{$IFDEF DELPHI_VERSION_UNKNOW} - {$DEFINE DELPHI5_UP} - {$DEFINE DELPHI6_UP} - {$DEFINE DELPHI7_UP} - {$DEFINE DELPHI8_UP} - {$DEFINE DELPHI9_UP} - {$DEFINE DELPHI10_UP} - {$DEFINE DELPHI11_UP} - {$DEFINE DELPHI12_UP} - {$DEFINE DELPHI14_UP} - {$DEFINE DELPHI15_UP} - {$DEFINE DELPHI16_UP} - {$DEFINE DELPHI17_UP} - {$DEFINE DELPHI18_UP} - {$DEFINE DELPHI19_UP} - {$DEFINE DELPHI20_UP} - {$DEFINE DELPHI21_UP} - {$DEFINE DELPHI22_UP} - {$DEFINE DELPHI23_UP} - {$DEFINE DELPHI24_UP} - {$DEFINE DELPHI25_UP} +{$IFDEF FPC} + {$DEFINE SUPPORTS_INLINE} +{$ELSE} + {$IFDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} + {$ENDIF} {$ENDIF} {$IFDEF DELPHI9_UP} diff --git a/source/tbufferpanel.lrs b/source/tbufferpanel.lrs new file mode 100644 index 00000000..53b3083c --- /dev/null +++ b/source/tbufferpanel.lrs @@ -0,0 +1,9 @@ +LazarusResources.Add('tbufferpanel','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175 + +#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#226#5#11#10 + +#31#1'?s'#163#134#0#0#0'_IDAT8'#203#237#149#177#13#192'@'#8#3#237'('#3'y'#255 + +')'#204'D'#164'x'#233#147#250#161#137#132#11#228#234'd('#12'QSf.s'#3#176'}F' + +#145#180#253#133'&UA$#'#130'd'#21#180#206'b'#187'g5I='#160'I4'#137'&'#209#255 + +#18#177#165#143#0'p'#183'7'#201'Jy'#191#160#136#168#254#147#165'oo'#30#204#7 + +#197#194'RJ]'#169#215#177#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/source/tcefservercomponent.lrs b/source/tcefservercomponent.lrs new file mode 100644 index 00000000..b86b3631 --- /dev/null +++ b/source/tcefservercomponent.lrs @@ -0,0 +1,39 @@ +LazarusResources.Add('tcefservercomponent','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175 + +#0#0#0#9'pHYs'#0#0#13#215#0#0#13#215#1'B('#155'x'#0#0#0#7'tIME'#7#226#5#11#10 + +' (%'#31#17#214#0#0#3':IDAT8'#203#205'T]O#e'#20'>'#239#204#180'3'#210#233'n' + +#165#166#4#136'Ea'#145'&B*'#169'F'#8#152#172'B'#137'!ao'#12#23#198'{'#255#131 + +#255#193'+'#255#3#198#11'oH'#16'#LbH(K'#22#200'*'#141#13'Q'#145'B'#150'Rh(' + +#237'0'#157#175#247#227#236#197#140'M'#183'&'#155#221#132#11#207#213#204'y' + +#207#251#188#231'<'#207'9'#135' "'#220#133'IpG'#166#188#252#24#17#183#183#183 + +#207#206#206#186#252#154#166#205#206#206#246#245#245#189'jF'#133'BA D{'#238 + +'G'#180#184#172#198'H'#164#7'dMH*Q'#180#205#205#205#215#200#232#226#226#2'%m' + +'|b'#210#181#221'{'#201#4'" ""'#238#237'?M'#165'R'#221'@WWW'#134'a'#180'Y''' + +#132',..&'#18#137#224#151#163#248#246#251#199'>'#229#148'q'#202'8c'#194'g' + +#252#29#253#230#139#249#236#11'@'#142#227#236#239#239'///w'#202#183#190#190 + +'>??'#175#235':'#0#8#206#175#155'6c'#130'2'#238'3'#238#186#212'lyo'#245#219 + +']r'#203#185'\nnn'#206'q'#28#218'a'#163#163#163#134'ad2'#153'R'#169#228'3' + +#248#233#201#229#205#173#227#219#205#183'{n'#222#140#222#246#197#220#228#27 + +#212'm5'#203#229'r'#177'Xl6'#155#233'tZa'#140#149'J%'#203#178':'#225#227#241 + +'8'#165'4,Mp'#203#246#0#224#203#135#247's'#217')'#203'j'#9'!'#4'"'#138#192 + +#208#167#172'P(('#129#198'/'#225'{<'#243#224#235#207'j'#0#144#25#30#180#153 + +#156#157#152#140'j*J2e'#28#17'|'#198#127#219#219#209#20#174#0'@oo/c'#172#243 + +'r2'#153'<99'#1#128't:m'#221#154#143'>'#255#20#17#203#229#242#147'?'#254#154 + +#24'y'#215'k'#217'{'#127'V'#127#252#245#136'2'#225'S'#246#213''''#137'P'#181 + +#235#235'kY'#150';'#129'j'#181'ZH'#161',W'#171#213'J'#165#18'4'#161#231#210 + +#247#198#210#0#176#241#244'Y'#189#233'X'#182'g'#218#158#224#247#0#164'0'#163 + +'j'#181'J'#8'i'#215#216#223#223#127'zz'#10#0'GGG333'#129#243#240#240#176#222 + +'4'#127#248#229'wD|\<{v'#213#8#194'9'#231'!P4'#26'EDJ)"'#18'B'#132#16#158#231 + +#5#151'GFFVVV'#132#16#154#166#13#14#14#218#142#247#205'w?w'#145#200#133#8'K' + +#171#213'j'#245'z='#30#143#147#127'M'#146#194#209#153#158#158'f'#140'Y'#150 + +#149#207#231#215#214#214#30'~8<>'#220#232#2#250'h'#242#253#127#142#255'V'#2 + +'F5M'#3#128'H$'#18'|'#4#173#24'N'#163'$'#17'B'#20'E1M'#243#227#220#7#178','#7 + +'S'#18#200#141#136#231#231#231'CCC'#161#252#158#231#17'B|'#223'o'#181'Z'#1 + +#175#151#151#151';;;'#0'p||'#172'i'#154'a'#24#142#227#148'J%'#206'y{1'#4#243 + +'D'#8'I'#165'R'#225#208#186#174#219'%'#28#165'4'#232#210'X,'#150#205'fwww' + +#147#201'd.'#151'k'#7#152#166#25'<'#169#170#234#214#214#150#210'h4t]'#31#24 + +#24' '#132#180#131't]WUuaa!X'#0#149'Jejj'#234#224#224'`uu'#245#191#29#171#170 + +'j>'#159''''#27#27#27#197'bQ'#8#209'u<66'#182#180#180#244#234#27#146#180#133 + +#127#193'KH$'#18'y'#173'UK'#254'w'#203#255#206#128#158#3' !'#207#160'u0#'#31 + +#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/source/tcefwindowparent.lrs b/source/tcefwindowparent.lrs new file mode 100644 index 00000000..83af2a9f --- /dev/null +++ b/source/tcefwindowparent.lrs @@ -0,0 +1,13 @@ +LazarusResources.Add('tcefwindowparent','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175 + +#0#0#0#9'pHYs'#0#0#13#215#0#0#13#215#1'B('#155'x'#0#0#0#7'tIME'#7#226#5#11#10 + +#31'&'#154'y'#22#237#0#0#0#174'IDAT8'#203#173#148';'#14#196' '#12'D'#241#136 + +#130#179' q'#255'+'#144#27#228#20'i'#144#136#20'18'#5#171#253#148#27#219#189 + +#159#158#199#150'EU'#131'G'#197#214#218#190#239'FJ'#206'9'#212'ZI'#170#161'H' + +#214'ZA'#18#128'E'#7#0'I'#4#167'r'#3#197#16#194#156#211#7#180'2{'#140#16#145 + +#143#145#15'HU-'#211#173#165#199'E!i'#9'HU_'#163'Y'#140#188'G'#179#27#173#222 + +#184'('#150#140#0#204'9'#253#140#236#25#173#27't52f'#244#3#178#27#249#189#145 + +#235#186#0#164#148','#151#221'{'#151#227'8'#182'm;'#207's'#140#241#239#15#16 + +#17#17'I)'#149'R'#228#187#249'AR'#239#127#127#3#232'x'#222'a'#127#10#207#215 + +#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/source/tcefworkscheduler.lrs b/source/tcefworkscheduler.lrs new file mode 100644 index 00000000..3fcae620 --- /dev/null +++ b/source/tcefworkscheduler.lrs @@ -0,0 +1,40 @@ +LazarusResources.Add('tcefworkscheduler','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175 + +#0#0#0#9'pHYs'#0#0#13#215#0#0#13#215#1'B('#155'x'#0#0#0#7'tIME'#7#226#5#11#10 + +#31'4i'#192'g'#165#0#0#3';IDAT8'#203#173'U'#205'O'#227'F'#20#159'7'#227#196 + +#31#17#182#217'%'#144#8#162#174'r'#235#194#17'q'#232#30#224#4'R'#247#216'p' + +#239'j'#213#3#255#206#246#180#221#254#29#28'8q'#5#129#132#132'XP'#18#208#2'q' + +#182#145'HHld'#207#216#243#209#195'T'#238'bR'#218'C'#223'i'#230#141#231#233 + +#247'1'#239#25#148'R'#232#255#8'#_]^^'#222#223#223'c'#140#17'BB'#8')'#165'RJ' + +'J)'#132#208#153'<'#169#23'B'#136'Z'#173#182#182#182'V,$'#132'h6'#155#249#22 + +#0'4X'#0'(dt('#165#186#221#238#20'D'#132#144#219#219#219'0'#12#1#160#209'h ' + +#132#162'('#138#162#8'!'#164#183#133#0#0'B'#200#148'B'#250#236'i'#228#160'rh' + +#255#162#145#148#146#16'bY'#22#0'DQ'#164#137'X'#150#165#233'`'#140#25'c'#140 + +'1'#132#144#235#186#207#21#210#23#178','#3#128','#203#132#16#221'n'#151'R' + +#170'K'#167'iZ'#169'T'#154#205'&!'#196#247#253#167'^'#227'o'#17#229'\'#226'8' + +'>991'#12'CJ'#153#166','#203'2'#206'9c'#236#224#224' '#142'c'#0#192#24'k'#127 + +#167'#'#210'U'#164#148#237'v'#219'q'#28#140#225#205#155#31'L'#179#140'1'#166 + +#148'}'#249'r'#157#166#233#233#233#169#227'8'#24#227#2#193'G'#133'0'#198#0 + +#208#233'tfff'#0#224#237#219#31#29#199#161#148'r'#206#165#148'/^'#204#158#157 + +#153'WWW'#23#23#23#203#203#203#5#237'q'#193'5'#203#178#146'$'#9#195#240#245 + +#235#239'K'#165#18#0#152#166'Y*'#149#244#251'x'#245#234';)'#229'x<'#246'}' + +#223'q'#156'o'#149'*'#138#157#166')!D'#211'L'#146#4'!'#244#225#195#175'i'#202 + +'vvv'#134#195#209'x|?77www7;;['#208#27'O'#213#200'0'#12#195'0('#165#31'?'#254 + +#22'E'#15#147'I'#244#254#253'/'#159'?'#159#217#182#3#0#156's'#173#247'tDRJ' + +#207#243'<'#207';::b'#140'q'#158'}'#250#244'{'#171#245'S'#181'Z'#21'BPJ5'#144 + +#193'`'#144'eY'#175#215'{Nl-'#211#252#252#252'p8'#236#245#250#239#222#253#140 + +'1'#30#12#6#132#16#219#182'_'#190#156#11#130'~'#154#166#11#11#11#249'C'#153 + +'N-M'#211#201'd'#178#178#178#18'E'#209#245#245'u'#167's'#25#199't4'#26#233 + +#142#251#250#245#143#195#195'C!'#196#198#198#134#239#251#150'e=2*'#231'y||' + +#236#186'n'#24#134#24'c'#211'4www'#203#229'2!dqqQJ'#25#4#1'cLJ'#217'j'#181 + +#234#245#186'RJ)u~~'#190#186#186#250#143#212#16'B'#181'Zm{{{ooo4'#26#181#219 + +'m'#157#175#215#235#155#155#155#158#231'iA'#159'kZ'#207#243'|'#223#7#128#155 + +#155#27#0#216#218#218'2M'#147'R'#10#0#149'J'#133's>'#153'L'#194'0l4'#26#133 + +#217'T'#28'lO{'#218#182#237'J'#165#162#205#14#195'0'#191'<'#189'i'#149'RA'#16 + +'h'#180#250#11#215'u='#207'3M3'#207'('#165#202#229#178#231'y'#174#235#230#25 + +#206'y'#16#4#127'#'#138#227'8'#138'"'#198#152'6'#2#0#170#213#234#211#169'fY' + +#150#30')'#185#154#140#177#135#135#135'$Il'#219#254'+'#219#239#247#247#247 + +#247'{'#189'^A'#197#194#172'('#28'---'#173#175#175#215#235#245'G'#246'SJ'#147 + +'$'#225#156#255#215#255#143'a8'#142#163#233'#'#132#254#4#30'`'#249'[*'#162#29 + +#135#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/source/tchromium.lrs b/source/tchromium.lrs new file mode 100644 index 00000000..7dee44ad --- /dev/null +++ b/source/tchromium.lrs @@ -0,0 +1,50 @@ +LazarusResources.Add('tchromium','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175 + +#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#226#5#11#9 + +#6#6'8Q!d'#0#0#4',IDAT8'#203#173#148#207'oTU'#20#199#207#185#247#190#247#230 + +#205'L'#223#131#210'i'#25'J'#139#133'R!'#128'JX'#24#3#178'1,'#212'h'#130#11 + +'w'#238't'#173'.t'#175'k'#255#5#227#206#173'k'#13'K$'#238#26#149#248#11#20#25 + +'('#150#182'tf'#222#204'{'#247#221'_'#231#184#152'I'#5'A'#19#19#239#246'&' + +#159'|'#207#247'|'#207#23#245'H'#195#255#241#212#191#127'3'#243#246#160#2#132 + +'N'#222'D'#196#255#6'b'#230#237'Aye'#253#247#155#155#197#221#221#154#25#16#0 + +#145#23'g'#27#171#7#179#151#206#174#204#239'k='#14#197#191#141'6'#28#235'/' + +#174#253#248#245'O'#247#5#10#165#148'T'#10#1#24#0#24'|p'#206#185'@'#244#226 + +#201#238#27#231'O'#228#237#230'?'#130'v'#139#241#199#159'_'#221#26#234'f'#154 + +'J)'#4'N'#223'D&'#17#5'b'#31'BY'#233#133'<'#253#232#173#139#179'Y'#251#9#160 + +#221#225#248#131'O'#175'l'#14't'#171#153'FRL@B '#0#2'03'#132#9#200#7#231#195 + +#184#210#135'g['#159#188'si6o?'#226#145#247#254#203#239'7{;'#165'R'#170#172 + +#173#20'('#133#144'b'#170#135#1#246'@'#129#136#136#165#138'n'#239#140'?'#251 + +'j'#253#221#203'/('#165#166' f'#190'?(o'#149#209#145#165#229#222#157';'#160 + +'$'#17'; '#0'xzy'#254#208'\'#6#0#158#192#19#2#0'"'#8#1#2'Q'#10'4'#206#22#165 + +#222#159#181#17'Q'#1'@'#8#225#155'['#3#129'x'#242#196'j'#175'w'#215'9'#31'E*' + +'M'#162#183'_{'#222'R'#2'B'#8'D'#4'^:'#144'<('#3'#&'#17#166#145'L"'#164#224 + +#183'+'#147#181#130#154#168'2'#198#220#29'x'#169#210'('#146#199#143#175#174 + +#175#127#155'6'#27#239#191'y'#241#231'{'#30#165#137#148#0'@'#31#168#183'U' + +#189'|n'#190'r'#28#169#233#238#3#202#186#22#198#24#165#148#0#0'km'#223#8')'#5 + +#0#28';'#186#212'j'#205#156'Z'#158'+'#180#24'i'#167'k_jWi'#167'k7*'#221'w' + +#191#13'gR'#185#183'))%Ie'#173#5#0#197#204#187#165'cff'#0#0#165#196#233'3''' + +#215#246#249'_'#255'(u'#237#189'"!'#16#0#136'!'#4#186#177'1'#186'pz'#174'v' + +#244'Pz'#193'8?'#5'y'#239#136#153#136#153#1#17#150#151#22#22'3'#218#188'1'#26 + +#215'>'#146'('#4'"'#0'1'#248'@'#129'HI'#241'0'#133#152'='#17'3+'#0#200#26'"' + +#16#7'bb'#150#136'R`;'#207#142','#132#171'?'#236'()$'#2#0#18#179'''^'#233'6k' + +#23#246'@'#196#236#2'+'#197#204','#16'QI'#213#2'c'#172#243#129'&'#3'^'#223'(' + +#207#159#154'7!'#12'*'#219#175'\'#191#178#253#202#218#16'.=7?'#212#254#161 + +#161#130#211#149#20#18#17#5'"*'#165#230#26#193#24#231'='#237#177#214'7'#170 + +#247'^_;{4'#183'!'#216#16#206#29#203'?'#188#188#166#226'i'#128#25' '#16'k' + +#227#216'j'#165#212'4Gq'#28#159#237'F7~!'#235'ir'#213'J'#138#173#194'n'#21 + +#240#236#218#252#133'3'#221'@T'#232#176#163#233'P'#227'/'#138#241'T'#26'ZP.' + +#142#227'i'#178#147'$Y'#236'dO'#245#238#223'.'#1'Z'#233#196'B%'#133'@'#188 + +#185'm'#0#192#216#144#167#242'x'#183'9]'#31#177#241#212#31#213#190#216':p' + +#168#157'$'#9#0#136'I'#28#178#153#236#194'J'#163'Az4'#214#181#13#198#6'c'#189 + +'q'#193'yr'#158'B'#160'g'#150'Z'#204#224#194'DH'#216#25#234'bX'#28'nR6'#147 + +'I)'#167' DL'#211'tq'#161#243#202'JhP5'#26'W'#181#241#181#9#181#245#218'x]' + +#251#165#217'$'#137#164'vT'#154'0'#212'asP'#245#135#197'a'#177'{'#176'3'#151 + +#166#233#164'g'#166#230')'#165#242'<_Y'#14#175#194#198#181#222#224#246'8'#151 + +#2#227'HE'#145#18#8#157','#30'T'#222'8_'#213#190#178'!'#170#182'VZ~y'#177#155 + +#231#249#228#200#30#169#218'8'#142'g'#247#207'J!'#243#246'vos'#247#250#3#249 + +#192'&'#131':Y'#238#180#238#245'u`'#22#182#140#252#184#171#170'n'''#239#204 + +#29#204#243'|b'#243#147#171#214'{'#175#181'.FE1,'#198#229#216#24'c'#3#0'@,!I' + +#146'v'#171#157#229'Y6'#147#165'i'#186#167#229#201#160'I='#133#16#140'1'#214 + +'Z'#239'=1'#1#192#164#194#227'8N'#146'DJ'#249'x'#249#255#9'w'#234#153' q'#137 + +#228'z'#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/source/tchromiumwindow.lrs b/source/tchromiumwindow.lrs new file mode 100644 index 00000000..2ee71c1f --- /dev/null +++ b/source/tchromiumwindow.lrs @@ -0,0 +1,38 @@ +LazarusResources.Add('tchromiumwindow','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#2#0#0#0'o'#21#170#175 + +#0#0#0#9'pHYs'#0#0#13#215#0#0#13#215#1'B('#155'x'#0#0#0#7'tIME'#7#226#5#11#10 + +#31#18#187#205#226'X'#0#0#3#10'IDAT8'#203#173#149'Ml'#27'U'#16#199'g'#158'7' + +#222#197'Qk'#183'IIBl#'#156'JM'#12'V'#137#168#16'E *8Qn'#17' '#142#168#226 + +#200#181#189'p'#228#128#212'['#213#3'\'#171#194#165'= TQ'#129'P'#131#26#138 + +'d'#167#20'PE'#212'H'#9'_'#18'i'#226#218#241'G'#214'~'#187#222'}3'#195'a#w' + +#243'Q)'#144#206'i5o'#222'_3'#191#153'y'#139'"'#2#143#195','#215'u'#23#23#23 + +#247#169'R,'#22#161'\.'#19#145#236#195#136#168'\.+"RJ'#237''''#29#165#20#17 + +#237'I'#162'g'#246#192#232'Q'#7'k.\-'#223#191#241#253'M'#1#4#128#4#192#169 + +#215'_}'#231#197#241#177#131#143#22'b'#230'm'#222'Oo5'#191#190'v'#205'NZ'#153 + +'L'#26#5#1#128#133'ggg'#175'_'#15#222#255#224#204#187#147#187'4Z'#1#128#136 + +'p'#204'.'#220'l^'#186#252#133#149't'#208'Jv'#180#239'j'#175#165#187#237#142 + +'6'#146#224'D'#242#147#243#23#206']Y'#142#199'G'#3#180#153'Q'#127#154'j'#30 + +#206#207#223'N$'#157#182#246#200#176#31#154#227#133#209#3#169#228'j'#203#183 + +#5#6#149#12#165#7#239#222#254'a'#253#244'3'#135#156#205'+'#136#184')'#20'e' + +#20'y'#231#254#30'('#30'+'#212'j'#235'n'#167'{4w'#248#243#143#222'^m'#19#139 + +'d3'#214#221#127#186':'#228#148'm'#245#180'k'#148'b'#14#251']'#3#0'+R!'#162 + +#200'['#249'y!?>'#246#236'sS_~'#245#237#220#197'3'#31'_Y'#178#7#20'"z~xvfb' + +#249#129#7#28#218#142#179#244#231#253'L'#225'p'#31#144#136#168#168#180'X'#193 + +'@l'#242#217#209#247'N'#191#242#203#239#27#141#166#214':'#208#186#215'r{'#183 + +'~'#171#167#146#9'f'#16#129'-P'#153'w)'#141'X'#136#152#133#166'&'''#218#186 + +'Wk{'#134#24#17'Z:'#232#6#6#128#1#0#1#12#131'!V'#24'+'#173#159'Q$'#20#132#20 + +#24#177'mY'#217#8'_'#155#28'Zu'#189#7']'#31#1#12'K'#169#144#209#1'#'#2#3#244 + +#136'@'#152#5#250#211'cE*}F'''#166#167#23#238'-'#140#28'9d)u'#227#158#251#217 + +#135'/|sgMD'#222'x~'#196'0'#136#0' 4'#154#237'\6K'#180#209#135#205#204#219#25 + +#189'<'#214#233't}'#207'7'#134#184#222#9#175#222'i'#13#13#165#237#212#224#210 + +#154'oH'#16' 4'#208#236#132#25#232'lc'#180'} '#135#147#193'K'''#166'W'#170'u' + +#207#15'{'#129#17#162#229#170'n'#235#224#216'S'#131'!'#177#14#229#143#149'Zv' + +'|'#212#134'`'#247#129#140'o'#201'['#185#134#147'(}'#247#227#175#169''''#236 + +'t'#250'`h'#248#228#241#225#182'G'#213'zk'#221#13#158#206#231'rV3'#190'T'#15 + +#187#22'g'#20#217#169#145'F'#241#205#137#185'j'#166'2'#255#211#147#233#129 + +#191'V'#209#13'h'#234'h'#225#228#145#214#1#171#190'5v'#171#208#206#189#29#182 + +'{3'#249#234'L>'#23#243'U'#1'`G <d'#244'x'#222#236' '#8#148'R'#142#227#252'o' + +#9'D'#212'Zc'#163#209#168'T*'#158#231#25'c'#254#235#31#5#17#17#209'q'#156'R' + +#169#132#241#203';I'#237#229#193#142'>'#254#5'Ixq'#26'FW'#221'b'#0#0#0#0'IEN' + +'D'#174'B`'#130 +]); diff --git a/source/uBufferPanel.pas b/source/uBufferPanel.pas index 62ccea1d..48a6acfb 100644 --- a/source/uBufferPanel.pas +++ b/source/uBufferPanel.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uBufferPanel; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$I cef.inc} interface @@ -46,8 +50,13 @@ uses {$IFDEF MSWINDOWS}Winapi.Windows, Winapi.Messages, Vcl.ExtCtrls, Vcl.Controls, Vcl.Graphics,{$ENDIF} System.Classes, System.SyncObjs, System.SysUtils; {$ELSE} - Windows, Messages, Classes, Controls, - ExtCtrls, Graphics, SyncObjs, SysUtils; + Windows, Classes, Forms, Controls, Graphics, + {$IFDEF FPC} + LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase, + {$ELSE} + Messages, + {$ENDIF} + ExtCtrls, SyncObjs, SysUtils; {$ENDIF} type @@ -98,9 +107,16 @@ type property Alignment; property Anchors; property AutoSize; + {$IFNDEF FPC} property BevelEdges; + property BevelKind; + property Ctl3D; + property Locked; + property ParentBackground; + property ParentCtl3D; + property OnCanResize; + {$ENDIF} property BevelInner; - property BevelKind; property BevelOuter; property BevelWidth; property BiDiMode; @@ -109,7 +125,6 @@ type property Caption; property Color; property Constraints; - property Ctl3D; property UseDockManager default True; property DockSite; property DoubleBuffered; @@ -119,11 +134,8 @@ type property Enabled; property FullRepaint; property Font; - property Locked; property ParentBiDiMode; - property ParentBackground; property ParentColor; - property ParentCtl3D; property ParentFont; property ParentShowHint; property PopupMenu; @@ -131,7 +143,6 @@ type property TabOrder; property TabStop; property Visible; - property OnCanResize; property OnClick; property OnConstrainedResize; property OnContextPopup; @@ -179,6 +190,10 @@ type {$ENDIF} end; +{$IFDEF FPC} +procedure Register; +{$ENDIF} + implementation uses @@ -396,4 +411,12 @@ begin end; end; +{$IFDEF FPC} +procedure Register; +begin + {$I tbufferpanel.lrs} + RegisterComponents('Chromium', [TBufferPanel]); +end; +{$ENDIF} + end. diff --git a/source/uCEFAccessibilityHandler.pas b/source/uCEFAccessibilityHandler.pas index 797c76e4..834558c0 100644 --- a/source/uCEFAccessibilityHandler.pas +++ b/source/uCEFAccessibilityHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFAccessibilityHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -107,8 +111,8 @@ begin with PCEFAccessibilityHandler(FData)^ do begin - on_accessibility_tree_change := cef_accessibility_handler_on_accessibility_tree_change; - on_accessibility_location_change := cef_accessibility_handler_on_accessibility_location_change; + on_accessibility_tree_change := {$IFDEF FPC}@{$ENDIF}cef_accessibility_handler_on_accessibility_tree_change; + on_accessibility_location_change := {$IFDEF FPC}@{$ENDIF}cef_accessibility_handler_on_accessibility_location_change; end; end; diff --git a/source/uCEFApp.pas b/source/uCEFApp.pas index f1943119..b401eb3b 100644 --- a/source/uCEFApp.pas +++ b/source/uCEFApp.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFApp; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -198,11 +202,11 @@ begin with PCefApp(FData)^ do begin - on_before_command_line_processing := cef_app_on_before_command_line_processing; - on_register_custom_schemes := cef_app_on_register_custom_schemes; - get_resource_bundle_handler := cef_app_get_resource_bundle_handler; - get_browser_process_handler := cef_app_get_browser_process_handler; - get_render_process_handler := cef_app_get_render_process_handler; + on_before_command_line_processing := {$IFDEF FPC}@{$ENDIF}cef_app_on_before_command_line_processing; + on_register_custom_schemes := {$IFDEF FPC}@{$ENDIF}cef_app_on_register_custom_schemes; + get_resource_bundle_handler := {$IFDEF FPC}@{$ENDIF}cef_app_get_resource_bundle_handler; + get_browser_process_handler := {$IFDEF FPC}@{$ENDIF}cef_app_get_browser_process_handler; + get_render_process_handler := {$IFDEF FPC}@{$ENDIF}cef_app_get_render_process_handler; end; end; diff --git a/source/uCEFApplication.pas b/source/uCEFApplication.pas index fa33a871..29302a3d 100644 --- a/source/uCEFApplication.pas +++ b/source/uCEFApplication.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFApplication; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -126,7 +130,7 @@ type FDisableWebSecurity : boolean; FChromeVersionInfo : TFileVersionInfo; FLibHandle : THandle; - FOnRegisterCustomSchemes : TOnRegisterCustomSchemes; + FOnRegisterCustomSchemes : TOnRegisterCustomSchemesEvent; FAppSettings : TCefSettings; FDeviceScaleFactor : single; FCheckDevToolsResources : boolean; @@ -135,7 +139,7 @@ type FMissingLibFiles : string; FProcessType : TCefProcessType; FShutdownWaitTime : cardinal; - FWidevinePath : string; + FWidevinePath : ustring; FMustFreeLibrary : boolean; FMustCreateResourceBundleHandler : boolean; @@ -346,11 +350,11 @@ type property Status : TCefAplicationStatus read FStatus; property MissingLibFiles : string read FMissingLibFiles; property ShutdownWaitTime : cardinal read FShutdownWaitTime write FShutdownWaitTime; - property WidevinePath : string read FWidevinePath write FWidevinePath; + property WidevinePath : ustring read FWidevinePath write FWidevinePath; property MustFreeLibrary : boolean read FMustFreeLibrary write FMustFreeLibrary; property ChildProcessesCount : integer read GetChildProcessesCount; - property OnRegCustomSchemes : TOnRegisterCustomSchemes read FOnRegisterCustomSchemes write FOnRegisterCustomSchemes; + property OnRegCustomSchemes : TOnRegisterCustomSchemesEvent read FOnRegisterCustomSchemes write FOnRegisterCustomSchemes; // ICefBrowserProcessHandler property OnContextInitialized : TOnContextInitializedEvent read FOnContextInitialized write FOnContextInitialized; @@ -387,7 +391,12 @@ uses {$IFDEF DELPHI16_UP} System.Math, System.IOUtils, System.SysUtils, {$IFDEF MSWINDOWS}WinApi.TlHelp32,{$ENDIF} {$ELSE} - Math, {$IFDEF DELPHI14_UP}IOUtils,{$ENDIF} SysUtils, {$IFDEF MSWINDOWS}TlHelp32,{$ENDIF} + Math, {$IFDEF DELPHI14_UP}IOUtils,{$ENDIF} SysUtils, + {$IFDEF FPC} + jwatlhelp32, + {$ELSE} + TlHelp32, + {$ENDIF} {$ENDIF} uCEFLibFunctions, uCEFMiscFunctions, uCEFCommandLine, uCEFConstants, uCEFSchemeHandlerFactory, uCEFCookieManager, uCEFApp, uCEFRegisterCDMCallback; @@ -818,7 +827,7 @@ begin if FLibLoaded and not(FMultiThreadedMessageLoop) and FExternalMessagePump then - cef_do_message_loop_work; + cef_do_message_loop_work(); end; procedure TCefApplication.RunMessageLoop; @@ -826,7 +835,7 @@ begin if FLibLoaded and not(FMultiThreadedMessageLoop) and not(FExternalMessagePump) then - cef_run_message_loop; + cef_run_message_loop(); end; procedure TCefApplication.QuitMessageLoop; @@ -834,7 +843,7 @@ begin if FLibLoaded and not(FMultiThreadedMessageLoop) and not(FExternalMessagePump) then - cef_quit_message_loop; + cef_quit_message_loop(); end; procedure TCefApplication.SetOsmodalLoop(aValue : boolean); @@ -851,7 +860,7 @@ procedure TCefApplication.ShutDown; begin try FStatus := asShuttingDown; - if FLibLoaded then cef_shutdown; + if FLibLoaded then cef_shutdown(); except on e : exception do if CustomExceptionHandler('TCefApplication.ShutDown', e) then raise; @@ -882,7 +891,7 @@ begin try if (aApp <> nil) then begin - TempArgs.instance := HINSTANCE; + TempArgs.instance := HINSTANCE{$IFDEF FPC}(){$ENDIF}; Result := cef_execute_process(@TempArgs, aApp.Wrap, FWindowsSandboxInfo); end; except @@ -1130,7 +1139,7 @@ begin InitializeCookies; FGlobalContextInitialized := True; - if assigned(FOnContextInitialized) then FOnContextInitialized; + if assigned(FOnContextInitialized) then FOnContextInitialized(); end; procedure TCefApplication.Internal_OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); @@ -1176,7 +1185,7 @@ end; procedure TCefApplication.Internal_OnWebKitInitialized; begin - if assigned(FOnWebKitInitialized) then FOnWebKitInitialized; + if assigned(FOnWebKitInitialized) then FOnWebKitInitialized(); end; procedure TCefApplication.Internal_OnBrowserCreated(const browser: ICefBrowser); @@ -1471,7 +1480,7 @@ begin FLibLoaded := True; Result := True; - if FEnableHighDPISupport then cef_enable_highdpi_support; + if FEnableHighDPISupport then cef_enable_highdpi_support(); end else begin @@ -1489,14 +1498,14 @@ end; function TCefApplication.Load_cef_app_capi_h : boolean; begin - cef_initialize := GetProcAddress(FLibHandle, 'cef_initialize'); - cef_shutdown := GetProcAddress(FLibHandle, 'cef_shutdown'); - cef_execute_process := GetProcAddress(FLibHandle, 'cef_execute_process'); - cef_do_message_loop_work := GetProcAddress(FLibHandle, 'cef_do_message_loop_work'); - cef_run_message_loop := GetProcAddress(FLibHandle, 'cef_run_message_loop'); - cef_quit_message_loop := GetProcAddress(FLibHandle, 'cef_quit_message_loop'); - cef_set_osmodal_loop := GetProcAddress(FLibHandle, 'cef_set_osmodal_loop'); - cef_enable_highdpi_support := GetProcAddress(FLibHandle, 'cef_enable_highdpi_support'); + {$IFDEF FPC}Pointer({$ENDIF}cef_initialize{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_initialize'); + {$IFDEF FPC}Pointer({$ENDIF}cef_shutdown{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_shutdown'); + {$IFDEF FPC}Pointer({$ENDIF}cef_execute_process{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_execute_process'); + {$IFDEF FPC}Pointer({$ENDIF}cef_do_message_loop_work{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_do_message_loop_work'); + {$IFDEF FPC}Pointer({$ENDIF}cef_run_message_loop{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_run_message_loop'); + {$IFDEF FPC}Pointer({$ENDIF}cef_quit_message_loop{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_quit_message_loop'); + {$IFDEF FPC}Pointer({$ENDIF}cef_set_osmodal_loop{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_set_osmodal_loop'); + {$IFDEF FPC}Pointer({$ENDIF}cef_enable_highdpi_support{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_enable_highdpi_support'); Result := assigned(cef_initialize) and assigned(cef_shutdown) and @@ -1510,8 +1519,8 @@ end; function TCefApplication.Load_cef_browser_capi_h : boolean; begin - cef_browser_host_create_browser := GetProcAddress(FLibHandle, 'cef_browser_host_create_browser'); - cef_browser_host_create_browser_sync := GetProcAddress(FLibHandle, 'cef_browser_host_create_browser_sync'); + {$IFDEF FPC}Pointer({$ENDIF}cef_browser_host_create_browser{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_browser_host_create_browser'); + {$IFDEF FPC}Pointer({$ENDIF}cef_browser_host_create_browser_sync{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_browser_host_create_browser_sync'); Result := assigned(cef_browser_host_create_browser) and assigned(cef_browser_host_create_browser_sync); @@ -1519,8 +1528,8 @@ end; function TCefApplication.Load_cef_command_line_capi_h : boolean; begin - cef_command_line_create := GetProcAddress(FLibHandle, 'cef_command_line_create'); - cef_command_line_get_global := GetProcAddress(FLibHandle, 'cef_command_line_get_global'); + {$IFDEF FPC}Pointer({$ENDIF}cef_command_line_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_command_line_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_command_line_get_global{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_command_line_get_global'); Result := assigned(cef_command_line_create) and assigned(cef_command_line_get_global); @@ -1528,9 +1537,9 @@ end; function TCefApplication.Load_cef_cookie_capi_h : boolean; begin - cef_cookie_manager_get_global_manager := GetProcAddress(FLibHandle, 'cef_cookie_manager_get_global_manager'); - cef_cookie_manager_get_blocking_manager := GetProcAddress(FLibHandle, 'cef_cookie_manager_get_blocking_manager'); - cef_cookie_manager_create_manager := GetProcAddress(FLibHandle, 'cef_cookie_manager_create_manager'); + {$IFDEF FPC}Pointer({$ENDIF}cef_cookie_manager_get_global_manager{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_cookie_manager_get_global_manager'); + {$IFDEF FPC}Pointer({$ENDIF}cef_cookie_manager_get_blocking_manager{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_cookie_manager_get_blocking_manager'); + {$IFDEF FPC}Pointer({$ENDIF}cef_cookie_manager_create_manager{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_cookie_manager_create_manager'); Result := assigned(cef_cookie_manager_get_global_manager) and assigned(cef_cookie_manager_get_blocking_manager) and @@ -1539,8 +1548,8 @@ end; function TCefApplication.Load_cef_crash_util_h : boolean; begin - cef_crash_reporting_enabled := GetProcAddress(FLibHandle, 'cef_crash_reporting_enabled'); - cef_set_crash_key_value := GetProcAddress(FLibHandle, 'cef_set_crash_key_value'); + {$IFDEF FPC}Pointer({$ENDIF}cef_crash_reporting_enabled{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_crash_reporting_enabled'); + {$IFDEF FPC}Pointer({$ENDIF}cef_set_crash_key_value{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_set_crash_key_value'); Result := assigned(cef_crash_reporting_enabled) and assigned(cef_set_crash_key_value); @@ -1548,21 +1557,21 @@ end; function TCefApplication.Load_cef_drag_data_capi_h : boolean; begin - cef_drag_data_create := GetProcAddress(FLibHandle, 'cef_drag_data_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_drag_data_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_drag_data_create'); Result := assigned(cef_drag_data_create); end; function TCefApplication.Load_cef_file_util_capi_h : boolean; begin - cef_create_directory := GetProcAddress(FLibHandle, 'cef_create_directory'); - cef_get_temp_directory := GetProcAddress(FLibHandle, 'cef_get_temp_directory'); - cef_create_new_temp_directory := GetProcAddress(FLibHandle, 'cef_create_new_temp_directory'); - cef_create_temp_directory_in_directory := GetProcAddress(FLibHandle, 'cef_create_temp_directory_in_directory'); - cef_directory_exists := GetProcAddress(FLibHandle, 'cef_directory_exists'); - cef_delete_file := GetProcAddress(FLibHandle, 'cef_delete_file'); - cef_zip_directory := GetProcAddress(FLibHandle, 'cef_zip_directory'); - cef_load_crlsets_file := GetProcAddress(FLibHandle, 'cef_load_crlsets_file'); + {$IFDEF FPC}Pointer({$ENDIF}cef_create_directory{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_create_directory'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_temp_directory{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_temp_directory'); + {$IFDEF FPC}Pointer({$ENDIF}cef_create_new_temp_directory{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_create_new_temp_directory'); + {$IFDEF FPC}Pointer({$ENDIF}cef_create_temp_directory_in_directory{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_create_temp_directory_in_directory'); + {$IFDEF FPC}Pointer({$ENDIF}cef_directory_exists{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_directory_exists'); + {$IFDEF FPC}Pointer({$ENDIF}cef_delete_file{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_delete_file'); + {$IFDEF FPC}Pointer({$ENDIF}cef_zip_directory{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_zip_directory'); + {$IFDEF FPC}Pointer({$ENDIF}cef_load_crlsets_file{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_load_crlsets_file'); Result := assigned(cef_create_directory) and assigned(cef_get_temp_directory) and @@ -1576,23 +1585,23 @@ end; function TCefApplication.Load_cef_image_capi_h : boolean; begin - cef_image_create := GetProcAddress(FLibHandle, 'cef_image_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_image_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_image_create'); Result := assigned(cef_image_create); end; function TCefApplication.Load_cef_menu_model_capi_h : boolean; begin - cef_menu_model_create := GetProcAddress(FLibHandle, 'cef_menu_model_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_menu_model_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_menu_model_create'); Result := assigned(cef_menu_model_create); end; function TCefApplication.Load_cef_origin_whitelist_capi_h : boolean; begin - cef_add_cross_origin_whitelist_entry := GetProcAddress(FLibHandle, 'cef_add_cross_origin_whitelist_entry'); - cef_remove_cross_origin_whitelist_entry := GetProcAddress(FLibHandle, 'cef_remove_cross_origin_whitelist_entry'); - cef_clear_cross_origin_whitelist := GetProcAddress(FLibHandle, 'cef_clear_cross_origin_whitelist'); + {$IFDEF FPC}Pointer({$ENDIF}cef_add_cross_origin_whitelist_entry{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_add_cross_origin_whitelist_entry'); + {$IFDEF FPC}Pointer({$ENDIF}cef_remove_cross_origin_whitelist_entry{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_remove_cross_origin_whitelist_entry'); + {$IFDEF FPC}Pointer({$ENDIF}cef_clear_cross_origin_whitelist{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_clear_cross_origin_whitelist'); Result := assigned(cef_add_cross_origin_whitelist_entry) and assigned(cef_remove_cross_origin_whitelist_entry) and @@ -1601,18 +1610,18 @@ end; function TCefApplication.Load_cef_parser_capi_h : boolean; begin - cef_parse_url := GetProcAddress(FLibHandle, 'cef_parse_url'); - cef_create_url := GetProcAddress(FLibHandle, 'cef_create_url'); - cef_format_url_for_security_display := GetProcAddress(FLibHandle, 'cef_format_url_for_security_display'); - cef_get_mime_type := GetProcAddress(FLibHandle, 'cef_get_mime_type'); - cef_get_extensions_for_mime_type := GetProcAddress(FLibHandle, 'cef_get_extensions_for_mime_type'); - cef_base64encode := GetProcAddress(FLibHandle, 'cef_base64encode'); - cef_base64decode := GetProcAddress(FLibHandle, 'cef_base64decode'); - cef_uriencode := GetProcAddress(FLibHandle, 'cef_uriencode'); - cef_uridecode := GetProcAddress(FLibHandle, 'cef_uridecode'); - cef_parse_json := GetProcAddress(FLibHandle, 'cef_parse_json'); - cef_parse_jsonand_return_error := GetProcAddress(FLibHandle, 'cef_parse_jsonand_return_error'); - cef_write_json := GetProcAddress(FLibHandle, 'cef_write_json'); + {$IFDEF FPC}Pointer({$ENDIF}cef_parse_url{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_parse_url'); + {$IFDEF FPC}Pointer({$ENDIF}cef_create_url{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_create_url'); + {$IFDEF FPC}Pointer({$ENDIF}cef_format_url_for_security_display{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_format_url_for_security_display'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_mime_type{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_mime_type'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_extensions_for_mime_type{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_extensions_for_mime_type'); + {$IFDEF FPC}Pointer({$ENDIF}cef_base64encode{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_base64encode'); + {$IFDEF FPC}Pointer({$ENDIF}cef_base64decode{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_base64decode'); + {$IFDEF FPC}Pointer({$ENDIF}cef_uriencode{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_uriencode'); + {$IFDEF FPC}Pointer({$ENDIF}cef_uridecode{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_uridecode'); + {$IFDEF FPC}Pointer({$ENDIF}cef_parse_json{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_parse_json'); + {$IFDEF FPC}Pointer({$ENDIF}cef_parse_jsonand_return_error{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_parse_jsonand_return_error'); + {$IFDEF FPC}Pointer({$ENDIF}cef_write_json{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_write_json'); Result := assigned(cef_parse_url) and assigned(cef_create_url) and @@ -1630,37 +1639,37 @@ end; function TCefApplication.Load_cef_path_util_capi_h : boolean; begin - cef_get_path := GetProcAddress(FLibHandle, 'cef_get_path'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_path{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_path'); Result := assigned(cef_get_path); end; function TCefApplication.Load_cef_print_settings_capi_h : boolean; begin - cef_print_settings_create := GetProcAddress(FLibHandle, 'cef_print_settings_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_print_settings_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_print_settings_create'); Result := assigned(cef_print_settings_create); end; function TCefApplication.Load_cef_process_message_capi_h : boolean; begin - cef_process_message_create := GetProcAddress(FLibHandle, 'cef_process_message_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_process_message_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_process_message_create'); Result := assigned(cef_process_message_create); end; function TCefApplication.Load_cef_process_util_capi_h : boolean; begin - cef_launch_process := GetProcAddress(FLibHandle, 'cef_launch_process'); + {$IFDEF FPC}Pointer({$ENDIF}cef_launch_process{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_launch_process'); Result := assigned(cef_launch_process); end; function TCefApplication.Load_cef_request_capi_h : boolean; begin - cef_request_create := GetProcAddress(FLibHandle, 'cef_request_create'); - cef_post_data_create := GetProcAddress(FLibHandle, 'cef_post_data_create'); - cef_post_data_element_create := GetProcAddress(FLibHandle, 'cef_post_data_element_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_request_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_request_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_post_data_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_post_data_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_post_data_element_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_post_data_element_create'); Result := assigned(cef_request_create) and assigned(cef_post_data_create) and @@ -1669,9 +1678,9 @@ end; function TCefApplication.Load_cef_request_context_capi_h : boolean; begin - cef_request_context_get_global_context := GetProcAddress(FLibHandle, 'cef_request_context_get_global_context'); - cef_request_context_create_context := GetProcAddress(FLibHandle, 'cef_request_context_create_context'); - cef_create_context_shared := GetProcAddress(FLibHandle, 'cef_create_context_shared'); + {$IFDEF FPC}Pointer({$ENDIF}cef_request_context_get_global_context{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_request_context_get_global_context'); + {$IFDEF FPC}Pointer({$ENDIF}cef_request_context_create_context{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_request_context_create_context'); + {$IFDEF FPC}Pointer({$ENDIF}cef_create_context_shared{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_create_context_shared'); Result := assigned(cef_request_context_get_global_context) and assigned(cef_request_context_create_context) and @@ -1680,29 +1689,29 @@ end; function TCefApplication.Load_cef_resource_bundle_capi_h : boolean; begin - cef_resource_bundle_get_global := GetProcAddress(FLibHandle, 'cef_resource_bundle_get_global'); + {$IFDEF FPC}Pointer({$ENDIF}cef_resource_bundle_get_global{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_resource_bundle_get_global'); Result := assigned(cef_resource_bundle_get_global); end; function TCefApplication.Load_cef_response_capi_h : boolean; begin - cef_response_create := GetProcAddress(FLibHandle, 'cef_response_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_response_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_response_create'); Result := assigned(cef_response_create); end; function TCefApplication.Load_cef_server_capi_h : boolean; begin - cef_server_create := GetProcAddress(FLibHandle, 'cef_server_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_server_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_server_create'); Result := assigned(cef_server_create); end; function TCefApplication.Load_cef_scheme_capi_h : boolean; begin - cef_register_scheme_handler_factory := GetProcAddress(FLibHandle, 'cef_register_scheme_handler_factory'); - cef_clear_scheme_handler_factories := GetProcAddress(FLibHandle, 'cef_clear_scheme_handler_factories'); + {$IFDEF FPC}Pointer({$ENDIF}cef_register_scheme_handler_factory{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_register_scheme_handler_factory'); + {$IFDEF FPC}Pointer({$ENDIF}cef_clear_scheme_handler_factories{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_clear_scheme_handler_factories'); Result := assigned(cef_register_scheme_handler_factory) and assigned(cef_clear_scheme_handler_factories); @@ -1710,8 +1719,8 @@ end; function TCefApplication.Load_cef_ssl_info_capi_h : boolean; begin - cef_is_cert_status_error := GetProcAddress(FLibHandle, 'cef_is_cert_status_error'); - cef_is_cert_status_minor_error := GetProcAddress(FLibHandle, 'cef_is_cert_status_minor_error'); + {$IFDEF FPC}Pointer({$ENDIF}cef_is_cert_status_error{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_is_cert_status_error'); + {$IFDEF FPC}Pointer({$ENDIF}cef_is_cert_status_minor_error{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_is_cert_status_minor_error'); Result := assigned(cef_is_cert_status_error) and assigned(cef_is_cert_status_minor_error); @@ -1719,11 +1728,11 @@ end; function TCefApplication.Load_cef_stream_capi_h : boolean; begin - cef_stream_reader_create_for_file := GetProcAddress(FLibHandle, 'cef_stream_reader_create_for_file'); - cef_stream_reader_create_for_data := GetProcAddress(FLibHandle, 'cef_stream_reader_create_for_data'); - cef_stream_reader_create_for_handler := GetProcAddress(FLibHandle, 'cef_stream_reader_create_for_handler'); - cef_stream_writer_create_for_file := GetProcAddress(FLibHandle, 'cef_stream_writer_create_for_file'); - cef_stream_writer_create_for_handler := GetProcAddress(FLibHandle, 'cef_stream_writer_create_for_handler'); + {$IFDEF FPC}Pointer({$ENDIF}cef_stream_reader_create_for_file{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_stream_reader_create_for_file'); + {$IFDEF FPC}Pointer({$ENDIF}cef_stream_reader_create_for_data{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_stream_reader_create_for_data'); + {$IFDEF FPC}Pointer({$ENDIF}cef_stream_reader_create_for_handler{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_stream_reader_create_for_handler'); + {$IFDEF FPC}Pointer({$ENDIF}cef_stream_writer_create_for_file{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_stream_writer_create_for_file'); + {$IFDEF FPC}Pointer({$ENDIF}cef_stream_writer_create_for_handler{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_stream_writer_create_for_handler'); Result := assigned(cef_stream_reader_create_for_file) and assigned(cef_stream_reader_create_for_data) and @@ -1734,11 +1743,11 @@ end; function TCefApplication.Load_cef_task_capi_h : boolean; begin - cef_task_runner_get_for_current_thread := GetProcAddress(FLibHandle, 'cef_task_runner_get_for_current_thread'); - cef_task_runner_get_for_thread := GetProcAddress(FLibHandle, 'cef_task_runner_get_for_thread'); - cef_currently_on := GetProcAddress(FLibHandle, 'cef_currently_on'); - cef_post_task := GetProcAddress(FLibHandle, 'cef_post_task'); - cef_post_delayed_task := GetProcAddress(FLibHandle, 'cef_post_delayed_task'); + {$IFDEF FPC}Pointer({$ENDIF}cef_task_runner_get_for_current_thread{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_task_runner_get_for_current_thread'); + {$IFDEF FPC}Pointer({$ENDIF}cef_task_runner_get_for_thread{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_task_runner_get_for_thread'); + {$IFDEF FPC}Pointer({$ENDIF}cef_currently_on{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_currently_on'); + {$IFDEF FPC}Pointer({$ENDIF}cef_post_task{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_post_task'); + {$IFDEF FPC}Pointer({$ENDIF}cef_post_delayed_task{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_post_delayed_task'); Result := assigned(cef_task_runner_get_for_current_thread) and assigned(cef_task_runner_get_for_thread) and @@ -1749,16 +1758,16 @@ end; function TCefApplication.Load_cef_thread_capi_h : boolean; begin - cef_thread_create := GetProcAddress(FLibHandle, 'cef_thread_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_thread_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_thread_create'); Result := assigned(cef_thread_create); end; function TCefApplication.Load_cef_trace_capi_h : boolean; begin - cef_begin_tracing := GetProcAddress(FLibHandle, 'cef_begin_tracing'); - cef_end_tracing := GetProcAddress(FLibHandle, 'cef_end_tracing'); - cef_now_from_system_trace_time := GetProcAddress(FLibHandle, 'cef_now_from_system_trace_time'); + {$IFDEF FPC}Pointer({$ENDIF}cef_begin_tracing{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_begin_tracing'); + {$IFDEF FPC}Pointer({$ENDIF}cef_end_tracing{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_end_tracing'); + {$IFDEF FPC}Pointer({$ENDIF}cef_now_from_system_trace_time{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_now_from_system_trace_time'); Result := assigned(cef_begin_tracing) and assigned(cef_end_tracing) and @@ -1767,30 +1776,30 @@ end; function TCefApplication.Load_cef_urlrequest_capi_h : boolean; begin - cef_urlrequest_create := GetProcAddress(FLibHandle, 'cef_urlrequest_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_urlrequest_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_urlrequest_create'); Result := assigned(cef_urlrequest_create); end; function TCefApplication.Load_cef_v8_capi_h : boolean; begin - cef_v8context_get_current_context := GetProcAddress(FLibHandle, 'cef_v8context_get_current_context'); - cef_v8context_get_entered_context := GetProcAddress(FLibHandle, 'cef_v8context_get_entered_context'); - cef_v8context_in_context := GetProcAddress(FLibHandle, 'cef_v8context_in_context'); - cef_v8value_create_undefined := GetProcAddress(FLibHandle, 'cef_v8value_create_undefined'); - cef_v8value_create_null := GetProcAddress(FLibHandle, 'cef_v8value_create_null'); - cef_v8value_create_bool := GetProcAddress(FLibHandle, 'cef_v8value_create_bool'); - cef_v8value_create_int := GetProcAddress(FLibHandle, 'cef_v8value_create_int'); - cef_v8value_create_uint := GetProcAddress(FLibHandle, 'cef_v8value_create_uint'); - cef_v8value_create_double := GetProcAddress(FLibHandle, 'cef_v8value_create_double'); - cef_v8value_create_date := GetProcAddress(FLibHandle, 'cef_v8value_create_date'); - cef_v8value_create_string := GetProcAddress(FLibHandle, 'cef_v8value_create_string'); - cef_v8value_create_object := GetProcAddress(FLibHandle, 'cef_v8value_create_object'); - cef_v8value_create_array := GetProcAddress(FLibHandle, 'cef_v8value_create_array'); - cef_v8value_create_array_buffer := GetProcAddress(FLibHandle, 'cef_v8value_create_array_buffer'); - cef_v8value_create_function := GetProcAddress(FLibHandle, 'cef_v8value_create_function'); - cef_v8stack_trace_get_current := GetProcAddress(FLibHandle, 'cef_v8stack_trace_get_current'); - cef_register_extension := GetProcAddress(FLibHandle, 'cef_register_extension'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8context_get_current_context{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8context_get_current_context'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8context_get_entered_context{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8context_get_entered_context'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8context_in_context{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8context_in_context'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_undefined{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_undefined'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_null{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_null'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_bool{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_bool'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_int{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_int'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_uint{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_uint'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_double{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_double'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_date{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_date'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_string{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_string'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_object{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_object'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_array{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_array'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_array_buffer{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_array_buffer'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8value_create_function{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8value_create_function'); + {$IFDEF FPC}Pointer({$ENDIF}cef_v8stack_trace_get_current{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_v8stack_trace_get_current'); + {$IFDEF FPC}Pointer({$ENDIF}cef_register_extension{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_register_extension'); Result := assigned(cef_v8context_get_current_context) and assigned(cef_v8context_get_entered_context) and @@ -1813,10 +1822,10 @@ end; function TCefApplication.Load_cef_values_capi_h : boolean; begin - cef_value_create := GetProcAddress(FLibHandle, 'cef_value_create'); - cef_binary_value_create := GetProcAddress(FLibHandle, 'cef_binary_value_create'); - cef_dictionary_value_create := GetProcAddress(FLibHandle, 'cef_dictionary_value_create'); - cef_list_value_create := GetProcAddress(FLibHandle, 'cef_list_value_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_value_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_value_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_binary_value_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_binary_value_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_dictionary_value_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_dictionary_value_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_list_value_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_list_value_create'); Result := assigned(cef_value_create) and assigned(cef_binary_value_create) and @@ -1826,19 +1835,19 @@ end; function TCefApplication.Load_cef_waitable_event_capi_h : boolean; begin - cef_waitable_event_create := GetProcAddress(FLibHandle, 'cef_waitable_event_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_waitable_event_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_waitable_event_create'); Result := assigned(cef_waitable_event_create); end; function TCefApplication.Load_cef_web_plugin_capi_h : boolean; begin - cef_visit_web_plugin_info := GetProcAddress(FLibHandle, 'cef_visit_web_plugin_info'); - cef_refresh_web_plugins := GetProcAddress(FLibHandle, 'cef_refresh_web_plugins'); - cef_unregister_internal_web_plugin := GetProcAddress(FLibHandle, 'cef_unregister_internal_web_plugin'); - cef_register_web_plugin_crash := GetProcAddress(FLibHandle, 'cef_register_web_plugin_crash'); - cef_is_web_plugin_unstable := GetProcAddress(FLibHandle, 'cef_is_web_plugin_unstable'); - cef_register_widevine_cdm := GetProcAddress(FLibHandle, 'cef_register_widevine_cdm'); + {$IFDEF FPC}Pointer({$ENDIF}cef_visit_web_plugin_info{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_visit_web_plugin_info'); + {$IFDEF FPC}Pointer({$ENDIF}cef_refresh_web_plugins{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_refresh_web_plugins'); + {$IFDEF FPC}Pointer({$ENDIF}cef_unregister_internal_web_plugin{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_unregister_internal_web_plugin'); + {$IFDEF FPC}Pointer({$ENDIF}cef_register_web_plugin_crash{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_register_web_plugin_crash'); + {$IFDEF FPC}Pointer({$ENDIF}cef_is_web_plugin_unstable{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_is_web_plugin_unstable'); + {$IFDEF FPC}Pointer({$ENDIF}cef_register_widevine_cdm{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_register_widevine_cdm'); Result := assigned(cef_visit_web_plugin_info) and assigned(cef_refresh_web_plugins) and @@ -1850,23 +1859,23 @@ end; function TCefApplication.Load_cef_xml_reader_capi_h : boolean; begin - cef_xml_reader_create := GetProcAddress(FLibHandle, 'cef_xml_reader_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_xml_reader_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_xml_reader_create'); Result := assigned(cef_xml_reader_create); end; function TCefApplication.Load_cef_zip_reader_capi_h : boolean; begin - cef_zip_reader_create := GetProcAddress(FLibHandle, 'cef_zip_reader_create'); + {$IFDEF FPC}Pointer({$ENDIF}cef_zip_reader_create{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_zip_reader_create'); Result := assigned(cef_zip_reader_create); end; function TCefApplication.Load_cef_logging_internal_h : boolean; begin - cef_get_min_log_level := GetProcAddress(FLibHandle, 'cef_get_min_log_level'); - cef_get_vlog_level := GetProcAddress(FLibHandle, 'cef_get_vlog_level'); - cef_log := GetProcAddress(FLibHandle, 'cef_log'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_min_log_level{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_min_log_level'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_vlog_level{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_vlog_level'); + {$IFDEF FPC}Pointer({$ENDIF}cef_log{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_log'); Result := assigned(cef_get_min_log_level) and assigned(cef_get_vlog_level) and @@ -1875,13 +1884,13 @@ end; function TCefApplication.Load_cef_string_list_h : boolean; begin - cef_string_list_alloc := GetProcAddress(FLibHandle, 'cef_string_list_alloc'); - cef_string_list_size := GetProcAddress(FLibHandle, 'cef_string_list_size'); - cef_string_list_value := GetProcAddress(FLibHandle, 'cef_string_list_value'); - cef_string_list_append := GetProcAddress(FLibHandle, 'cef_string_list_append'); - cef_string_list_clear := GetProcAddress(FLibHandle, 'cef_string_list_clear'); - cef_string_list_free := GetProcAddress(FLibHandle, 'cef_string_list_free'); - cef_string_list_copy := GetProcAddress(FLibHandle, 'cef_string_list_copy'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_alloc{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_alloc'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_size{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_size'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_value{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_value'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_append{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_append'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_clear{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_clear'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_free{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_free'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_list_copy{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_list_copy'); Result := assigned(cef_string_list_alloc) and assigned(cef_string_list_size) and @@ -1894,14 +1903,14 @@ end; function TCefApplication.Load_cef_string_map_h : boolean; begin - cef_string_map_alloc := GetProcAddress(FLibHandle, 'cef_string_map_alloc'); - cef_string_map_size := GetProcAddress(FLibHandle, 'cef_string_map_size'); - cef_string_map_find := GetProcAddress(FLibHandle, 'cef_string_map_find'); - cef_string_map_key := GetProcAddress(FLibHandle, 'cef_string_map_key'); - cef_string_map_value := GetProcAddress(FLibHandle, 'cef_string_map_value'); - cef_string_map_append := GetProcAddress(FLibHandle, 'cef_string_map_append'); - cef_string_map_clear := GetProcAddress(FLibHandle, 'cef_string_map_clear'); - cef_string_map_free := GetProcAddress(FLibHandle, 'cef_string_map_free'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_alloc{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_alloc'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_size{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_size'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_find{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_find'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_key{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_key'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_value{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_value'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_append{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_append'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_clear{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_clear'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_map_free{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_map_free'); Result := assigned(cef_string_map_alloc) and assigned(cef_string_map_size) and @@ -1915,15 +1924,15 @@ end; function TCefApplication.Load_cef_string_multimap_h : boolean; begin - cef_string_multimap_alloc := GetProcAddress(FLibHandle, 'cef_string_multimap_alloc'); - cef_string_multimap_size := GetProcAddress(FLibHandle, 'cef_string_multimap_size'); - cef_string_multimap_find_count := GetProcAddress(FLibHandle, 'cef_string_multimap_find_count'); - cef_string_multimap_enumerate := GetProcAddress(FLibHandle, 'cef_string_multimap_enumerate'); - cef_string_multimap_key := GetProcAddress(FLibHandle, 'cef_string_multimap_key'); - cef_string_multimap_value := GetProcAddress(FLibHandle, 'cef_string_multimap_value'); - cef_string_multimap_append := GetProcAddress(FLibHandle, 'cef_string_multimap_append'); - cef_string_multimap_clear := GetProcAddress(FLibHandle, 'cef_string_multimap_clear'); - cef_string_multimap_free := GetProcAddress(FLibHandle, 'cef_string_multimap_free'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_alloc{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_alloc'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_size{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_size'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_find_count{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_find_count'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_enumerate{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_enumerate'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_key{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_key'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_value{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_value'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_append{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_append'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_clear{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_clear'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_multimap_free{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_multimap_free'); Result := assigned(cef_string_multimap_alloc) and assigned(cef_string_multimap_size) and @@ -1938,31 +1947,31 @@ end; function TCefApplication.Load_cef_string_types_h : boolean; begin - cef_string_wide_set := GetProcAddress(FLibHandle, 'cef_string_wide_set'); - cef_string_utf8_set := GetProcAddress(FLibHandle, 'cef_string_utf8_set'); - cef_string_utf16_set := GetProcAddress(FLibHandle, 'cef_string_utf16_set'); - cef_string_wide_clear := GetProcAddress(FLibHandle, 'cef_string_wide_clear'); - cef_string_utf8_clear := GetProcAddress(FLibHandle, 'cef_string_utf8_clear'); - cef_string_utf16_clear := GetProcAddress(FLibHandle, 'cef_string_utf16_clear'); - cef_string_wide_cmp := GetProcAddress(FLibHandle, 'cef_string_wide_cmp'); - cef_string_utf8_cmp := GetProcAddress(FLibHandle, 'cef_string_utf8_cmp'); - cef_string_utf16_cmp := GetProcAddress(FLibHandle, 'cef_string_utf16_cmp'); - cef_string_wide_to_utf8 := GetProcAddress(FLibHandle, 'cef_string_wide_to_utf8'); - cef_string_utf8_to_wide := GetProcAddress(FLibHandle, 'cef_string_utf8_to_wide'); - cef_string_wide_to_utf16 := GetProcAddress(FLibHandle, 'cef_string_wide_to_utf16'); - cef_string_utf16_to_wide := GetProcAddress(FLibHandle, 'cef_string_utf16_to_wide'); - cef_string_utf8_to_utf16 := GetProcAddress(FLibHandle, 'cef_string_utf8_to_utf16'); - cef_string_utf16_to_utf8 := GetProcAddress(FLibHandle, 'cef_string_utf16_to_utf8'); - cef_string_ascii_to_wide := GetProcAddress(FLibHandle, 'cef_string_ascii_to_wide'); - cef_string_ascii_to_utf16 := GetProcAddress(FLibHandle, 'cef_string_ascii_to_utf16'); - cef_string_userfree_wide_alloc := GetProcAddress(FLibHandle, 'cef_string_userfree_wide_alloc'); - cef_string_userfree_utf8_alloc := GetProcAddress(FLibHandle, 'cef_string_userfree_utf8_alloc'); - cef_string_userfree_utf16_alloc := GetProcAddress(FLibHandle, 'cef_string_userfree_utf16_alloc'); - cef_string_userfree_wide_free := GetProcAddress(FLibHandle, 'cef_string_userfree_wide_free'); - cef_string_userfree_utf8_free := GetProcAddress(FLibHandle, 'cef_string_userfree_utf8_free'); - cef_string_userfree_utf16_free := GetProcAddress(FLibHandle, 'cef_string_userfree_utf16_free'); - cef_string_utf16_to_lower := GetProcAddress(FLibHandle, 'cef_string_utf16_to_lower'); - cef_string_utf16_to_upper := GetProcAddress(FLibHandle, 'cef_string_utf16_to_upper'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_wide_set{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_wide_set'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf8_set{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf8_set'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_set{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_set'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_wide_clear{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_wide_clear'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf8_clear{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf8_clear'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_clear{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_clear'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_wide_cmp{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_wide_cmp'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf8_cmp{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf8_cmp'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_cmp{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_cmp'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_wide_to_utf8{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_wide_to_utf8'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf8_to_wide{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf8_to_wide'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_wide_to_utf16{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_wide_to_utf16'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_to_wide{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_to_wide'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf8_to_utf16{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf8_to_utf16'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_to_utf8{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_to_utf8'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_ascii_to_wide{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_ascii_to_wide'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_ascii_to_utf16{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_ascii_to_utf16'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_userfree_wide_alloc{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_userfree_wide_alloc'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_userfree_utf8_alloc{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_userfree_utf8_alloc'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_userfree_utf16_alloc{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_userfree_utf16_alloc'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_userfree_wide_free{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_userfree_wide_free'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_userfree_utf8_free{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_userfree_utf8_free'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_userfree_utf16_free{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_userfree_utf16_free'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_to_lower{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_to_lower'); + {$IFDEF FPC}Pointer({$ENDIF}cef_string_utf16_to_upper{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_string_utf16_to_upper'); Result := assigned(cef_string_wide_set) and assigned(cef_string_utf8_set) and @@ -1993,8 +2002,8 @@ end; function TCefApplication.Load_cef_thread_internal_h : boolean; begin - cef_get_current_platform_thread_id := GetProcAddress(FLibHandle, 'cef_get_current_platform_thread_id'); - cef_get_current_platform_thread_handle := GetProcAddress(FLibHandle, 'cef_get_current_platform_thread_handle'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_current_platform_thread_id{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_current_platform_thread_id'); + {$IFDEF FPC}Pointer({$ENDIF}cef_get_current_platform_thread_handle{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_get_current_platform_thread_handle'); Result := assigned(cef_get_current_platform_thread_id) and assigned(cef_get_current_platform_thread_handle); @@ -2002,15 +2011,15 @@ end; function TCefApplication.Load_cef_trace_event_internal_h : boolean; begin - cef_trace_event_instant := GetProcAddress(FLibHandle, 'cef_trace_event_instant'); - cef_trace_event_begin := GetProcAddress(FLibHandle, 'cef_trace_event_begin'); - cef_trace_event_end := GetProcAddress(FLibHandle, 'cef_trace_event_end'); - cef_trace_counter := GetProcAddress(FLibHandle, 'cef_trace_counter'); - cef_trace_counter_id := GetProcAddress(FLibHandle, 'cef_trace_counter_id'); - cef_trace_event_async_begin := GetProcAddress(FLibHandle, 'cef_trace_event_async_begin'); - cef_trace_event_async_step_into := GetProcAddress(FLibHandle, 'cef_trace_event_async_step_into'); - cef_trace_event_async_step_past := GetProcAddress(FLibHandle, 'cef_trace_event_async_step_past'); - cef_trace_event_async_end := GetProcAddress(FLibHandle, 'cef_trace_event_async_end'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_instant{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_instant'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_begin{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_begin'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_end{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_end'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_counter{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_counter'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_counter_id{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_counter_id'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_async_begin{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_async_begin'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_async_step_into{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_async_step_into'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_async_step_past{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_async_step_past'); + {$IFDEF FPC}Pointer({$ENDIF}cef_trace_event_async_end{$IFDEF FPC}){$ENDIF} := GetProcAddress(FLibHandle, 'cef_trace_event_async_end'); Result := assigned(cef_trace_event_instant) and assigned(cef_trace_event_begin) and diff --git a/source/uCEFAuthCallback.pas b/source/uCEFAuthCallback.pas index 4d2cc413..f589aff0 100644 --- a/source/uCEFAuthCallback.pas +++ b/source/uCEFAuthCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFAuthCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -66,22 +70,23 @@ uses procedure TCefAuthCallbackRef.Cancel; begin - PCefAuthCallback(FData).cancel(PCefAuthCallback(FData)); + PCefAuthCallback(FData)^.cancel(PCefAuthCallback(FData)); end; procedure TCefAuthCallbackRef.Cont(const username, password: ustring); var - u, p: TCefString; + TempUsername, TempPassword : TCefString; begin - u := CefString(username); - p := CefString(password); - PCefAuthCallback(FData).cont(PCefAuthCallback(FData), @u, @p); + TempUsername := CefString(username); + TempPassword := CefString(password); + PCefAuthCallback(FData)^.cont(PCefAuthCallback(FData), @TempUsername, @TempPassword); end; class function TCefAuthCallbackRef.UnWrap(data: Pointer): ICefAuthCallback; begin - if data <> nil then - Result := Create(data) as ICefAuthCallback else + if (data <> nil) then + Result := Create(data) as ICefAuthCallback + else Result := nil; end; diff --git a/source/uCEFBaseRefCounted.pas b/source/uCEFBaseRefCounted.pas index fe54d73d..821b205f 100644 --- a/source/uCEFBaseRefCounted.pas +++ b/source/uCEFBaseRefCounted.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFBaseRefCounted; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -159,15 +163,15 @@ begin if owned then begin - PCefBaseRefCounted(FData)^.add_ref := cef_base_add_ref_owned; - PCefBaseRefCounted(FData)^.release := cef_base_release_owned; - PCefBaseRefCounted(FData)^.has_one_ref := cef_base_has_one_ref_owned; + PCefBaseRefCounted(FData)^.add_ref := {$IFDEF FPC}@{$ENDIF}cef_base_add_ref_owned; + PCefBaseRefCounted(FData)^.release := {$IFDEF FPC}@{$ENDIF}cef_base_release_owned; + PCefBaseRefCounted(FData)^.has_one_ref := {$IFDEF FPC}@{$ENDIF}cef_base_has_one_ref_owned; end else begin - PCefBaseRefCounted(FData)^.add_ref := cef_base_add_ref; - PCefBaseRefCounted(FData)^.release := cef_base_release_ref; - PCefBaseRefCounted(FData)^.has_one_ref := cef_base_has_one_ref; + PCefBaseRefCounted(FData)^.add_ref := {$IFDEF FPC}@{$ENDIF}cef_base_add_ref; + PCefBaseRefCounted(FData)^.release := {$IFDEF FPC}@{$ENDIF}cef_base_release_ref; + PCefBaseRefCounted(FData)^.has_one_ref := {$IFDEF FPC}@{$ENDIF}cef_base_has_one_ref; end; end; @@ -264,13 +268,13 @@ end; // ************************************************ -function TLoggingInterfacedObject._AddRef: Integer; +function TLoggingInterfacedObject._AddRef: Integer; stdcall; begin Result := inherited _AddRef; CefDebugLog(ClassName + '._AddRef -> FRefCount = ' + IntToStr(Result)); end; -function TLoggingInterfacedObject._Release: Integer; +function TLoggingInterfacedObject._Release: Integer; stdcall; begin CefDebugLog(ClassName + '._Release -> FRefCount = ' + IntToStr(pred(RefCount))); Result := inherited _Release; diff --git a/source/uCEFBaseScopedWrapper.pas b/source/uCEFBaseScopedWrapper.pas index 9d84cf3d..21ccb3ff 100644 --- a/source/uCEFBaseScopedWrapper.pas +++ b/source/uCEFBaseScopedWrapper.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFBaseScopedWrapper; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFBeforeDownloadCallback.pas b/source/uCEFBeforeDownloadCallback.pas index 5429cc62..ba427fe5 100644 --- a/source/uCEFBeforeDownloadCallback.pas +++ b/source/uCEFBeforeDownloadCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFBeforeDownloadCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -63,20 +67,19 @@ implementation uses uCEFMiscFunctions, uCEFLibFunctions; -procedure TCefBeforeDownloadCallbackRef.Cont(const downloadPath: ustring; - showDialog: Boolean); +procedure TCefBeforeDownloadCallbackRef.Cont(const downloadPath: ustring; showDialog: Boolean); var - dp: TCefString; + TempPath : TCefString; begin - dp := CefString(downloadPath); - PCefBeforeDownloadCallback(FData).cont(PCefBeforeDownloadCallback(FData), @dp, Ord(showDialog)); + TempPath := CefString(downloadPath); + PCefBeforeDownloadCallback(FData)^.cont(PCefBeforeDownloadCallback(FData), @TempPath, Ord(showDialog)); end; -class function TCefBeforeDownloadCallbackRef.UnWrap( - data: Pointer): ICefBeforeDownloadCallback; +class function TCefBeforeDownloadCallbackRef.UnWrap(data: Pointer): ICefBeforeDownloadCallback; begin - if data <> nil then - Result := Create(data) as ICefBeforeDownloadCallback else + if (data <> nil) then + Result := Create(data) as ICefBeforeDownloadCallback + else Result := nil; end; diff --git a/source/uCEFBinaryValue.pas b/source/uCEFBinaryValue.pas index d1bda177..76a7fddf 100644 --- a/source/uCEFBinaryValue.pas +++ b/source/uCEFBinaryValue.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -36,6 +36,10 @@ *) unit uCEFBinaryValue; + +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} {$IFNDEF CPUX64} {$ALIGN ON} @@ -92,38 +96,37 @@ uses function TCefBinaryValueRef.Copy: ICefBinaryValue; begin - Result := UnWrap(PCefBinaryValue(FData).copy(PCefBinaryValue(FData))); + Result := UnWrap(PCefBinaryValue(FData)^.copy(PCefBinaryValue(FData))); end; -function TCefBinaryValueRef.GetData(buffer: Pointer; bufferSize, - dataOffset: NativeUInt): NativeUInt; +function TCefBinaryValueRef.GetData(buffer: Pointer; bufferSize, dataOffset: NativeUInt): NativeUInt; begin - Result := PCefBinaryValue(FData).get_data(PCefBinaryValue(FData), buffer, bufferSize, dataOffset); + Result := PCefBinaryValue(FData)^.get_data(PCefBinaryValue(FData), buffer, bufferSize, dataOffset); end; function TCefBinaryValueRef.GetSize: NativeUInt; begin - Result := PCefBinaryValue(FData).get_size(PCefBinaryValue(FData)); + Result := PCefBinaryValue(FData)^.get_size(PCefBinaryValue(FData)); end; function TCefBinaryValueRef.IsEqual(const that: ICefBinaryValue): Boolean; begin - Result := PCefBinaryValue(FData).is_equal(PCefBinaryValue(FData), CefGetData(that)) <> 0; + Result := PCefBinaryValue(FData)^.is_equal(PCefBinaryValue(FData), CefGetData(that)) <> 0; end; function TCefBinaryValueRef.IsOwned: Boolean; begin - Result := PCefBinaryValue(FData).is_owned(PCefBinaryValue(FData)) <> 0; + Result := PCefBinaryValue(FData)^.is_owned(PCefBinaryValue(FData)) <> 0; end; function TCefBinaryValueRef.IsSame(const that: ICefBinaryValue): Boolean; begin - Result := PCefBinaryValue(FData).is_same(PCefBinaryValue(FData), CefGetData(that)) <> 0; + Result := PCefBinaryValue(FData)^.is_same(PCefBinaryValue(FData), CefGetData(that)) <> 0; end; function TCefBinaryValueRef.IsValid: Boolean; begin - Result := PCefBinaryValue(FData).is_valid(PCefBinaryValue(FData)) <> 0; + Result := PCefBinaryValue(FData)^.is_valid(PCefBinaryValue(FData)) <> 0; end; class function TCefBinaryValueRef.New(const data: Pointer; dataSize: NativeUInt): ICefBinaryValue; @@ -133,8 +136,9 @@ end; class function TCefBinaryValueRef.UnWrap(data: Pointer): ICefBinaryValue; begin - if data <> nil then - Result := Create(data) as ICefBinaryValue else + if (data <> nil) then + Result := Create(data) as ICefBinaryValue + else Result := nil; end; @@ -226,13 +230,13 @@ begin with PCefBinaryValue(FData)^ do begin - is_valid := cef_binary_value_is_valid; - is_owned := cef_binary_value_is_owned; - is_same := cef_binary_value_is_same; - is_equal := cef_binary_value_is_equal; - copy := cef_binary_value_copy; - get_size := cef_binary_value_get_size; - get_data := cef_binary_value_get_data; + is_valid := {$IFDEF FPC}@{$ENDIF}cef_binary_value_is_valid; + is_owned := {$IFDEF FPC}@{$ENDIF}cef_binary_value_is_owned; + is_same := {$IFDEF FPC}@{$ENDIF}cef_binary_value_is_same; + is_equal := {$IFDEF FPC}@{$ENDIF}cef_binary_value_is_equal; + copy := {$IFDEF FPC}@{$ENDIF}cef_binary_value_copy; + get_size := {$IFDEF FPC}@{$ENDIF}cef_binary_value_get_size; + get_data := {$IFDEF FPC}@{$ENDIF}cef_binary_value_get_data; end; end; diff --git a/source/uCEFBrowser.pas b/source/uCEFBrowser.pas index fe6ca5cc..113a712c 100644 --- a/source/uCEFBrowser.pas +++ b/source/uCEFBrowser.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFBrowser; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -123,7 +127,7 @@ type procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); procedure SendMouseWheelEvent(const event: PCefMouseEvent; deltaX, deltaY: Integer); - procedure SendFocusEvent(setFocus: Boolean); + procedure SendFocusEvent(aSetFocus: Boolean); procedure SendCaptureLostEvent; procedure NotifyMoveOrResizeStarted; function GetWindowlessFrameRate : Integer; @@ -182,10 +186,10 @@ end; function TCefBrowserRef.GetFrame(const name: ustring): ICefFrame; var - n: TCefString; + TempName : TCefString; begin - n := CefString(name); - Result := TCefFrameRef.UnWrap(PCefBrowser(FData)^.get_frame(PCefBrowser(FData), @n)); + TempName := CefString(name); + Result := TCefFrameRef.UnWrap(PCefBrowser(FData)^.get_frame(PCefBrowser(FData), @TempName)); end; function TCefBrowserRef.GetFrameCount: NativeUInt; @@ -307,7 +311,7 @@ end; procedure TCefBrowserHostRef.CloseDevTools; begin - PCefBrowserHost(FData).close_dev_tools(FData); + PCefBrowserHost(FData)^.close_dev_tools(FData); end; procedure TCefBrowserHostRef.DownloadImage(const imageUrl : ustring; @@ -319,7 +323,7 @@ var url: TCefString; begin url := CefString(imageUrl); - PCefBrowserHost(FData).download_image(FData, @url, Ord(isFavicon), maxImageSize, Ord(bypassCache), CefGetData(callback)); + PCefBrowserHost(FData)^.download_image(FData, @url, Ord(isFavicon), maxImageSize, Ord(bypassCache), CefGetData(callback)); end; procedure TCefBrowserHostRef.DownloadImageProc(const imageUrl : ustring; @@ -333,77 +337,75 @@ end; procedure TCefBrowserHostRef.DragSourceEndedAt(x, y: Integer; op: TCefDragOperation); begin - PCefBrowserHost(FData).drag_source_ended_at(FData, x, y, op); + PCefBrowserHost(FData)^.drag_source_ended_at(FData, x, y, op); end; procedure TCefBrowserHostRef.DragSourceSystemDragEnded; begin - PCefBrowserHost(FData).drag_source_system_drag_ended(FData); + PCefBrowserHost(FData)^.drag_source_system_drag_ended(FData); end; function TCefBrowserHostRef.GetVisibleNavigationEntry : ICefNavigationEntry; begin - Result := TCefNavigationEntryRef.UnWrap(PCefBrowserHost(FData).get_visible_navigation_entry(PCefBrowserHost(FData))); + Result := TCefNavigationEntryRef.UnWrap(PCefBrowserHost(FData)^.get_visible_navigation_entry(PCefBrowserHost(FData))); end; procedure TCefBrowserHostRef.SetAccessibilityState(accessibilityState: TCefState); begin - PCefBrowserHost(FData).set_accessibility_state(FData, accessibilityState); + PCefBrowserHost(FData)^.set_accessibility_state(FData, accessibilityState); end; procedure TCefBrowserHostRef.SetAutoResizeEnabled(enabled: boolean; const min_size, max_size: PCefSize); begin - PCefBrowserHost(FData).set_auto_resize_enabled(FData, Ord(enabled), min_size, max_size); + PCefBrowserHost(FData)^.set_auto_resize_enabled(FData, Ord(enabled), min_size, max_size); end; function TCefBrowserHostRef.GetExtension : ICefExtension; begin - Result := TCefExtensionRef.UnWrap(PCefBrowserHost(FData).get_extension(FData)); + Result := TCefExtensionRef.UnWrap(PCefBrowserHost(FData)^.get_extension(FData)); end; function TCefBrowserHostRef.IsBackgroundHost : boolean; begin - Result := PCefBrowserHost(FData).is_background_host(FData) <> 0; + Result := PCefBrowserHost(FData)^.is_background_host(FData) <> 0; end; -procedure TCefBrowserHostRef.DragTargetDragEnter(const dragData: ICefDragData; - const event: PCefMouseEvent; allowedOps: TCefDragOperations); +procedure TCefBrowserHostRef.DragTargetDragEnter(const dragData: ICefDragData; const event: PCefMouseEvent; allowedOps: TCefDragOperations); begin - PCefBrowserHost(FData).drag_target_drag_enter(FData, CefGetData(dragData), event, allowedOps); + PCefBrowserHost(FData)^.drag_target_drag_enter(FData, CefGetData(dragData), event, allowedOps); end; procedure TCefBrowserHostRef.DragTargetDragLeave; begin - PCefBrowserHost(FData).drag_target_drag_leave(FData); + PCefBrowserHost(FData)^.drag_target_drag_leave(FData); end; -procedure TCefBrowserHostRef.DragTargetDragOver(const event: PCefMouseEvent; - allowedOps: TCefDragOperations); +procedure TCefBrowserHostRef.DragTargetDragOver(const event: PCefMouseEvent; allowedOps: TCefDragOperations); begin - PCefBrowserHost(FData).drag_target_drag_over(FData, event, allowedOps); + PCefBrowserHost(FData)^.drag_target_drag_over(FData, event, allowedOps); end; procedure TCefBrowserHostRef.DragTargetDrop(event: PCefMouseEvent); begin - PCefBrowserHost(FData).drag_target_drop(FData, event); + PCefBrowserHost(FData)^.drag_target_drop(FData, event); end; procedure TCefBrowserHostRef.Find(identifier: Integer; const searchText: ustring; forward, matchCase, findNext: Boolean); var - s: TCefString; + TempText : TCefString; begin - s := CefString(searchText); - PCefBrowserHost(FData).find(FData, identifier, @s, Ord(forward), Ord(matchCase), Ord(findNext)); + TempText := CefString(searchText); + PCefBrowserHost(FData)^.find(FData, identifier, @TempText, Ord(forward), Ord(matchCase), Ord(findNext)); end; function TCefBrowserHostRef.GetBrowser: ICefBrowser; begin - Result := TCefBrowserRef.UnWrap(PCefBrowserHost(FData).get_browser(PCefBrowserHost(FData))); + Result := TCefBrowserRef.UnWrap(PCefBrowserHost(FData)^.get_browser(PCefBrowserHost(FData))); end; procedure TCefBrowserHostRef.Print; begin - PCefBrowserHost(FData).print(FData); + PCefBrowserHost(FData)^.print(FData); end; procedure TCefBrowserHostRef.PrintToPdf(const path : ustring; @@ -413,7 +415,7 @@ var str: TCefString; begin str := CefString(path); - PCefBrowserHost(FData).print_to_pdf(FData, @str, settings, CefGetData(callback)); + PCefBrowserHost(FData)^.print_to_pdf(FData, @str, settings, CefGetData(callback)); end; procedure TCefBrowserHostRef.PrintToPdfProc(const path : ustring; @@ -428,7 +430,7 @@ var str: TCefString; begin str := CefString(word); - PCefBrowserHost(FData).replace_misspelling(FData, @str); + PCefBrowserHost(FData)^.replace_misspelling(FData, @str); end; procedure TCefBrowserHostRef.RunFileDialog( mode : TCefFileDialogMode; @@ -448,13 +450,13 @@ begin TempAcceptFilters := TCefStringListOwn.Create; TempAcceptFilters.AddStrings(acceptFilters); - PCefBrowserHost(FData).run_file_dialog(PCefBrowserHost(FData), - mode, - @TempTitle, - @TempPath, - TempAcceptFilters.Handle, - selectedAcceptFilter, - CefGetData(callback)); + PCefBrowserHost(FData)^.run_file_dialog(PCefBrowserHost(FData), + mode, + @TempTitle, + @TempPath, + TempAcceptFilters.Handle, + selectedAcceptFilter, + CefGetData(callback)); finally TempAcceptFilters := nil; end; @@ -475,27 +477,27 @@ var str: TCefString; begin str := CefString(word); - PCefBrowserHost(FData).add_word_to_dictionary(FData, @str); + PCefBrowserHost(FData)^.add_word_to_dictionary(FData, @str); end; procedure TCefBrowserHostRef.CloseBrowser(forceClose: Boolean); begin - PCefBrowserHost(FData).close_browser(PCefBrowserHost(FData), Ord(forceClose)); + PCefBrowserHost(FData)^.close_browser(PCefBrowserHost(FData), Ord(forceClose)); end; procedure TCefBrowserHostRef.SendCaptureLostEvent; begin - PCefBrowserHost(FData).send_capture_lost_event(FData); + PCefBrowserHost(FData)^.send_capture_lost_event(FData); end; -procedure TCefBrowserHostRef.SendFocusEvent(setFocus: Boolean); +procedure TCefBrowserHostRef.SendFocusEvent(aSetFocus: Boolean); begin - PCefBrowserHost(FData).send_focus_event(FData, Ord(setFocus)); + PCefBrowserHost(FData)^.send_focus_event(FData, Ord(aSetFocus)); end; procedure TCefBrowserHostRef.SendKeyEvent(const event: PCefKeyEvent); begin - PCefBrowserHost(FData).send_key_event(FData, event); + PCefBrowserHost(FData)^.send_key_event(FData, event); end; procedure TCefBrowserHostRef.SendMouseClickEvent(const event : PCefMouseEvent; @@ -503,57 +505,57 @@ procedure TCefBrowserHostRef.SendMouseClickEvent(const event : PCefMouseEve mouseUp : Boolean; clickCount : Integer); begin - PCefBrowserHost(FData).send_mouse_click_event(FData, event, kind, Ord(mouseUp), clickCount); + PCefBrowserHost(FData)^.send_mouse_click_event(FData, event, kind, Ord(mouseUp), clickCount); end; procedure TCefBrowserHostRef.SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); begin - PCefBrowserHost(FData).send_mouse_move_event(FData, event, Ord(mouseLeave)); + PCefBrowserHost(FData)^.send_mouse_move_event(FData, event, Ord(mouseLeave)); end; procedure TCefBrowserHostRef.SendMouseWheelEvent(const event: PCefMouseEvent; deltaX, deltaY: Integer); begin - PCefBrowserHost(FData).send_mouse_wheel_event(FData, event, deltaX, deltaY); + PCefBrowserHost(FData)^.send_mouse_wheel_event(FData, event, deltaX, deltaY); end; procedure TCefBrowserHostRef.SetFocus(focus: Boolean); begin - PCefBrowserHost(FData).set_focus(PCefBrowserHost(FData), Ord(focus)); + PCefBrowserHost(FData)^.set_focus(PCefBrowserHost(FData), Ord(focus)); end; procedure TCefBrowserHostRef.SetMouseCursorChangeDisabled(disabled: Boolean); begin - PCefBrowserHost(FData).set_mouse_cursor_change_disabled(PCefBrowserHost(FData), Ord(disabled)); + PCefBrowserHost(FData)^.set_mouse_cursor_change_disabled(PCefBrowserHost(FData), Ord(disabled)); end; procedure TCefBrowserHostRef.SetWindowlessFrameRate(frameRate: Integer); begin - PCefBrowserHost(FData).set_windowless_frame_rate(PCefBrowserHost(FData), frameRate); + PCefBrowserHost(FData)^.set_windowless_frame_rate(PCefBrowserHost(FData), frameRate); end; function TCefBrowserHostRef.GetWindowHandle: TCefWindowHandle; begin - Result := PCefBrowserHost(FData).get_window_handle(PCefBrowserHost(FData)) + Result := PCefBrowserHost(FData)^.get_window_handle(PCefBrowserHost(FData)) end; function TCefBrowserHostRef.GetWindowlessFrameRate: Integer; begin - Result := PCefBrowserHost(FData).get_windowless_frame_rate(PCefBrowserHost(FData)); + Result := PCefBrowserHost(FData)^.get_windowless_frame_rate(PCefBrowserHost(FData)); end; function TCefBrowserHostRef.GetOpenerWindowHandle: TCefWindowHandle; begin - Result := PCefBrowserHost(FData).get_opener_window_handle(PCefBrowserHost(FData)); + Result := PCefBrowserHost(FData)^.get_opener_window_handle(PCefBrowserHost(FData)); end; function TCefBrowserHostRef.GetRequestContext: ICefRequestContext; begin - Result := TCefRequestContextRef.UnWrap(PCefBrowserHost(FData).get_request_context(FData)); + Result := TCefRequestContextRef.UnWrap(PCefBrowserHost(FData)^.get_request_context(FData)); end; procedure TCefBrowserHostRef.GetNavigationEntries(const visitor: ICefNavigationEntryVisitor; currentOnly: Boolean); begin - PCefBrowserHost(FData).get_navigation_entries(FData, CefGetData(visitor), Ord(currentOnly)); + PCefBrowserHost(FData)^.get_navigation_entries(FData, CefGetData(visitor), Ord(currentOnly)); end; procedure TCefBrowserHostRef.GetNavigationEntriesProc(const proc: TCefNavigationEntryVisitorProc; currentOnly: Boolean); @@ -563,7 +565,7 @@ end; function TCefBrowserHostRef.GetZoomLevel: Double; begin - Result := PCefBrowserHost(FData).get_zoom_level(PCefBrowserHost(FData)); + Result := PCefBrowserHost(FData)^.get_zoom_level(PCefBrowserHost(FData)); end; procedure TCefBrowserHostRef.IMESetComposition(const text : ustring; @@ -575,7 +577,7 @@ var TempString : TCefString; begin TempString := CefString(text); - PCefBrowserHost(FData).ime_set_composition(PCefBrowserHost(FData), @TempString, underlinesCount, underlines, replacement_range, selection_range); + PCefBrowserHost(FData)^.ime_set_composition(PCefBrowserHost(FData), @TempString, underlinesCount, underlines, replacement_range, selection_range); end; procedure TCefBrowserHostRef.IMECommitText(const text: ustring; const replacement_range : PCefRange; relative_cursor_pos : integer); @@ -583,57 +585,57 @@ var TempString : TCefString; begin TempString := CefString(text); - PCefBrowserHost(FData).ime_commit_text(PCefBrowserHost(FData), @TempString, replacement_range, relative_cursor_pos); + PCefBrowserHost(FData)^.ime_commit_text(PCefBrowserHost(FData), @TempString, replacement_range, relative_cursor_pos); end; procedure TCefBrowserHostRef.IMEFinishComposingText(keep_selection : boolean); begin - PCefBrowserHost(FData).ime_finish_composing_text(PCefBrowserHost(FData), ord(keep_selection)); + PCefBrowserHost(FData)^.ime_finish_composing_text(PCefBrowserHost(FData), ord(keep_selection)); end; procedure TCefBrowserHostRef.IMECancelComposition; begin - PCefBrowserHost(FData).ime_cancel_composition(PCefBrowserHost(FData)); + PCefBrowserHost(FData)^.ime_cancel_composition(PCefBrowserHost(FData)); end; function TCefBrowserHostRef.HasDevTools: Boolean; begin - Result := PCefBrowserHost(FData).has_dev_tools(FData) <> 0; + Result := PCefBrowserHost(FData)^.has_dev_tools(FData) <> 0; end; function TCefBrowserHostRef.HasView: Boolean; begin - Result := PCefBrowserHost(FData).has_view(FData) <> 0; + Result := PCefBrowserHost(FData)^.has_view(FData) <> 0; end; procedure TCefBrowserHostRef.Invalidate(kind: TCefPaintElementType); begin - PCefBrowserHost(FData).invalidate(FData, kind); + PCefBrowserHost(FData)^.invalidate(FData, kind); end; function TCefBrowserHostRef.IsMouseCursorChangeDisabled: Boolean; begin - Result := PCefBrowserHost(FData).is_mouse_cursor_change_disabled(FData) <> 0 + Result := PCefBrowserHost(FData)^.is_mouse_cursor_change_disabled(FData) <> 0 end; function TCefBrowserHostRef.IsWindowRenderingDisabled: Boolean; begin - Result := PCefBrowserHost(FData).is_window_rendering_disabled(FData) <> 0 + Result := PCefBrowserHost(FData)^.is_window_rendering_disabled(FData) <> 0 end; procedure TCefBrowserHostRef.NotifyMoveOrResizeStarted; begin - PCefBrowserHost(FData).notify_move_or_resize_started(PCefBrowserHost(FData)); + PCefBrowserHost(FData)^.notify_move_or_resize_started(PCefBrowserHost(FData)); end; procedure TCefBrowserHostRef.NotifyScreenInfoChanged; begin - PCefBrowserHost(FData).notify_screen_info_changed(PCefBrowserHost(FData)); + PCefBrowserHost(FData)^.notify_screen_info_changed(PCefBrowserHost(FData)); end; procedure TCefBrowserHostRef.SetZoomLevel(const zoomLevel: Double); begin - PCefBrowserHost(FData).set_zoom_level(PCefBrowserHost(FData), zoomLevel); + PCefBrowserHost(FData)^.set_zoom_level(PCefBrowserHost(FData), zoomLevel); end; procedure TCefBrowserHostRef.ShowDevTools(const windowInfo : PCefWindowInfo; @@ -641,42 +643,43 @@ procedure TCefBrowserHostRef.ShowDevTools(const windowInfo : PCefWindowInf const settings : PCefBrowserSettings; inspectElementAt : PCefPoint); begin - PCefBrowserHost(FData).show_dev_tools(FData, windowInfo, CefGetData(client), settings, inspectElementAt); + PCefBrowserHost(FData)^.show_dev_tools(FData, windowInfo, CefGetData(client), settings, inspectElementAt); end; procedure TCefBrowserHostRef.StartDownload(const url: ustring); var - u: TCefString; + TempURL : TCefString; begin - u := CefString(url); - PCefBrowserHost(FData).start_download(PCefBrowserHost(FData), @u); + TempURL := CefString(url); + PCefBrowserHost(FData)^.start_download(PCefBrowserHost(FData), @TempURL); end; procedure TCefBrowserHostRef.StopFinding(clearSelection: Boolean); begin - PCefBrowserHost(FData).stop_finding(FData, Ord(clearSelection)); + PCefBrowserHost(FData)^.stop_finding(FData, Ord(clearSelection)); end; function TCefBrowserHostRef.TryCloseBrowser: Boolean; begin - Result := PCefBrowserHost(FData).try_close_browser(FData) <> 0; + Result := PCefBrowserHost(FData)^.try_close_browser(FData) <> 0; end; class function TCefBrowserHostRef.UnWrap(data: Pointer): ICefBrowserHost; begin - if data <> nil then - Result := Create(data) as ICefBrowserHost else + if (data <> nil) then + Result := Create(data) as ICefBrowserHost + else Result := nil; end; procedure TCefBrowserHostRef.WasHidden(hidden: Boolean); begin - PCefBrowserHost(FData).was_hidden(FData, Ord(hidden)); + PCefBrowserHost(FData)^.was_hidden(FData, Ord(hidden)); end; procedure TCefBrowserHostRef.WasResized; begin - PCefBrowserHost(FData).was_resized(FData); + PCefBrowserHost(FData)^.was_resized(FData); end; diff --git a/source/uCEFBrowserProcessHandler.pas b/source/uCEFBrowserProcessHandler.pas index 04b2d1dc..3079bddd 100644 --- a/source/uCEFBrowserProcessHandler.pas +++ b/source/uCEFBrowserProcessHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -36,6 +36,10 @@ *) unit uCEFBrowserProcessHandler; + +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} {$IFNDEF CPUX64} {$ALIGN ON} @@ -152,11 +156,11 @@ begin with PCefBrowserProcessHandler(FData)^ do begin - on_context_initialized := cef_browser_process_handler_on_context_initialized; - on_before_child_process_launch := cef_browser_process_handler_on_before_child_process_launch; - on_render_process_thread_created := cef_browser_process_handler_on_render_process_thread_created; - get_print_handler := cef_browser_process_handler_get_print_handler; - on_schedule_message_pump_work := cef_browser_process_handler_on_schedule_message_pump_work; + on_context_initialized := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_context_initialized; + on_before_child_process_launch := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_before_child_process_launch; + on_render_process_thread_created := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_render_process_thread_created; + get_print_handler := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_get_print_handler; + on_schedule_message_pump_work := {$IFDEF FPC}@{$ENDIF}cef_browser_process_handler_on_schedule_message_pump_work; end; end; diff --git a/source/uCEFCallback.pas b/source/uCEFCallback.pas index 11dafd77..4e59eb3c 100644 --- a/source/uCEFCallback.pas +++ b/source/uCEFCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFChromium.pas b/source/uCEFChromium.pas index 9c1ea40a..1823b1f7 100644 --- a/source/uCEFChromium.pas +++ b/source/uCEFChromium.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFChromium; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,11 +54,17 @@ uses {$IFDEF DELPHI16_UP} {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, Vcl.Controls, Vcl.Graphics, Vcl.Forms, WinApi.ActiveX,{$ENDIF} System.Classes, {$ELSE} - Windows, Messages, Classes, Controls, Graphics, Forms, ActiveX, + Windows, Classes, Forms, Controls, Graphics, ActiveX, + {$IFDEF FPC} + LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase, + {$ELSE} + Messages, + {$ENDIF} {$ENDIF} uCEFTypes, uCEFInterfaces, uCEFLibFunctions, uCEFMiscFunctions, uCEFClient, uCEFConstants, uCEFTask, uCEFDomVisitor, uCEFChromiumEvents, - uCEFChromiumOptions, uCEFChromiumFontOptions, uCEFPDFPrintOptions, uCEFDragAndDropMgr; + {$IFNDEF FPC}uCEFDragAndDropMgr,{$ENDIF} + uCEFChromiumOptions, uCEFChromiumFontOptions, uCEFPDFPrintOptions; type TChromium = class(TComponent, IChromiumEvents) @@ -70,15 +80,15 @@ type FDefaultEncoding : ustring; FProxyType : integer; FProxyScheme : TCefProxyScheme; - FProxyServer : string; + FProxyServer : ustring; FProxyPort : integer; - FProxyUsername : string; - FProxyPassword : string; - FProxyScriptURL : string; - FProxyByPassList : string; + FProxyUsername : ustring; + FProxyPassword : ustring; + FProxyScriptURL : ustring; + FProxyByPassList : ustring; FUpdatePreferences : boolean; - FCustomHeaderName : string; - FCustomHeaderValue : string; + FCustomHeaderName : ustring; + FCustomHeaderValue : ustring; FAddCustomHeader : boolean; FDoNotTrack : boolean; FSendReferrer : boolean; @@ -89,7 +99,6 @@ type FCookiePrefs : integer; FImagesPrefs : integer; FZoomStep : byte; - FWindowName : string; FPrefsFileName : string; FIsOSR : boolean; FInitialized : boolean; @@ -99,22 +108,25 @@ type FDevWindowInfo : TCefWindowInfo; FDevBrowserSettings : TCefBrowserSettings; FDragOperations : TCefDragOperations; + {$IFNDEF FPC} FDragDropManager : TCEFDragAndDropMgr; + {$ENDIF} FDropTargetCtrl : TWinControl; FDragAndDropInitialized : boolean; FWebRTCIPHandlingPolicy : TCefWebRTCHandlingPolicy; FWebRTCMultipleRoutes : TCefState; FWebRTCNonProxiedUDP : TCefState; - + {$IFNDEF FPC} FOldBrowserCompWndPrc : TFNWndProc; FOldWidgetCompWndPrc : TFNWndProc; FOldRenderCompWndPrc : TFNWndProc; - FBrowserCompHWND : THandle; - FWidgetCompHWND : THandle; - FRenderCompHWND : THandle; FBrowserCompStub : Pointer; FWidgetCompStub : Pointer; FRenderCompStub : Pointer; + {$ENDIF} + FBrowserCompHWND : THandle; + FWidgetCompHWND : THandle; + FRenderCompHWND : THandle; // ICefClient FOnProcessMessageReceived : TOnProcessMessageReceived; @@ -219,9 +231,11 @@ type FOnPrefsAvailable : TOnPrefsAvailableEvent; FOnCookiesDeleted : TOnCookiesDeletedEvent; FOnResolvedHostAvailable : TOnResolvedIPsAvailableEvent; + {$IFNDEF FPC} FOnBrowserCompMsg : TOnCompMsgEvent; FOnWidgetCompMsg : TOnCompMsgEvent; FOnRenderCompMsg : TOnCompMsgEvent; + {$ENDIF} function GetIsLoading : boolean; function GetMultithreadApp : boolean; @@ -232,7 +246,7 @@ type function GetHasBrowser : boolean; function GetCanGoBack : boolean; function GetCanGoForward : boolean; - function GetDocumentURL : string; + function GetDocumentURL : ustring; function GetZoomLevel : double; function GetZoomPct : double; function GetIsPopUp : boolean; @@ -243,7 +257,7 @@ type function GetVisibleNavigationEntry : ICefNavigationEntry; function GetHasValidMainFrame : boolean; function GetFrameCount : NativeUInt; - function GetRequestContextCache : string; + function GetRequestContextCache : ustring; function GetRequestContextIsGlobal : boolean; procedure SetDoNotTrack(aValue : boolean); @@ -259,14 +273,14 @@ type procedure SetImagesPrefs(aValue : integer); procedure SetProxyType(aValue : integer); procedure SetProxyScheme(aValue : TCefProxyScheme); - procedure SetProxyServer(const aValue : string); + procedure SetProxyServer(const aValue : ustring); procedure SetProxyPort(aValue : integer); - procedure SetProxyUsername(const aValue : string); - procedure SetProxyPassword(const aValue : string); - procedure SetProxyScriptURL(const aValue : string); - procedure SetProxyByPassList(const aValue : string); - procedure SetCustomHeaderName(const aValue : string); - procedure SetCustomHeaderValue(const aValue : string); + procedure SetProxyUsername(const aValue : ustring); + procedure SetProxyPassword(const aValue : ustring); + procedure SetProxyScriptURL(const aValue : ustring); + procedure SetProxyByPassList(const aValue : ustring); + procedure SetCustomHeaderName(const aValue : ustring); + procedure SetCustomHeaderValue(const aValue : ustring); procedure SetZoomLevel(const aValue : double); procedure SetZoomPct(const aValue : double); procedure SetZoomStep(aValue : byte); @@ -283,13 +297,13 @@ type procedure InitializeEvents; procedure InitializeSettings(var aSettings : TCefBrowserSettings); - procedure GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : string); + procedure GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : ustring); function UpdateProxyPrefs(const aBrowser: ICefBrowser) : boolean; - function UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : boolean) : boolean; overload; - function UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : integer) : boolean; overload; - function UpdatePreference(const aBrowser: ICefBrowser; const aName : string; const aValue : double) : boolean; overload; - function UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : string) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : boolean) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : integer) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; const aValue : double) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean; overload; procedure HandleDictionary(const aDict : ICefDictionaryValue; var aResultSL : TStringList; const aRoot : string); procedure HandleNull(const aValue : ICefValue; var aResultSL : TStringList; const aRoot, aKey : string); @@ -302,14 +316,14 @@ type procedure HandleInvalid(const aValue : ICefValue; var aResultSL : TStringList; const aRoot, aKey : string); function MustCreateLoadHandler : boolean; virtual; - function MustCreateFocusHandler : boolean; virtual; - function MustCreateContextMenuHandler : boolean; virtual; - function MustCreateDialogHandler : boolean; virtual; - function MustCreateKeyboardHandler : boolean; virtual; - function MustCreateDisplayHandler : boolean; virtual; - function MustCreateDownloadHandler : boolean; virtual; - function MustCreateJsDialogHandler : boolean; virtual; - function MustCreateDragHandler : boolean; virtual; + function MustCreateFocusHandler : boolean; virtual; + function MustCreateContextMenuHandler : boolean; virtual; + function MustCreateDialogHandler : boolean; virtual; + function MustCreateKeyboardHandler : boolean; virtual; + function MustCreateDisplayHandler : boolean; virtual; + function MustCreateDownloadHandler : boolean; virtual; + function MustCreateJsDialogHandler : boolean; virtual; + function MustCreateDragHandler : boolean; virtual; function MustCreateFindHandler : boolean; virtual; procedure PrefsAvailableMsg(var aMessage : TMessage); @@ -322,9 +336,11 @@ type procedure FreeAndNilStub(var aStub : pointer); procedure CreateStub(const aMethod : TWndMethod; var aStub : Pointer); procedure WndProc(var aMessage: TMessage); + {$IFNDEF FPC} procedure BrowserCompWndProc(var aMessage: TMessage); procedure WidgetCompWndProc(var aMessage: TMessage); procedure RenderCompWndProc(var aMessage: TMessage); + {$ENDIF} 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); @@ -434,7 +450,7 @@ type // Custom procedure doCookiesDeleted(numDeleted : integer); virtual; procedure doPdfPrintFinished(aResultOK : boolean); virtual; - procedure doTextResultAvailable(const aText : string); virtual; + procedure doTextResultAvailable(const aText : ustring); virtual; procedure doUpdatePreferences(const aBrowser: ICefBrowser); virtual; procedure doUpdateOwnPreferences; virtual; function doSavePreferences : boolean; virtual; @@ -451,8 +467,8 @@ type function ShareRequestContext(var aContext : ICefRequestContext; const aHandler : ICefRequestContextHandler = nil) : boolean; procedure InitializeDragAndDrop(const aDropTargetCtrl : TWinControl); procedure ShutdownDragAndDrop; - function CreateBrowser(const aBrowserParent : TWinControl = nil; const aWindowName : string = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : string = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; - function CreateBrowser(aParentHandle : HWND; aParentRect : TRect; const aWindowName : string = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : string = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; + function CreateBrowser(const aBrowserParent : TWinControl = nil; const aWindowName : ustring = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : ustring = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; + function CreateBrowser(aParentHandle : HWND; aParentRect : TRect; const aWindowName : ustring = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : ustring = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; procedure LoadURL(const aURL : ustring); procedure LoadString(const aString : ustring; const aURL : ustring = ''); @@ -562,18 +578,17 @@ type property RenderHandle : THandle read FRenderCompHWND; property FrameIsFocused : boolean read GetFrameIsFocused; property Initialized : boolean read GetInitialized; - property RequestContextCache : string read GetRequestContextCache; + property RequestContextCache : ustring read GetRequestContextCache; property RequestContextIsGlobal : boolean read GetRequestContextIsGlobal; property CookiePrefs : integer read FCookiePrefs write SetCookiePrefs; property ImagesPrefs : integer read FImagesPrefs write SetImagesPrefs; - property DocumentURL : string read GetDocumentURL; - property WindowName : string read FWindowName write FWindowName; + property DocumentURL : ustring read GetDocumentURL; property ZoomLevel : double read GetZoomLevel write SetZoomLevel; property ZoomPct : double read GetZoomPct write SetZoomPct; property ZoomStep : byte read FZoomStep write SetZoomStep; property WindowlessFrameRate : integer read GetWindowlessFrameRate write SetWindowlessFrameRate; - property CustomHeaderName : string read FCustomHeaderName write SetCustomHeaderName; - property CustomHeaderValue : string read FCustomHeaderValue write SetCustomHeaderValue; + property CustomHeaderName : ustring read FCustomHeaderName write SetCustomHeaderName; + property CustomHeaderValue : ustring read FCustomHeaderValue write SetCustomHeaderValue; property DoNotTrack : boolean read FDoNotTrack write SetDoNotTrack; property SendReferrer : boolean read FSendReferrer write SetSendReferrer; property HyperlinkAuditing : boolean read FHyperlinkAuditing write SetHyperlinkAuditing; @@ -590,12 +605,12 @@ type property ProxyType : integer read FProxyType write SetProxyType; property ProxyScheme : TCefProxyScheme read FProxyScheme write SetProxyScheme; - property ProxyServer : string read FProxyServer write SetProxyServer; + property ProxyServer : ustring read FProxyServer write SetProxyServer; property ProxyPort : integer read FProxyPort write SetProxyPort; - property ProxyUsername : string read FProxyUsername write SetProxyUsername; - property ProxyPassword : string read FProxyPassword write SetProxyPassword; - property ProxyScriptURL : string read FProxyScriptURL write SetProxyScriptURL; - property ProxyByPassList : string read FProxyByPassList write SetProxyByPassList; + property ProxyUsername : ustring read FProxyUsername write SetProxyUsername; + property ProxyPassword : ustring read FProxyPassword write SetProxyPassword; + property ProxyScriptURL : ustring read FProxyScriptURL write SetProxyScriptURL; + property ProxyByPassList : ustring read FProxyByPassList write SetProxyByPassList; published property OnTextResultAvailable : TOnTextResultAvailableEvent read FOnTextResultAvailable write FOnTextResultAvailable; @@ -603,9 +618,11 @@ type property OnPrefsAvailable : TOnPrefsAvailableEvent read FOnPrefsAvailable write FOnPrefsAvailable; property OnCookiesDeleted : TOnCookiesDeletedEvent read FOnCookiesDeleted write FOnCookiesDeleted; property OnResolvedHostAvailable : TOnResolvedIPsAvailableEvent read FOnResolvedHostAvailable write FOnResolvedHostAvailable; + {$IFNDEF FPC} property OnBrowserCompMsg : TOnCompMsgEvent read FOnBrowserCompMsg write FOnBrowserCompMsg; property OnWidgetCompMsg : TOnCompMsgEvent read FOnWidgetCompMsg write FOnWidgetCompMsg; property OnRenderCompMsg : TOnCompMsgEvent read FOnRenderCompMsg write FOnRenderCompMsg; + {$ENDIF} // ICefClient property OnProcessMessageReceived : TOnProcessMessageReceived read FOnProcessMessageReceived write FOnProcessMessageReceived; @@ -706,6 +723,10 @@ type end; +{$IFDEF FPC} +procedure Register; +{$ENDIF} + implementation uses @@ -715,7 +736,7 @@ uses SysUtils, Math, {$ENDIF} uCEFBrowser, uCEFValue, uCEFDictionaryValue, uCEFStringMultimap, uCEFFrame, - uCEFApplication, uCEFProcessMessage, uCEFRequestContext, uOLEDragAndDrop, + uCEFApplication, uCEFProcessMessage, uCEFRequestContext, {$IFNDEF FPC}uOLEDragAndDrop,{$ENDIF} uCEFPDFPrintCallback, uCEFResolveCallback, uCEFDeleteCookiesCallback, uCEFStringVisitor; constructor TChromium.Create(AOwner: TComponent); @@ -746,19 +767,22 @@ begin FCookiePrefs := CEF_CONTENT_SETTING_ALLOW; FImagesPrefs := CEF_CONTENT_SETTING_ALLOW; FZoomStep := ZOOM_STEP_DEF; - FWindowName := ''; + {$IFNDEF FPC} FOldBrowserCompWndPrc := nil; FOldWidgetCompWndPrc := nil; FOldRenderCompWndPrc := nil; - FBrowserCompHWND := 0; - FWidgetCompHWND := 0; - FRenderCompHWND := 0; FBrowserCompStub := nil; FWidgetCompStub := nil; FRenderCompStub := nil; + {$ENDIF} + FBrowserCompHWND := 0; + FWidgetCompHWND := 0; + FRenderCompHWND := 0; FDragOperations := DRAG_OPERATION_NONE; + {$IFNDEF FPC} FDragDropManager := nil; + {$ENDIF} FDropTargetCtrl := nil; FDragAndDropInitialized := False; @@ -790,7 +814,9 @@ destructor TChromium.Destroy; begin try try + {$IFNDEF FPC} if (FDragDropManager <> nil) then FreeAndNil(FDragDropManager); + {$ENDIF} if (FCompHandle <> 0) then begin @@ -814,6 +840,7 @@ end; procedure TChromium.BeforeDestruction; begin + {$IFNDEF FPC} if (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc <> nil) then begin SetWindowLongPtr(FBrowserCompHWND, GWL_WNDPROC, NativeInt(FOldBrowserCompWndPrc)); @@ -834,6 +861,7 @@ begin FreeAndNilStub(FRenderCompStub); FOldRenderCompWndPrc := nil; end; + {$ENDIF} DestroyClientHandler; @@ -875,13 +903,22 @@ begin end; procedure TChromium.AfterConstruction; +{$IFDEF FPC} +var + TempWndMethod : TWndMethod; +{$ENDIF} begin inherited AfterConstruction; try if not(csDesigning in ComponentState) then begin + {$IFDEF FPC} + TempWndMethod := @WndProc; + FCompHandle := AllocateHWnd(TempWndMethod); + {$ELSE} FCompHandle := AllocateHWnd(WndProc); + {$ENDIF} FOptions := TChromiumOptions.Create; FFontOptions := TChromiumFontOptions.Create; FPDFPrintOptions := TPDFPrintOptions.Create; @@ -903,16 +940,16 @@ begin FHandler := TCustomClientHandler.Create(Self, MustCreateLoadHandler, MustCreateFocusHandler, - MustCreateContextMenuHandler, - MustCreateDialogHandler, - MustCreateKeyboardHandler, - MustCreateDisplayHandler, - MustCreateDownloadHandler, - MustCreateJsDialogHandler, - True, - FIsOSR, // Create the Render Handler in OSR mode only - True, - MustCreateDragHandler, + MustCreateContextMenuHandler, + MustCreateDialogHandler, + MustCreateKeyboardHandler, + MustCreateDisplayHandler, + MustCreateDownloadHandler, + MustCreateJsDialogHandler, + True, + FIsOSR, // Create the Render Handler in OSR mode only + True, + MustCreateDragHandler, MustCreateFindHandler); Result := True; @@ -1039,15 +1076,17 @@ begin FOnPrefsAvailable := nil; FOnCookiesDeleted := nil; FOnResolvedHostAvailable := nil; + {$IFNDEF FPC} FOnBrowserCompMsg := nil; FOnWidgetCompMsg := nil; FOnRenderCompMsg := nil; + {$ENDIF} end; function TChromium.CreateBrowser(const aBrowserParent : TWinControl; - const aWindowName : string; + const aWindowName : ustring; const aContext : ICefRequestContext; - const aCookiesPath : string; + const aCookiesPath : ustring; aPersistSessionCookies : boolean) : boolean; var TempHandle : HWND; @@ -1069,9 +1108,9 @@ end; function TChromium.CreateBrowser( aParentHandle : HWND; aParentRect : TRect; - const aWindowName : string; + const aWindowName : ustring; const aContext : ICefRequestContext; - const aCookiesPath : string; + const aCookiesPath : ustring; aPersistSessionCookies : boolean) : boolean; var TempCookieManager : ICefCookieManager; @@ -1127,6 +1166,7 @@ procedure TChromium.InitializeDragAndDrop(const aDropTargetCtrl : TWinControl); var TempDropTarget : IDropTarget; begin + {$IFNDEF FPC} if FIsOSR and not(FDragAndDropInitialized) and (FDragDropManager = nil) and @@ -1146,6 +1186,7 @@ begin FDragAndDropInitialized := True; end; + {$ENDIF} end; function TChromium.ShareRequestContext(var aContext : ICefRequestContext; @@ -1394,7 +1435,7 @@ begin end; end; -procedure TChromium.GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : string); +procedure TChromium.GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : ustring); begin if (FPDFPrintOptions <> nil) then begin @@ -1630,7 +1671,7 @@ begin Result := 0; end; -function TChromium.GetRequestContextCache : string; +function TChromium.GetRequestContextCache : ustring; begin if Initialized then Result := FBrowser.host.RequestContext.CachePath @@ -1671,7 +1712,7 @@ begin Result := FInitialized and not(FClosing) and (FBrowser <> nil); end; -function TChromium.GetDocumentURL : string; +function TChromium.GetDocumentURL : ustring; var TempFrame : ICefFrame; begin @@ -1877,7 +1918,7 @@ begin end; end; -procedure TChromium.SetProxyServer(const aValue : string); +procedure TChromium.SetProxyServer(const aValue : ustring); begin if (FProxyServer <> aValue) then begin @@ -1895,7 +1936,7 @@ begin end; end; -procedure TChromium.SetProxyUsername(const aValue : string); +procedure TChromium.SetProxyUsername(const aValue : ustring); begin if (FProxyUsername <> aValue) then begin @@ -1904,7 +1945,7 @@ begin end; end; -procedure TChromium.SetProxyPassword(const aValue : string); +procedure TChromium.SetProxyPassword(const aValue : ustring); begin if (FProxyPassword <> aValue) then begin @@ -1913,7 +1954,7 @@ begin end; end; -procedure TChromium.SetProxyScriptURL(const aValue : string); +procedure TChromium.SetProxyScriptURL(const aValue : ustring); begin if (FProxyScriptURL <> aValue) then begin @@ -1922,7 +1963,7 @@ begin end; end; -procedure TChromium.SetProxyByPassList(const aValue : string); +procedure TChromium.SetProxyByPassList(const aValue : ustring); begin if (FProxyByPassList <> aValue) then begin @@ -1931,7 +1972,7 @@ begin end; end; -procedure TChromium.SetCustomHeaderName(const aValue : string); +procedure TChromium.SetCustomHeaderName(const aValue : ustring); begin if (FCustomHeaderName <> aValue) then begin @@ -1940,7 +1981,7 @@ begin end; end; -procedure TChromium.SetCustomHeaderValue(const aValue : string); +procedure TChromium.SetCustomHeaderValue(const aValue : ustring); begin if (FCustomHeaderValue <> aValue) then begin @@ -2203,9 +2244,9 @@ begin hpDefaultPublicAndPrivateInterfaces : UpdatePreference(aBrowser, 'webrtc.ip_handling_policy', 'default_public_and_private_interfaces'); - hpDefaultPublicInterfaceOnly : - UpdatePreference(aBrowser, 'webrtc.ip_handling_policy', 'default_public_interface_only'); - + hpDefaultPublicInterfaceOnly : + UpdatePreference(aBrowser, 'webrtc.ip_handling_policy', 'default_public_interface_only'); + hpDisableNonProxiedUDP : UpdatePreference(aBrowser, 'webrtc.ip_handling_policy', 'disable_non_proxied_udp'); end; @@ -2293,7 +2334,7 @@ begin end; end; -function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : boolean) : boolean; +function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : boolean) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2323,7 +2364,7 @@ begin end; end; -function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : integer) : boolean; +function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : integer) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2348,7 +2389,7 @@ begin end; end; -function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : string; const aValue : double) : boolean; +function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; const aValue : double) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2373,7 +2414,7 @@ begin end; end; -function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : string) : boolean; +function TChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2666,33 +2707,33 @@ begin assigned(FOnLoadingStateChange); end; -function TChromium.MustCreateFocusHandler : boolean; +function TChromium.MustCreateFocusHandler : boolean; begin Result := assigned(FOnTakeFocus) or assigned(FOnSetFocus) or assigned(FOnGotFocus); end; - -function TChromium.MustCreateContextMenuHandler : boolean; + +function TChromium.MustCreateContextMenuHandler : boolean; begin Result := assigned(FOnBeforeContextMenu) or assigned(FOnRunContextMenu) or assigned(FOnContextMenuCommand) or assigned(FOnContextMenuDismissed); end; - -function TChromium.MustCreateDialogHandler : boolean; + +function TChromium.MustCreateDialogHandler : boolean; begin Result := assigned(FOnFileDialog); end; - -function TChromium.MustCreateKeyboardHandler : boolean; + +function TChromium.MustCreateKeyboardHandler : boolean; begin Result := assigned(FOnPreKeyEvent) or assigned(FOnKeyEvent); end; - -function TChromium.MustCreateDisplayHandler : boolean; + +function TChromium.MustCreateDisplayHandler : boolean; begin Result := assigned(FOnAddressChange) or assigned(FOnTitleChange) or @@ -2704,31 +2745,31 @@ begin assigned(FOnAutoResize) or assigned(FOnLoadingProgressChange); end; - -function TChromium.MustCreateDownloadHandler : boolean; + +function TChromium.MustCreateDownloadHandler : boolean; begin Result := assigned(FOnBeforeDownload) or assigned(FOnDownloadUpdated); end; - -function TChromium.MustCreateJsDialogHandler : boolean; -begin + +function TChromium.MustCreateJsDialogHandler : boolean; +begin Result := assigned(FOnJsdialog) or - assigned(FOnBeforeUnloadDialog) or - assigned(FOnResetDialogState) or - assigned(FOnDialogClosed); + assigned(FOnBeforeUnloadDialog) or + assigned(FOnResetDialogState) or + assigned(FOnDialogClosed); end; - -function TChromium.MustCreateDragHandler : boolean; -begin + +function TChromium.MustCreateDragHandler : boolean; +begin Result := assigned(FOnDragEnter) or - assigned(FOnDraggableRegionsChanged); -end; - + assigned(FOnDraggableRegionsChanged); +end; + function TChromium.MustCreateFindHandler : boolean; -begin +begin Result := assigned(FOnFindResult); -end; +end; procedure TChromium.PrefsAvailableMsg(var aMessage : TMessage); begin @@ -2740,7 +2781,7 @@ begin Result := (FCompHandle <> 0) and PostMessage(FCompHandle, aMsg, wParam, lParam); end; -procedure TChromium.doTextResultAvailable(const aText : string); +procedure TChromium.doTextResultAvailable(const aText : ustring); begin if assigned(FOnTextResultAvailable) then FOnTextResultAvailable(self, aText); end; @@ -2861,6 +2902,7 @@ begin end; end; +{$IFNDEF FPC} procedure TChromium.BrowserCompWndProc(var aMessage: TMessage); var TempHandled : boolean; @@ -2932,6 +2974,7 @@ begin if CustomExceptionHandler('TChromium.RenderCompWndProc', e) then raise; end; end; +{$ENDIF} function TChromium.doOnClose(const browser: ICefBrowser): Boolean; begin @@ -3448,6 +3491,7 @@ begin if (FWidgetCompHWND <> 0) then FRenderCompHWND := FindWindowEx(FWidgetCompHWND, 0, 'Chrome_RenderWidgetHostHWND', 'Chrome Legacy Window'); + {$IFNDEF FPC} if assigned(FOnBrowserCompMsg) and (FBrowserCompHWND <> 0) and (FOldBrowserCompWndPrc = nil) then begin CreateStub(BrowserCompWndProc, FBrowserCompStub); @@ -3471,6 +3515,7 @@ begin GWL_WNDPROC, NativeInt(FRenderCompStub))); end; + {$ENDIF} end; if Assigned(FOnRenderViewReady) then FOnRenderViewReady(Self, browser); @@ -3557,7 +3602,7 @@ function TChromium.doOnStartDragging(const browser : ICefBrowser; y : Integer): Boolean; begin Result := False; - + {$IFNDEF FPC} if FDragAndDropInitialized and FDragDropManager.CloneDragData(dragData, allowedOps) then begin @@ -3566,6 +3611,7 @@ begin end; if Assigned(FOnStartDragging) then FOnStartDragging(Self, browser, dragData, allowedOps, x, y, Result); + {$ENDIF} end; procedure TChromium.DelayedDragging; @@ -3573,6 +3619,7 @@ var TempOperation : TCefDragOperation; TempPoint : TPoint; begin + {$IFNDEF FPC} if FDragAndDropInitialized and (FDropTargetCtrl <> nil) and (GlobalCEFApp <> nil) then begin FDragOperations := DRAG_OPERATION_NONE; @@ -3586,6 +3633,7 @@ begin DragSourceEndedAt(TempPoint.x, TempPoint.y, TempOperation); DragSourceSystemDragEnded; end; + {$ENDIF} end; procedure TChromium.doOnStatusMessage(const browser: ICefBrowser; const value: ustring); @@ -3832,4 +3880,12 @@ begin if Initialized then FBrowser.Host.DragSourceSystemDragEnded; end; +{$IFDEF FPC} +procedure Register; +begin + {$I tchromium.lrs} + RegisterComponents('Chromium', [TChromium]); +end; +{$ENDIF} + end. diff --git a/source/uCEFChromiumEvents.pas b/source/uCEFChromiumEvents.pas index 8497d81d..9fe9caec 100644 --- a/source/uCEFChromiumEvents.pas +++ b/source/uCEFChromiumEvents.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFChromiumEvents; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -153,7 +157,7 @@ type TOnFindResult = procedure(Sender: TObject; const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean) of Object; // Custom - TOnTextResultAvailableEvent = procedure(Sender: TObject; const aText : string) of object; + TOnTextResultAvailableEvent = procedure(Sender: TObject; const aText : ustring) of object; TOnPdfPrintFinishedEvent = procedure(Sender: TObject; aResultOK : boolean) of object; TOnPrefsAvailableEvent = procedure(Sender: TObject; aResultOK : boolean) of object; TOnCookiesDeletedEvent = procedure(Sender: TObject; numDeleted : integer) of object; diff --git a/source/uCEFChromiumFontOptions.pas b/source/uCEFChromiumFontOptions.pas index e4ca769f..867d4c25 100644 --- a/source/uCEFChromiumFontOptions.pas +++ b/source/uCEFChromiumFontOptions.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFChromiumFontOptions; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFChromiumOptions.pas b/source/uCEFChromiumOptions.pas index 201a50b0..0c1b11f5 100644 --- a/source/uCEFChromiumOptions.pas +++ b/source/uCEFChromiumOptions.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFChromiumOptions; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFChromiumWindow.pas b/source/uCEFChromiumWindow.pas index 8357d66b..ccfb8211 100644 --- a/source/uCEFChromiumWindow.pas +++ b/source/uCEFChromiumWindow.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFChromiumWindow; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -48,11 +52,16 @@ interface uses {$IFDEF DELPHI16_UP} - {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages,{$ENDIF} System.Classes, + {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages,{$ENDIF} System.Classes, {$ELSE} - Windows, Messages, Classes, + Windows, Classes, Forms, Controls, Graphics, + {$IFDEF FPC} + LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase, + {$ELSE} + Messages, + {$ENDIF} {$ENDIF} - uCEFWindowParent, uCEFChromium, uCEFInterfaces, uCEFConstants; + uCEFWindowParent, uCEFChromium, uCEFInterfaces, uCEFConstants, uCEFTypes; type TChromiumWindow = class(TCEFWindowParent) @@ -78,7 +87,7 @@ type procedure AfterConstruction; override; function CreateBrowser : boolean; procedure CloseBrowser(aForceClose : boolean); - procedure LoadURL(const aURL : string); + procedure LoadURL(const aURL : ustring); procedure NotifyMoveOrResizeStarted; property ChromiumBrowser : TChromium read FChromium; @@ -90,6 +99,10 @@ type property OnAfterCreated : TNotifyEvent read FOnAfterCreated write FOnAfterCreated; end; +{$IFDEF FPC} +procedure Register; +{$ENDIF} + implementation uses @@ -116,9 +129,9 @@ begin if not(csDesigning in ComponentState) then begin FChromium := TChromium.Create(self); - FChromium.OnClose := WebBrowser_OnClose; - FChromium.OnBeforeClose := WebBrowser_OnBeforeClose; - FChromium.OnAfterCreated := WebBrowser_OnAfterCreated; + FChromium.OnClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnClose; + FChromium.OnBeforeClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnBeforeClose; + FChromium.OnAfterCreated := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnAfterCreated; end; end; @@ -184,7 +197,7 @@ begin if (FChromium <> nil) then FChromium.CloseBrowser(aForceClose); end; -procedure TChromiumWindow.LoadURL(const aURL : string); +procedure TChromiumWindow.LoadURL(const aURL : ustring); begin if not(csDesigning in ComponentState) and (FChromium <> nil) then FChromium.LoadURL(aURL); @@ -195,4 +208,12 @@ begin if (FChromium <> nil) then FChromium.NotifyMoveOrResizeStarted; end; +{$IFDEF FPC} +procedure Register; +begin + {$I tchromiumwindow.lrs} + RegisterComponents('Chromium', [TChromiumWindow]); +end; +{$ENDIF} + end. diff --git a/source/uCEFClient.pas b/source/uCEFClient.pas index bdb9a233..ee61243c 100644 --- a/source/uCEFClient.pas +++ b/source/uCEFClient.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFClient; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -491,20 +495,20 @@ begin with PCefClient(FData)^ do begin - get_context_menu_handler := cef_client_own_get_context_menu_handler; - get_dialog_handler := cef_client_own_get_dialog_handler; - get_display_handler := cef_client_own_get_display_handler; - get_download_handler := cef_client_own_get_download_handler; - get_drag_handler := cef_client_own_get_drag_handler; - get_find_handler := cef_client_own_get_find_handler; - get_focus_handler := cef_client_own_get_focus_handler; - get_jsdialog_handler := cef_client_own_get_jsdialog_handler; - get_keyboard_handler := cef_client_own_get_keyboard_handler; - get_life_span_handler := cef_client_own_get_life_span_handler; - get_load_handler := cef_client_own_get_load_handler; - get_render_handler := cef_client_own_get_get_render_handler; - get_request_handler := cef_client_own_get_request_handler; - on_process_message_received := cef_client_own_on_process_message_received; + get_context_menu_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_context_menu_handler; + get_dialog_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_dialog_handler; + get_display_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_display_handler; + get_download_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_download_handler; + get_drag_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_drag_handler; + get_find_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_find_handler; + get_focus_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_focus_handler; + get_jsdialog_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_jsdialog_handler; + get_keyboard_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_keyboard_handler; + get_life_span_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_life_span_handler; + get_load_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_load_handler; + get_render_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_get_render_handler; + get_request_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_request_handler; + on_process_message_received := {$IFDEF FPC}@{$ENDIF}cef_client_own_on_process_message_received; end; end; diff --git a/source/uCEFCommandLine.pas b/source/uCEFCommandLine.pas index fed79c46..d4ad2275 100644 --- a/source/uCEFCommandLine.pas +++ b/source/uCEFCommandLine.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFCommandLine; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -94,7 +98,7 @@ var TempArgument : TCefString; begin TempArgument := CefString(argument); - PCefCommandLine(FData).append_argument(PCefCommandLine(FData), @TempArgument); + PCefCommandLine(FData)^.append_argument(PCefCommandLine(FData), @TempArgument); end; procedure TCefCommandLineRef.AppendSwitch(const name: ustring); @@ -102,7 +106,7 @@ var TempName : TCefString; begin TempName := CefString(name); - PCefCommandLine(FData).append_switch(PCefCommandLine(FData), @TempName); + PCefCommandLine(FData)^.append_switch(PCefCommandLine(FData), @TempName); end; procedure TCefCommandLineRef.AppendSwitchWithValue(const name, value: ustring); @@ -111,12 +115,12 @@ var begin TempName := CefString(name); TempValue := CefString(value); - PCefCommandLine(FData).append_switch_with_value(PCefCommandLine(FData), @TempName, @TempValue); + PCefCommandLine(FData)^.append_switch_with_value(PCefCommandLine(FData), @TempName, @TempValue); end; function TCefCommandLineRef.Copy: ICefCommandLine; begin - Result := UnWrap(PCefCommandLine(FData).copy(PCefCommandLine(FData))); + Result := UnWrap(PCefCommandLine(FData)^.copy(PCefCommandLine(FData))); end; procedure TCefCommandLineRef.GetArguments(var arguments : TStrings); @@ -126,7 +130,7 @@ begin if (arguments <> nil) then begin TempSL := TCefStringListOwn.Create; - PCefCommandLine(FData).get_arguments(PCefCommandLine(FData), TempSL.Handle); + PCefCommandLine(FData)^.get_arguments(PCefCommandLine(FData), TempSL.Handle); TempSL.CopyToStrings(arguments); end; end; @@ -138,26 +142,26 @@ begin if (args <> nil) then begin TempSL := TCefStringListOwn.Create; - PCefCommandLine(FData).get_argv(PCefCommandLine(FData), TempSL.Handle); + PCefCommandLine(FData)^.get_argv(PCefCommandLine(FData), TempSL.Handle); TempSL.CopyToStrings(args); end; end; function TCefCommandLineRef.GetCommandLineString: ustring; begin - Result := CefStringFreeAndGet(PCefCommandLine(FData).get_command_line_string(PCefCommandLine(FData))); + Result := CefStringFreeAndGet(PCefCommandLine(FData)^.get_command_line_string(PCefCommandLine(FData))); end; function TCefCommandLineRef.GetProgram: ustring; begin - Result := CefStringFreeAndGet(PCefCommandLine(FData).get_program(PCefCommandLine(FData))); + Result := CefStringFreeAndGet(PCefCommandLine(FData)^.get_program(PCefCommandLine(FData))); end; procedure TCefCommandLineRef.GetSwitches(var switches: TStrings); var TempStrMap : ICefStringMap; i, j : NativeUInt; - TempKey, TempValue : string; + TempKey, TempValue : ustring; begin TempStrMap := nil; @@ -166,7 +170,7 @@ begin if (switches <> nil) then begin TempStrMap := TCefStringMapOwn.Create; - PCefCommandLine(FData).get_switches(PCefCommandLine(FData), TempStrMap.Handle); + PCefCommandLine(FData)^.get_switches(PCefCommandLine(FData), TempStrMap.Handle); i := 0; j := TempStrMap.Size; @@ -202,17 +206,17 @@ var TempName : TCefString; begin TempName := CefString(name); - Result := CefStringFreeAndGet(PCefCommandLine(FData).get_switch_value(PCefCommandLine(FData), @TempName)); + Result := CefStringFreeAndGet(PCefCommandLine(FData)^.get_switch_value(PCefCommandLine(FData), @TempName)); end; class function TCefCommandLineRef.Global: ICefCommandLine; begin - Result := UnWrap(cef_command_line_get_global); + Result := UnWrap(cef_command_line_get_global()); end; function TCefCommandLineRef.HasArguments: Boolean; begin - Result := PCefCommandLine(FData).has_arguments(PCefCommandLine(FData)) <> 0; + Result := PCefCommandLine(FData)^.has_arguments(PCefCommandLine(FData)) <> 0; end; function TCefCommandLineRef.HasSwitch(const name: ustring): Boolean; @@ -220,17 +224,17 @@ var TempName : TCefString; begin TempName := CefString(name); - Result := PCefCommandLine(FData).has_switch(PCefCommandLine(FData), @TempName) <> 0; + Result := PCefCommandLine(FData)^.has_switch(PCefCommandLine(FData), @TempName) <> 0; end; function TCefCommandLineRef.HasSwitches: Boolean; begin - Result := PCefCommandLine(FData).has_switches(PCefCommandLine(FData)) <> 0; + Result := PCefCommandLine(FData)^.has_switches(PCefCommandLine(FData)) <> 0; end; procedure TCefCommandLineRef.InitFromArgv(argc: Integer; const argv: PPAnsiChar); begin - PCefCommandLine(FData).init_from_argv(PCefCommandLine(FData), argc, argv); + PCefCommandLine(FData)^.init_from_argv(PCefCommandLine(FData), argc, argv); end; procedure TCefCommandLineRef.InitFromString(const commandLine: ustring); @@ -238,22 +242,22 @@ var TempCommandLine : TCefString; begin TempCommandLine := CefString(commandLine); - PCefCommandLine(FData).init_from_string(PCefCommandLine(FData), @TempCommandLine); + PCefCommandLine(FData)^.init_from_string(PCefCommandLine(FData), @TempCommandLine); end; function TCefCommandLineRef.IsReadOnly: Boolean; begin - Result := PCefCommandLine(FData).is_read_only(PCefCommandLine(FData)) <> 0; + Result := PCefCommandLine(FData)^.is_read_only(PCefCommandLine(FData)) <> 0; end; function TCefCommandLineRef.IsValid: Boolean; begin - Result := PCefCommandLine(FData).is_valid(PCefCommandLine(FData)) <> 0; + Result := PCefCommandLine(FData)^.is_valid(PCefCommandLine(FData)) <> 0; end; class function TCefCommandLineRef.New: ICefCommandLine; begin - Result := UnWrap(cef_command_line_create); + Result := UnWrap(cef_command_line_create()); end; procedure TCefCommandLineRef.PrependWrapper(const wrapper: ustring); @@ -261,12 +265,12 @@ var TempWrapper : TCefString; begin TempWrapper := CefString(wrapper); - PCefCommandLine(FData).prepend_wrapper(PCefCommandLine(FData), @TempWrapper); + PCefCommandLine(FData)^.prepend_wrapper(PCefCommandLine(FData), @TempWrapper); end; procedure TCefCommandLineRef.Reset; begin - PCefCommandLine(FData).reset(PCefCommandLine(FData)); + PCefCommandLine(FData)^.reset(PCefCommandLine(FData)); end; procedure TCefCommandLineRef.SetProgram(const prog: ustring); @@ -274,7 +278,7 @@ var TempProgram : TCefString; begin TempProgram := CefString(prog); - PCefCommandLine(FData).set_program(PCefCommandLine(FData), @TempProgram); + PCefCommandLine(FData)^.set_program(PCefCommandLine(FData), @TempProgram); end; class function TCefCommandLineRef.UnWrap(data: Pointer): ICefCommandLine; diff --git a/source/uCEFCompletionCallback.pas b/source/uCEFCompletionCallback.pas index 9cd21c23..1f70ad8f 100644 --- a/source/uCEFCompletionCallback.pas +++ b/source/uCEFCompletionCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFCompletionCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -89,7 +93,7 @@ constructor TCefCompletionCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefCompletionCallback)); - PCefCompletionCallback(FData).on_complete := cef_completion_callback_on_complete; + PCefCompletionCallback(FData)^.on_complete := {$IFDEF FPC}@{$ENDIF}cef_completion_callback_on_complete; end; procedure TCefCompletionCallbackOwn.OnComplete; diff --git a/source/uCEFConstants.pas b/source/uCEFConstants.pas index d2b13cd0..d05759e6 100644 --- a/source/uCEFConstants.pas +++ b/source/uCEFConstants.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFConstants; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFContextMenuHandler.pas b/source/uCEFContextMenuHandler.pas index 9c319530..63319ec6 100644 --- a/source/uCEFContextMenuHandler.pas +++ b/source/uCEFContextMenuHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFContextMenuHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -166,10 +170,10 @@ begin with PCefContextMenuHandler(FData)^ do begin - on_before_context_menu := cef_context_menu_handler_on_before_context_menu; - run_context_menu := cef_context_menu_handler_run_context_menu; - on_context_menu_command := cef_context_menu_handler_on_context_menu_command; - on_context_menu_dismissed := cef_context_menu_handler_on_context_menu_dismissed; + on_before_context_menu := {$IFDEF FPC}@{$ENDIF}cef_context_menu_handler_on_before_context_menu; + run_context_menu := {$IFDEF FPC}@{$ENDIF}cef_context_menu_handler_run_context_menu; + on_context_menu_command := {$IFDEF FPC}@{$ENDIF}cef_context_menu_handler_on_context_menu_command; + on_context_menu_dismissed := {$IFDEF FPC}@{$ENDIF}cef_context_menu_handler_on_context_menu_dismissed; end; end; diff --git a/source/uCEFContextMenuParams.pas b/source/uCEFContextMenuParams.pas index c6b51884..091269e2 100644 --- a/source/uCEFContextMenuParams.pas +++ b/source/uCEFContextMenuParams.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFContextMenuParams; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -98,7 +102,7 @@ begin begin TempSL := TCefStringListOwn.Create; - if (PCefContextMenuParams(FData).get_dictionary_suggestions(PCefContextMenuParams(FData), TempSL.Handle) <> 0) then + if (PCefContextMenuParams(FData)^.get_dictionary_suggestions(PCefContextMenuParams(FData), TempSL.Handle) <> 0) then begin TempSL.CopyToStrings(suggestions); Result := True; @@ -108,102 +112,102 @@ end; function TCefContextMenuParamsRef.GetEditStateFlags: TCefContextMenuEditStateFlags; begin - Result := PCefContextMenuParams(FData).get_edit_state_flags(PCefContextMenuParams(FData)); + Result := PCefContextMenuParams(FData)^.get_edit_state_flags(PCefContextMenuParams(FData)); end; function TCefContextMenuParamsRef.GetFrameCharset: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_frame_charset(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_frame_charset(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetFrameUrl: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_frame_url(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_frame_url(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetLinkUrl: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_link_url(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_link_url(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetMediaStateFlags: TCefContextMenuMediaStateFlags; begin - Result := PCefContextMenuParams(FData).get_media_state_flags(PCefContextMenuParams(FData)); + Result := PCefContextMenuParams(FData)^.get_media_state_flags(PCefContextMenuParams(FData)); end; function TCefContextMenuParamsRef.GetMediaType: TCefContextMenuMediaType; begin - Result := PCefContextMenuParams(FData).get_media_type(PCefContextMenuParams(FData)); + Result := PCefContextMenuParams(FData)^.get_media_type(PCefContextMenuParams(FData)); end; function TCefContextMenuParamsRef.GetMisspelledWord: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_misspelled_word(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_misspelled_word(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetTitleText: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_title_text(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_title_text(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetPageUrl: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_page_url(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_page_url(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetSelectionText: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_selection_text(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_selection_text(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetSourceUrl: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_source_url(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_source_url(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetTypeFlags: TCefContextMenuTypeFlags; begin - Result := PCefContextMenuParams(FData).get_type_flags(PCefContextMenuParams(FData)); + Result := PCefContextMenuParams(FData)^.get_type_flags(PCefContextMenuParams(FData)); end; function TCefContextMenuParamsRef.GetUnfilteredLinkUrl: ustring; begin - Result := CefStringFreeAndGet(PCefContextMenuParams(FData).get_unfiltered_link_url(PCefContextMenuParams(FData))); + Result := CefStringFreeAndGet(PCefContextMenuParams(FData)^.get_unfiltered_link_url(PCefContextMenuParams(FData))); end; function TCefContextMenuParamsRef.GetXCoord: Integer; begin - Result := PCefContextMenuParams(FData).get_xcoord(PCefContextMenuParams(FData)); + Result := PCefContextMenuParams(FData)^.get_xcoord(PCefContextMenuParams(FData)); end; function TCefContextMenuParamsRef.GetYCoord: Integer; begin - Result := PCefContextMenuParams(FData).get_ycoord(PCefContextMenuParams(FData)); + Result := PCefContextMenuParams(FData)^.get_ycoord(PCefContextMenuParams(FData)); end; function TCefContextMenuParamsRef.IsCustomMenu: Boolean; begin - Result := PCefContextMenuParams(FData).is_custom_menu(PCefContextMenuParams(FData)) <> 0; + Result := PCefContextMenuParams(FData)^.is_custom_menu(PCefContextMenuParams(FData)) <> 0; end; function TCefContextMenuParamsRef.IsEditable: Boolean; begin - Result := PCefContextMenuParams(FData).is_editable(PCefContextMenuParams(FData)) <> 0; + Result := PCefContextMenuParams(FData)^.is_editable(PCefContextMenuParams(FData)) <> 0; end; function TCefContextMenuParamsRef.IsPepperMenu: Boolean; begin - Result := PCefContextMenuParams(FData).is_pepper_menu(PCefContextMenuParams(FData)) <> 0; + Result := PCefContextMenuParams(FData)^.is_pepper_menu(PCefContextMenuParams(FData)) <> 0; end; function TCefContextMenuParamsRef.IsSpellCheckEnabled: Boolean; begin - Result := PCefContextMenuParams(FData).is_spell_check_enabled(PCefContextMenuParams(FData)) <> 0; + Result := PCefContextMenuParams(FData)^.is_spell_check_enabled(PCefContextMenuParams(FData)) <> 0; end; function TCefContextMenuParamsRef.HasImageContents: Boolean; begin - Result := PCefContextMenuParams(FData).has_image_contents(PCefContextMenuParams(FData)) <> 0; + Result := PCefContextMenuParams(FData)^.has_image_contents(PCefContextMenuParams(FData)) <> 0; end; class function TCefContextMenuParamsRef.UnWrap(data: Pointer): ICefContextMenuParams; diff --git a/source/uCEFCookieManager.pas b/source/uCEFCookieManager.pas index 045ee699..26f253eb 100644 --- a/source/uCEFCookieManager.pas +++ b/source/uCEFCookieManager.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFCookieManager; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -108,11 +112,11 @@ function TCefCookieManagerRef.DeleteCookies(const url : ustring; const cookieName : ustring; const callback : ICefDeleteCookiesCallback): Boolean; var - u, n: TCefString; + TempURL, TempName : TCefString; begin - u := CefString(url); - n := CefString(cookieName); - Result := PCefCookieManager(FData).delete_cookies(PCefCookieManager(FData), @u, @n, CefGetData(callback)) <> 0; + TempURL := CefString(url); + TempName := CefString(cookieName); + Result := PCefCookieManager(FData)^.delete_cookies(PCefCookieManager(FData), @TempURL, @TempName, CefGetData(callback)) <> 0; end; function TCefCookieManagerRef.DeleteCookiesProc(const url : ustring; @@ -124,7 +128,7 @@ end; function TCefCookieManagerRef.FlushStore(const handler: ICefCompletionCallback): Boolean; begin - Result := PCefCookieManager(FData).flush_store(PCefCookieManager(FData), CefGetData(handler)) <> 0; + Result := PCefCookieManager(FData)^.flush_store(PCefCookieManager(FData), CefGetData(handler)) <> 0; end; function TCefCookieManagerRef.FlushStoreProc(const proc: TCefCompletionCallbackProc): Boolean; @@ -139,7 +143,7 @@ end; class function TCefCookieManagerRef.Blocking : ICefCookieManager; begin - Result := UnWrap(cef_cookie_manager_get_blocking_manager); + Result := UnWrap(cef_cookie_manager_get_blocking_manager()); end; class function TCefCookieManagerRef.GlobalProc(const callback: TCefCompletionCallbackProc): ICefCookieManager; @@ -171,7 +175,7 @@ begin else FillChar(cook.expires, SizeOf(TCefTime), 0); - Result := PCefCookieManager(FData).set_cookie(PCefCookieManager(FData), @str, @cook, CefGetData(callback)) <> 0; + Result := PCefCookieManager(FData)^.set_cookie(PCefCookieManager(FData), @str, @cook, CefGetData(callback)) <> 0; end; function TCefCookieManagerRef.SetCookieProc(const url, name, value, domain, path: ustring; @@ -210,9 +214,9 @@ begin TempSL := TCefStringListOwn.Create; TempSL.AddStrings(schemes); - PCefCookieManager(FData).set_supported_schemes(PCefCookieManager(FData), - TempSL.Handle, - CefGetData(callback)); + PCefCookieManager(FData)^.set_supported_schemes(PCefCookieManager(FData), + TempSL.Handle, + CefGetData(callback)); finally TempSL := nil; end; @@ -233,7 +237,7 @@ end; function TCefCookieManagerRef.VisitAllCookies(const visitor: ICefCookieVisitor): Boolean; begin - Result := PCefCookieManager(FData).visit_all_cookies(PCefCookieManager(FData), CefGetData(visitor)) <> 0; + Result := PCefCookieManager(FData)^.visit_all_cookies(PCefCookieManager(FData), CefGetData(visitor)) <> 0; end; function TCefCookieManagerRef.VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; @@ -245,10 +249,10 @@ function TCefCookieManagerRef.VisitUrlCookies(const url : ustring; includeHttpOnly : Boolean; const visitor : ICefCookieVisitor): Boolean; var - str : TCefString; + TempURL : TCefString; begin - str := CefString(url); - Result := PCefCookieManager(FData).visit_url_cookies(PCefCookieManager(FData), @str, Ord(includeHttpOnly), CefGetData(visitor)) <> 0; + TempURL := CefString(url); + Result := PCefCookieManager(FData)^.visit_url_cookies(PCefCookieManager(FData), @TempURL, Ord(includeHttpOnly), CefGetData(visitor)) <> 0; end; function TCefCookieManagerRef.VisitUrlCookiesProc(const url : ustring; diff --git a/source/uCEFCookieVisitor.pas b/source/uCEFCookieVisitor.pas index 3f10e6f4..5b7e1d33 100644 --- a/source/uCEFCookieVisitor.pas +++ b/source/uCEFCookieVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFCookieVisitor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -86,21 +90,21 @@ begin Result := Ord(True); TempObject := CefGetObject(self); - if (cookie.has_expires <> 0) then - exp := CefTimeToDateTime(cookie.expires) + if (cookie^.has_expires <> 0) then + exp := CefTimeToDateTime(cookie^.expires) else exp := 0; if (TempObject <> nil) and (TempObject is TCefCookieVisitorOwn) then - Result := Ord(TCefCookieVisitorOwn(TempObject).visit(CefString(@cookie.name), - CefString(@cookie.value), - CefString(@cookie.domain), - CefString(@cookie.path), - Boolean(cookie.secure), - Boolean(cookie.httponly), - Boolean(cookie.has_expires), - CefTimeToDateTime(cookie.creation), - CefTimeToDateTime(cookie.last_access), + Result := Ord(TCefCookieVisitorOwn(TempObject).visit(CefString(@cookie^.name), + CefString(@cookie^.value), + CefString(@cookie^.domain), + CefString(@cookie^.path), + Boolean(cookie^.secure), + Boolean(cookie^.httponly), + Boolean(cookie^.has_expires), + CefTimeToDateTime(cookie^.creation), + CefTimeToDateTime(cookie^.last_access), exp, count, total, @@ -115,7 +119,7 @@ constructor TCefCookieVisitorOwn.Create; begin inherited CreateData(SizeOf(TCefCookieVisitor)); - PCefCookieVisitor(FData)^.visit := cef_cookie_visitor_visit; + PCefCookieVisitor(FData)^.visit := {$IFDEF FPC}@{$ENDIF}cef_cookie_visitor_visit; end; function TCefCookieVisitorOwn.visit(const name, value, domain, path: ustring; diff --git a/source/uCEFCustomStreamReader.pas b/source/uCEFCustomStreamReader.pas index 172d971f..18c70108 100644 --- a/source/uCEFCustomStreamReader.pas +++ b/source/uCEFCustomStreamReader.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFCustomStreamReader; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -142,11 +146,11 @@ begin with PCefReadHandler(FData)^ do begin - read := cef_stream_reader_read; - seek := cef_stream_reader_seek; - tell := cef_stream_reader_tell; - eof := cef_stream_reader_eof; - may_block := cef_stream_reader_may_block; + read := {$IFDEF FPC}@{$ENDIF}cef_stream_reader_read; + seek := {$IFDEF FPC}@{$ENDIF}cef_stream_reader_seek; + tell := {$IFDEF FPC}@{$ENDIF}cef_stream_reader_tell; + eof := {$IFDEF FPC}@{$ENDIF}cef_stream_reader_eof; + may_block := {$IFDEF FPC}@{$ENDIF}cef_stream_reader_may_block; end; end; diff --git a/source/uCEFDeleteCookiesCallback.pas b/source/uCEFDeleteCookiesCallback.pas index 17564fc1..f5a46c53 100644 --- a/source/uCEFDeleteCookiesCallback.pas +++ b/source/uCEFDeleteCookiesCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDeleteCookiesCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -106,7 +110,7 @@ constructor TCefDeleteCookiesCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefDeleteCookiesCallback)); - PCefDeleteCookiesCallback(FData).on_complete := cef_delete_cookie_callback_on_complete; + PCefDeleteCookiesCallback(FData)^.on_complete := {$IFDEF FPC}@{$ENDIF}cef_delete_cookie_callback_on_complete; end; // TCefFastDeleteCookiesCallback diff --git a/source/uCEFDialogHandler.pas b/source/uCEFDialogHandler.pas index a48bcf9a..bc29d159 100644 --- a/source/uCEFDialogHandler.pas +++ b/source/uCEFDialogHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDialogHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -135,7 +139,7 @@ constructor TCefDialogHandlerOwn.Create; begin inherited CreateData(SizeOf(TCefDialogHandler)); - PCefDialogHandler(FData).on_file_dialog := cef_dialog_handler_on_file_dialog; + PCefDialogHandler(FData)^.on_file_dialog := {$IFDEF FPC}@{$ENDIF}cef_dialog_handler_on_file_dialog; end; function TCefDialogHandlerOwn.OnFileDialog(const browser : ICefBrowser; diff --git a/source/uCEFDictionaryValue.pas b/source/uCEFDictionaryValue.pas index 303ffc88..3d37a170 100644 --- a/source/uCEFDictionaryValue.pas +++ b/source/uCEFDictionaryValue.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDictionaryValue; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -99,52 +103,52 @@ uses function TCefDictionaryValueRef.Clear: Boolean; begin - Result := PCefDictionaryValue(FData).clear(PCefDictionaryValue(FData)) <> 0; + Result := PCefDictionaryValue(FData)^.clear(PCefDictionaryValue(FData)) <> 0; end; function TCefDictionaryValueRef.Copy(excludeEmptyChildren: Boolean): ICefDictionaryValue; begin - Result := UnWrap(PCefDictionaryValue(FData).copy(PCefDictionaryValue(FData), Ord(excludeEmptyChildren))); + Result := UnWrap(PCefDictionaryValue(FData)^.copy(PCefDictionaryValue(FData), Ord(excludeEmptyChildren))); end; function TCefDictionaryValueRef.GetBinary(const key: ustring): ICefBinaryValue; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := TCefBinaryValueRef.UnWrap(PCefDictionaryValue(FData).get_binary(PCefDictionaryValue(FData), @k)); + TempKey := CefString(key); + Result := TCefBinaryValueRef.UnWrap(PCefDictionaryValue(FData)^.get_binary(PCefDictionaryValue(FData), @TempKey)); end; function TCefDictionaryValueRef.GetBool(const key: ustring): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).get_bool(PCefDictionaryValue(FData), @k) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.get_bool(PCefDictionaryValue(FData), @TempKey) <> 0; end; function TCefDictionaryValueRef.GetDictionary(const key: ustring): ICefDictionaryValue; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := UnWrap(PCefDictionaryValue(FData).get_dictionary(PCefDictionaryValue(FData), @k)); + TempKey := CefString(key); + Result := UnWrap(PCefDictionaryValue(FData)^.get_dictionary(PCefDictionaryValue(FData), @TempKey)); end; function TCefDictionaryValueRef.GetDouble(const key: ustring): Double; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).get_double(PCefDictionaryValue(FData), @k); + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.get_double(PCefDictionaryValue(FData), @TempKey); end; function TCefDictionaryValueRef.GetInt(const key: ustring): Integer; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).get_int(PCefDictionaryValue(FData), @k); + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.get_int(PCefDictionaryValue(FData), @TempKey); end; function TCefDictionaryValueRef.GetKeys(const keys : TStrings): Boolean; @@ -157,7 +161,7 @@ begin begin TempSL := TCefStringListOwn.Create; - if (PCefDictionaryValue(FData).get_keys(PCefDictionaryValue(FData), TempSL.Handle) <> 0) then + if (PCefDictionaryValue(FData)^.get_keys(PCefDictionaryValue(FData), TempSL.Handle) <> 0) then begin TempSL.CopyToStrings(keys); Result := True; @@ -167,169 +171,165 @@ end; function TCefDictionaryValueRef.GetList(const key: ustring): ICefListValue; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := TCefListValueRef.UnWrap(PCefDictionaryValue(FData).get_list(PCefDictionaryValue(FData), @k)); + TempKey := CefString(key); + Result := TCefListValueRef.UnWrap(PCefDictionaryValue(FData)^.get_list(PCefDictionaryValue(FData), @TempKey)); end; function TCefDictionaryValueRef.GetSize: NativeUInt; begin - Result := PCefDictionaryValue(FData).get_size(PCefDictionaryValue(FData)); + Result := PCefDictionaryValue(FData)^.get_size(PCefDictionaryValue(FData)); end; function TCefDictionaryValueRef.GetString(const key: ustring): ustring; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := CefStringFreeAndGet(PCefDictionaryValue(FData).get_string(PCefDictionaryValue(FData), @k)); + TempKey := CefString(key); + Result := CefStringFreeAndGet(PCefDictionaryValue(FData)^.get_string(PCefDictionaryValue(FData), @TempKey)); end; function TCefDictionaryValueRef.GetType(const key: ustring): TCefValueType; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).get_type(PCefDictionaryValue(FData), @k); + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.get_type(PCefDictionaryValue(FData), @TempKey); end; function TCefDictionaryValueRef.GetValue(const key: ustring): ICefValue; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := TCefValueRef.UnWrap(PCefDictionaryValue(FData).get_value(PCefDictionaryValue(FData), @k)); + TempKey := CefString(key); + Result := TCefValueRef.UnWrap(PCefDictionaryValue(FData)^.get_value(PCefDictionaryValue(FData), @TempKey)); end; function TCefDictionaryValueRef.HasKey(const key: ustring): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).has_key(PCefDictionaryValue(FData), @k) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.has_key(PCefDictionaryValue(FData), @TempKey) <> 0; end; -function TCefDictionaryValueRef.IsEqual( - const that: ICefDictionaryValue): Boolean; +function TCefDictionaryValueRef.IsEqual(const that: ICefDictionaryValue): Boolean; begin - Result := PCefDictionaryValue(FData).is_equal(PCefDictionaryValue(FData), CefGetData(that)) <> 0; + Result := PCefDictionaryValue(FData)^.is_equal(PCefDictionaryValue(FData), CefGetData(that)) <> 0; end; function TCefDictionaryValueRef.isOwned: Boolean; begin - Result := PCefDictionaryValue(FData).is_owned(PCefDictionaryValue(FData)) <> 0; + Result := PCefDictionaryValue(FData)^.is_owned(PCefDictionaryValue(FData)) <> 0; end; function TCefDictionaryValueRef.IsReadOnly: Boolean; begin - Result := PCefDictionaryValue(FData).is_read_only(PCefDictionaryValue(FData)) <> 0; + Result := PCefDictionaryValue(FData)^.is_read_only(PCefDictionaryValue(FData)) <> 0; end; -function TCefDictionaryValueRef.IsSame( - const that: ICefDictionaryValue): Boolean; +function TCefDictionaryValueRef.IsSame(const that: ICefDictionaryValue): Boolean; begin - Result := PCefDictionaryValue(FData).is_same(PCefDictionaryValue(FData), CefGetData(that)) <> 0; + Result := PCefDictionaryValue(FData)^.is_same(PCefDictionaryValue(FData), CefGetData(that)) <> 0; end; function TCefDictionaryValueRef.IsValid: Boolean; begin - Result := PCefDictionaryValue(FData).is_valid(PCefDictionaryValue(FData)) <> 0; + Result := PCefDictionaryValue(FData)^.is_valid(PCefDictionaryValue(FData)) <> 0; end; class function TCefDictionaryValueRef.New: ICefDictionaryValue; begin - Result := UnWrap(cef_dictionary_value_create); + Result := UnWrap(cef_dictionary_value_create()); end; function TCefDictionaryValueRef.Remove(const key: ustring): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).remove(PCefDictionaryValue(FData), @k) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.remove(PCefDictionaryValue(FData), @TempKey) <> 0; end; function TCefDictionaryValueRef.SetBinary(const key: ustring; const value: ICefBinaryValue): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_binary(PCefDictionaryValue(FData), @k, CefGetData(value)) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_binary(PCefDictionaryValue(FData), @TempKey, CefGetData(value)) <> 0; end; function TCefDictionaryValueRef.SetBool(const key: ustring; value: Boolean): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_bool(PCefDictionaryValue(FData), @k, Ord(value)) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_bool(PCefDictionaryValue(FData), @TempKey, Ord(value)) <> 0; end; function TCefDictionaryValueRef.SetDictionary(const key: ustring; const value: ICefDictionaryValue): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_dictionary(PCefDictionaryValue(FData), @k, CefGetData(value)) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_dictionary(PCefDictionaryValue(FData), @TempKey, CefGetData(value)) <> 0; end; -function TCefDictionaryValueRef.SetDouble(const key: ustring; - value: Double): Boolean; +function TCefDictionaryValueRef.SetDouble(const key: ustring; value: Double): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_double(PCefDictionaryValue(FData), @k, value) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_double(PCefDictionaryValue(FData), @TempKey, value) <> 0; end; function TCefDictionaryValueRef.SetInt(const key: ustring; value: Integer): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_int(PCefDictionaryValue(FData), @k, value) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_int(PCefDictionaryValue(FData), @TempKey, value) <> 0; end; function TCefDictionaryValueRef.SetList(const key: ustring; const value: ICefListValue): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_list(PCefDictionaryValue(FData), @k, CefGetData(value)) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_list(PCefDictionaryValue(FData), @TempKey, CefGetData(value)) <> 0; end; function TCefDictionaryValueRef.SetNull(const key: ustring): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_null(PCefDictionaryValue(FData), @k) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_null(PCefDictionaryValue(FData), @TempKey) <> 0; end; function TCefDictionaryValueRef.SetString(const key, value: ustring): Boolean; var - k, v: TCefString; + TempKey, TempValue : TCefString; begin - k := CefString(key); - v := CefString(value); - Result := PCefDictionaryValue(FData).set_string(PCefDictionaryValue(FData), @k, @v) <> 0; + TempKey := CefString(key); + TempValue := CefString(value); + Result := PCefDictionaryValue(FData)^.set_string(PCefDictionaryValue(FData), @TempKey, @TempValue) <> 0; end; -function TCefDictionaryValueRef.SetValue(const key: ustring; - const value: ICefValue): Boolean; +function TCefDictionaryValueRef.SetValue(const key: ustring; const value: ICefValue): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefDictionaryValue(FData).set_value(PCefDictionaryValue(FData), @k, CefGetData(value)) <> 0; + TempKey := CefString(key); + Result := PCefDictionaryValue(FData)^.set_value(PCefDictionaryValue(FData), @TempKey, CefGetData(value)) <> 0; end; -class function TCefDictionaryValueRef.UnWrap( - data: Pointer): ICefDictionaryValue; +class function TCefDictionaryValueRef.UnWrap(data: Pointer): ICefDictionaryValue; begin - if data <> nil then - Result := Create(data) as ICefDictionaryValue else + if (data <> nil) then + Result := Create(data) as ICefDictionaryValue + else Result := nil; end; diff --git a/source/uCEFDisplayHandler.pas b/source/uCEFDisplayHandler.pas index 45193b1f..ccf4e752 100644 --- a/source/uCEFDisplayHandler.pas +++ b/source/uCEFDisplayHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDisplayHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -264,15 +268,15 @@ begin with PCefDisplayHandler(FData)^ do begin - on_address_change := cef_display_handler_on_address_change; - on_title_change := cef_display_handler_on_title_change; - on_favicon_urlchange := cef_display_handler_on_favicon_urlchange; - on_fullscreen_mode_change := cef_display_handler_on_fullscreen_mode_change; - on_tooltip := cef_display_handler_on_tooltip; - on_status_message := cef_display_handler_on_status_message; - on_console_message := cef_display_handler_on_console_message; - on_auto_resize := cef_display_handler_on_auto_resize; - on_loading_progress_change := cef_display_handler_on_loading_progress_change; + on_address_change := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_address_change; + on_title_change := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_title_change; + on_favicon_urlchange := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_favicon_urlchange; + on_fullscreen_mode_change := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_fullscreen_mode_change; + on_tooltip := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_tooltip; + on_status_message := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_status_message; + on_console_message := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_console_message; + on_auto_resize := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_auto_resize; + on_loading_progress_change := {$IFDEF FPC}@{$ENDIF}cef_display_handler_on_loading_progress_change; end; end; diff --git a/source/uCEFDomDocument.pas b/source/uCEFDomDocument.pas index 5b20b8d1..32291aa9 100644 --- a/source/uCEFDomDocument.pas +++ b/source/uCEFDomDocument.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDomDocument; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -88,10 +92,10 @@ end; function TCefDomDocumentRef.GetCompleteUrl(const partialURL: ustring): ustring; var - p: TCefString; + TempPartialURL : TCefString; begin - p := CefString(partialURL); - Result := CefStringFreeAndGet(PCefDomDocument(FData)^.get_complete_url(PCefDomDocument(FData), @p)); + TempPartialURL := CefString(partialURL); + Result := CefStringFreeAndGet(PCefDomDocument(FData)^.get_complete_url(PCefDomDocument(FData), @TempPartialURL)); end; function TCefDomDocumentRef.GetDocument: ICefDomNode; @@ -101,10 +105,10 @@ end; function TCefDomDocumentRef.GetElementById(const id: ustring): ICefDomNode; var - i: TCefString; + TempID : TCefString; begin - i := CefString(id); - Result := TCefDomNodeRef.UnWrap(PCefDomDocument(FData)^.get_element_by_id(PCefDomDocument(FData), @i)); + TempID := CefString(id); + Result := TCefDomNodeRef.UnWrap(PCefDomDocument(FData)^.get_element_by_id(PCefDomDocument(FData), @TempID)); end; function TCefDomDocumentRef.GetFocusedNode: ICefDomNode; @@ -154,8 +158,9 @@ end; class function TCefDomDocumentRef.UnWrap(data: Pointer): ICefDomDocument; begin - if data <> nil then - Result := Create(data) as ICefDomDocument else + if (data <> nil) then + Result := Create(data) as ICefDomDocument + else Result := nil; end; diff --git a/source/uCEFDomNode.pas b/source/uCEFDomNode.pas index ded49802..9b21fe7d 100644 --- a/source/uCEFDomNode.pas +++ b/source/uCEFDomNode.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDomNode; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -52,32 +56,32 @@ uses type TCefDomNodeRef = class(TCefBaseRefCountedRef, ICefDomNode) protected - function GetType: TCefDomNodeType; - function IsText: Boolean; - function IsElement: Boolean; - function IsEditable: Boolean; - function IsFormControlElement: Boolean; - function GetFormControlElementType: ustring; - function IsSame(const that: ICefDomNode): Boolean; - function GetName: ustring; - function GetValue: ustring; - function SetValue(const value: ustring): Boolean; - function GetAsMarkup: ustring; - function GetDocument: ICefDomDocument; - function GetParent: ICefDomNode; - function GetPreviousSibling: ICefDomNode; - function GetNextSibling: ICefDomNode; - function HasChildren: Boolean; - function GetFirstChild: ICefDomNode; - function GetLastChild: ICefDomNode; - function GetElementTagName: ustring; - function HasElementAttributes: Boolean; - function HasElementAttribute(const attrName: ustring): Boolean; - function GetElementAttribute(const attrName: ustring): ustring; + function GetType: TCefDomNodeType; + function IsText: Boolean; + function IsElement: Boolean; + function IsEditable: Boolean; + function IsFormControlElement: Boolean; + function GetFormControlElementType: ustring; + function IsSame(const that: ICefDomNode): Boolean; + function GetName: ustring; + function GetValue: ustring; + function SetValue(const value: ustring): Boolean; + function GetAsMarkup: ustring; + function GetDocument: ICefDomDocument; + function GetParent: ICefDomNode; + function GetPreviousSibling: ICefDomNode; + function GetNextSibling: ICefDomNode; + function HasChildren: Boolean; + function GetFirstChild: ICefDomNode; + function GetLastChild: ICefDomNode; + function GetElementTagName: ustring; + function HasElementAttributes: Boolean; + function HasElementAttribute(const attrName: ustring): Boolean; + function GetElementAttribute(const attrName: ustring): ustring; procedure GetElementAttributes(const attrMap: ICefStringMap); - function SetElementAttribute(const attrName, value: ustring): Boolean; - function GetElementInnerText: ustring; - function GetElementBounds: TCefRect; + function SetElementAttribute(const attrName, value: ustring): Boolean; + function GetElementInnerText: ustring; + function GetElementBounds: TCefRect; public class function UnWrap(data: Pointer): ICefDomNode; @@ -100,10 +104,10 @@ end; function TCefDomNodeRef.GetElementAttribute(const attrName: ustring): ustring; var - p: TCefString; + TempName : TCefString; begin - p := CefString(attrName); - Result := CefStringFreeAndGet(PCefDomNode(FData)^.get_element_attribute(PCefDomNode(FData), @p)); + TempName := CefString(attrName); + Result := CefStringFreeAndGet(PCefDomNode(FData)^.get_element_attribute(PCefDomNode(FData), @TempName)); end; procedure TCefDomNodeRef.GetElementAttributes(const attrMap: ICefStringMap); @@ -178,10 +182,10 @@ end; function TCefDomNodeRef.HasElementAttribute(const attrName: ustring): Boolean; var - p: TCefString; + TempName : TCefString; begin - p := CefString(attrName); - Result := PCefDomNode(FData)^.has_element_attribute(PCefDomNode(FData), @p) <> 0; + TempName := CefString(attrName); + Result := PCefDomNode(FData)^.has_element_attribute(PCefDomNode(FData), @TempName) <> 0; end; function TCefDomNodeRef.HasElementAttributes: Boolean; @@ -214,28 +218,28 @@ begin Result := PCefDomNode(FData)^.is_text(PCefDomNode(FData)) <> 0; end; -function TCefDomNodeRef.SetElementAttribute(const attrName, - value: ustring): Boolean; +function TCefDomNodeRef.SetElementAttribute(const attrName, value: ustring): Boolean; var - p1, p2: TCefString; + TempName, TempValue : TCefString; begin - p1 := CefString(attrName); - p2 := CefString(value); - Result := PCefDomNode(FData)^.set_element_attribute(PCefDomNode(FData), @p1, @p2) <> 0; + TempName := CefString(attrName); + TempValue := CefString(value); + Result := PCefDomNode(FData)^.set_element_attribute(PCefDomNode(FData), @TempName, @TempValue) <> 0; end; function TCefDomNodeRef.SetValue(const value: ustring): Boolean; var - p: TCefString; + TempValue : TCefString; begin - p := CefString(value); - Result := PCefDomNode(FData)^.set_value(PCefDomNode(FData), @p) <> 0; + TempValue := CefString(value); + Result := PCefDomNode(FData)^.set_value(PCefDomNode(FData), @TempValue) <> 0; end; class function TCefDomNodeRef.UnWrap(data: Pointer): ICefDomNode; begin - if data <> nil then - Result := Create(data) as ICefDomNode else + if (data <> nil) then + Result := Create(data) as ICefDomNode + else Result := nil; end; diff --git a/source/uCEFDomVisitor.pas b/source/uCEFDomVisitor.pas index 5c7c1147..cf22bc12 100644 --- a/source/uCEFDomVisitor.pas +++ b/source/uCEFDomVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDomVisitor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -101,7 +105,7 @@ constructor TCefDomVisitorOwn.Create; begin inherited CreateData(SizeOf(TCefDomVisitor)); - PCefDomVisitor(FData).visit := cef_dom_visitor_visite; + PCefDomVisitor(FData)^.visit := {$IFDEF FPC}@{$ENDIF}cef_dom_visitor_visite; end; procedure TCefDomVisitorOwn.visit(const document: ICefDomDocument); diff --git a/source/uCEFDownLoadItem.pas b/source/uCEFDownLoadItem.pas index b45ad2bd..a2475f15 100644 --- a/source/uCEFDownLoadItem.pas +++ b/source/uCEFDownLoadItem.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDownLoadItem; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -165,8 +169,9 @@ end; class function TCefDownLoadItemRef.UnWrap(data: Pointer): ICefDownLoadItem; begin - if data <> nil then - Result := Create(data) as ICefDownLoadItem else + if (data <> nil) then + Result := Create(data) as ICefDownLoadItem + else Result := nil; end; diff --git a/source/uCEFDownloadHandler.pas b/source/uCEFDownloadHandler.pas index bd798874..4179fa03 100644 --- a/source/uCEFDownloadHandler.pas +++ b/source/uCEFDownloadHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDownloadHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -119,8 +123,8 @@ begin with PCefDownloadHandler(FData)^ do begin - on_before_download := cef_download_handler_on_before_download; - on_download_updated := cef_download_handler_on_download_updated; + on_before_download := {$IFDEF FPC}@{$ENDIF}cef_download_handler_on_before_download; + on_download_updated := {$IFDEF FPC}@{$ENDIF}cef_download_handler_on_download_updated; end; end; diff --git a/source/uCEFDownloadImageCallBack.pas b/source/uCEFDownloadImageCallBack.pas index 77471592..4c27f85e 100644 --- a/source/uCEFDownloadImageCallBack.pas +++ b/source/uCEFDownloadImageCallBack.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDownloadImageCallBack; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -92,7 +96,8 @@ constructor TCefDownloadImageCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefDownloadImageCallback)); - PCefDownloadImageCallback(FData).on_download_image_finished := cef_download_image_callback_on_download_image_finished; + with PCefDownloadImageCallback(FData)^ do + on_download_image_finished := {$IFDEF FPC}@{$ENDIF}cef_download_image_callback_on_download_image_finished; end; constructor TCefFastDownloadImageCallback.Create(const proc: TOnDownloadImageFinishedProc); diff --git a/source/uCEFDownloadItemCallback.pas b/source/uCEFDownloadItemCallback.pas index 6b508dcf..7ac4f978 100644 --- a/source/uCEFDownloadItemCallback.pas +++ b/source/uCEFDownloadItemCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDownloadItemCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -66,23 +70,24 @@ uses procedure TCefDownloadItemCallbackRef.cancel; begin - PCefDownloadItemCallback(FData).cancel(PCefDownloadItemCallback(FData)); + PCefDownloadItemCallback(FData)^.cancel(PCefDownloadItemCallback(FData)); end; procedure TCefDownloadItemCallbackRef.Pause; begin - PCefDownloadItemCallback(FData).pause(PCefDownloadItemCallback(FData)); + PCefDownloadItemCallback(FData)^.pause(PCefDownloadItemCallback(FData)); end; procedure TCefDownloadItemCallbackRef.Resume; begin - PCefDownloadItemCallback(FData).resume(PCefDownloadItemCallback(FData)); + PCefDownloadItemCallback(FData)^.resume(PCefDownloadItemCallback(FData)); end; class function TCefDownloadItemCallbackRef.UnWrap(data: Pointer): ICefDownloadItemCallback; begin - if data <> nil then - Result := Create(data) as ICefDownloadItemCallback else + if (data <> nil) then + Result := Create(data) as ICefDownloadItemCallback + else Result := nil; end; diff --git a/source/uCEFDragAndDropMgr.pas b/source/uCEFDragAndDropMgr.pas index 3f227158..129893d9 100644 --- a/source/uCEFDragAndDropMgr.pas +++ b/source/uCEFDragAndDropMgr.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDragAndDropMgr; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$I cef.inc} interface diff --git a/source/uCEFDragData.pas b/source/uCEFDragData.pas index db6952fd..75c98a85 100644 --- a/source/uCEFDragData.pas +++ b/source/uCEFDragData.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDragData; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -57,20 +61,20 @@ uses type TCefDragDataRef = class(TCefBaseRefCountedRef, ICefDragData) protected - function Clone: ICefDragData; - function IsReadOnly: Boolean; - function IsLink: Boolean; - function IsFragment: Boolean; - function IsFile: Boolean; - function GetLinkUrl: ustring; - function GetLinkTitle: ustring; - function GetLinkMetadata: ustring; - function GetFragmentText: ustring; - function GetFragmentHtml: ustring; - function GetFragmentBaseUrl: ustring; - function GetFileName: ustring; - function GetFileContents(const writer: ICefStreamWriter): NativeUInt; - function GetFileNames(var names: TStrings): Integer; + function Clone: ICefDragData; + function IsReadOnly: Boolean; + function IsLink: Boolean; + function IsFragment: Boolean; + function IsFile: Boolean; + function GetLinkUrl: ustring; + function GetLinkTitle: ustring; + function GetLinkMetadata: ustring; + function GetFragmentText: ustring; + function GetFragmentHtml: ustring; + function GetFragmentBaseUrl: ustring; + function GetFileName: ustring; + function GetFileContents(const writer: ICefStreamWriter): NativeUInt; + function GetFileNames(var names: TStrings): Integer; procedure SetLinkUrl(const url: ustring); procedure SetLinkTitle(const title: ustring); procedure SetLinkMetadata(const data: ustring); @@ -94,42 +98,41 @@ uses procedure TCefDragDataRef.AddFile(const path, displayName: ustring); var - p, d: TCefString; + TempPath, TempName : TCefString; begin - p := CefString(path); - d := CefString(displayName); - PCefDragData(FData).add_file(FData, @p, @d); + TempPath := CefString(path); + TempName := CefString(displayName); + PCefDragData(FData)^.add_file(FData, @TempPath, @TempName); end; function TCefDragDataRef.GetImage : ICefImage; begin - Result := TCefImageRef.UnWrap(PCefDragData(FData).get_image(FData)); + Result := TCefImageRef.UnWrap(PCefDragData(FData)^.get_image(FData)); end; function TCefDragDataRef.GetImageHotspot : TCefPoint; begin - Result := PCefDragData(FData).get_image_hotspot(FData)^; + Result := PCefDragData(FData)^.get_image_hotspot(FData)^; end; function TCefDragDataRef.HasImage : boolean; begin - Result := (PCefDragData(FData).has_image(FData) <> 0); + Result := (PCefDragData(FData)^.has_image(FData) <> 0); end; function TCefDragDataRef.Clone: ICefDragData; begin - Result := UnWrap(PCefDragData(FData).clone(FData)); + Result := UnWrap(PCefDragData(FData)^.clone(FData)); end; -function TCefDragDataRef.GetFileContents( - const writer: ICefStreamWriter): NativeUInt; +function TCefDragDataRef.GetFileContents(const writer: ICefStreamWriter): NativeUInt; begin - Result := PCefDragData(FData).get_file_contents(FData, CefGetData(writer)) + Result := PCefDragData(FData)^.get_file_contents(FData, CefGetData(writer)) end; function TCefDragDataRef.GetFileName: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_file_name(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_file_name(FData)); end; function TCefDragDataRef.GetFileNames(var names: TStrings): Integer; @@ -142,7 +145,7 @@ begin begin TempSL := TCefStringListOwn.Create; - if (PCefDragData(FData).get_file_names(FData, TempSL.Handle) <> 0) then + if (PCefDragData(FData)^.get_file_names(FData, TempSL.Handle) <> 0) then begin TempSL.CopyToStrings(names); Result := names.Count; @@ -152,52 +155,52 @@ end; function TCefDragDataRef.GetFragmentBaseUrl: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_fragment_base_url(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_fragment_base_url(FData)); end; function TCefDragDataRef.GetFragmentHtml: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_fragment_html(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_fragment_html(FData)); end; function TCefDragDataRef.GetFragmentText: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_fragment_text(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_fragment_text(FData)); end; function TCefDragDataRef.GetLinkMetadata: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_link_metadata(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_link_metadata(FData)); end; function TCefDragDataRef.GetLinkTitle: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_link_title(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_link_title(FData)); end; function TCefDragDataRef.GetLinkUrl: ustring; begin - Result := CefStringFreeAndGet(PCefDragData(FData).get_link_url(FData)); + Result := CefStringFreeAndGet(PCefDragData(FData)^.get_link_url(FData)); end; function TCefDragDataRef.IsFile: Boolean; begin - Result := PCefDragData(FData).is_file(FData) <> 0; + Result := PCefDragData(FData)^.is_file(FData) <> 0; end; function TCefDragDataRef.IsFragment: Boolean; begin - Result := PCefDragData(FData).is_fragment(FData) <> 0; + Result := PCefDragData(FData)^.is_fragment(FData) <> 0; end; function TCefDragDataRef.IsLink: Boolean; begin - Result := PCefDragData(FData).is_link(FData) <> 0; + Result := PCefDragData(FData)^.is_link(FData) <> 0; end; function TCefDragDataRef.IsReadOnly: Boolean; begin - Result := PCefDragData(FData).is_read_only(FData) <> 0; + Result := PCefDragData(FData)^.is_read_only(FData) <> 0; end; class function TCefDragDataRef.New: ICefDragData; @@ -207,61 +210,62 @@ end; procedure TCefDragDataRef.ResetFileContents; begin - PCefDragData(FData).reset_file_contents(FData); + PCefDragData(FData)^.reset_file_contents(FData); end; procedure TCefDragDataRef.SetFragmentBaseUrl(const baseUrl: ustring); var - s: TCefString; + TempURL : TCefString; begin - s := CefString(baseUrl); - PCefDragData(FData).set_fragment_base_url(FData, @s); + TempURL := CefString(baseUrl); + PCefDragData(FData)^.set_fragment_base_url(FData, @TempURL); end; procedure TCefDragDataRef.SetFragmentHtml(const html: ustring); var - s: TCefString; + TempHTML : TCefString; begin - s := CefString(html); - PCefDragData(FData).set_fragment_html(FData, @s); + TempHTML := CefString(html); + PCefDragData(FData)^.set_fragment_html(FData, @TempHTML); end; procedure TCefDragDataRef.SetFragmentText(const text: ustring); var - s: TCefString; + TempText : TCefString; begin - s := CefString(text); - PCefDragData(FData).set_fragment_text(FData, @s); + TempText := CefString(text); + PCefDragData(FData)^.set_fragment_text(FData, @TempText); end; procedure TCefDragDataRef.SetLinkMetadata(const data: ustring); var - s: TCefString; + TempData : TCefString; begin - s := CefString(data); - PCefDragData(FData).set_link_metadata(FData, @s); + TempData := CefString(data); + PCefDragData(FData)^.set_link_metadata(FData, @TempData); end; procedure TCefDragDataRef.SetLinkTitle(const title: ustring); var - s: TCefString; + TempTitle : TCefString; begin - s := CefString(title); - PCefDragData(FData).set_link_title(FData, @s); + TempTitle := CefString(title); + PCefDragData(FData)^.set_link_title(FData, @TempTitle); end; procedure TCefDragDataRef.SetLinkUrl(const url: ustring); var - s: TCefString; + TempURL : TCefString; begin - s := CefString(url); - PCefDragData(FData).set_link_url(FData, @s); + TempURL := CefString(url); + PCefDragData(FData)^.set_link_url(FData, @TempURL); end; class function TCefDragDataRef.UnWrap(data: Pointer): ICefDragData; begin - if data <> nil then - Result := Create(data) as ICefDragData else + if (data <> nil) then + Result := Create(data) as ICefDragData + else Result := nil; end; diff --git a/source/uCEFDragHandler.pas b/source/uCEFDragHandler.pas index 139dc453..35d18a49 100644 --- a/source/uCEFDragHandler.pas +++ b/source/uCEFDragHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFDragHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -122,8 +126,8 @@ begin with PCefDragHandler(FData)^ do begin - on_drag_enter := cef_drag_handler_on_drag_enter; - on_draggable_regions_changed := cef_drag_handler_on_draggable_regions_changed; + on_drag_enter := {$IFDEF FPC}@{$ENDIF}cef_drag_handler_on_drag_enter; + on_draggable_regions_changed := {$IFDEF FPC}@{$ENDIF}cef_drag_handler_on_draggable_regions_changed; end; end; diff --git a/source/uCEFEndTracingCallback.pas b/source/uCEFEndTracingCallback.pas index 10f0d840..e32657e2 100644 --- a/source/uCEFEndTracingCallback.pas +++ b/source/uCEFEndTracingCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFEndTracingCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,8 +54,6 @@ uses uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type - TCefEndTracingCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const tracingFile: ustring); - TCefEndTracingCallbackOwn = class(TCefBaseRefCountedOwn, ICefEndTracingCallback) protected procedure OnEndTracingComplete(const tracingFile: ustring); virtual; @@ -89,7 +91,8 @@ constructor TCefEndTracingCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefEndTracingCallback)); - PCefEndTracingCallback(FData).on_end_tracing_complete := cef_end_tracing_callback_on_end_tracing_complete; + with PCefEndTracingCallback(FData)^ do + on_end_tracing_complete := {$IFDEF FPC}@{$ENDIF}cef_end_tracing_callback_on_end_tracing_complete; end; procedure TCefEndTracingCallbackOwn.OnEndTracingComplete(const tracingFile: ustring); diff --git a/source/uCEFExtension.pas b/source/uCEFExtension.pas index fbd53e0f..275efb0f 100644 --- a/source/uCEFExtension.pas +++ b/source/uCEFExtension.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFExtension; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -72,42 +76,42 @@ uses function TCefExtensionRef.GetIdentifier : ustring; begin - Result := CefStringFreeAndGet(PCefExtension(FData).get_identifier(PCefExtension(FData))); + Result := CefStringFreeAndGet(PCefExtension(FData)^.get_identifier(PCefExtension(FData))); end; function TCefExtensionRef.GetPath : ustring; begin - Result := CefStringFreeAndGet(PCefExtension(FData).get_path(PCefExtension(FData))); + Result := CefStringFreeAndGet(PCefExtension(FData)^.get_path(PCefExtension(FData))); end; function TCefExtensionRef.GetManifest : ICefDictionaryValue; begin - Result := TCefDictionaryValueRef.UnWrap(PCefExtension(FData).get_manifest(PCefExtension(FData))); + Result := TCefDictionaryValueRef.UnWrap(PCefExtension(FData)^.get_manifest(PCefExtension(FData))); end; function TCefExtensionRef.IsSame(const that : ICefExtension) : boolean; begin - Result:= PCefExtension(FData).is_same(PCefExtension(FData), PCefExtension(CefGetData(that))) <> 0; + Result:= PCefExtension(FData)^.is_same(PCefExtension(FData), PCefExtension(CefGetData(that))) <> 0; end; function TCefExtensionRef.GetHandler : ICefExtensionHandler; begin - Result := TCefExtensionHandlerRef.UnWrap(PCefExtension(FData).get_handler(PCefExtension(FData))); + Result := TCefExtensionHandlerRef.UnWrap(PCefExtension(FData)^.get_handler(PCefExtension(FData))); end; function TCefExtensionRef.GetLoaderContext: ICefRequestContext; begin - Result := TCefRequestContextRef.UnWrap(PCefExtension(FData).get_loader_context(PCefExtension(FData))); + Result := TCefRequestContextRef.UnWrap(PCefExtension(FData)^.get_loader_context(PCefExtension(FData))); end; function TCefExtensionRef.IsLoaded : boolean; begin - Result := PCefExtension(FData).is_loaded(PCefExtension(FData)) <> 0; + Result := PCefExtension(FData)^.is_loaded(PCefExtension(FData)) <> 0; end; procedure TCefExtensionRef.unload; begin - PCefExtension(FData).unload(PCefExtension(FData)); + PCefExtension(FData)^.unload(PCefExtension(FData)); end; class function TCefExtensionRef.UnWrap(data: Pointer): ICefExtension; diff --git a/source/uCEFExtensionHandler.pas b/source/uCEFExtensionHandler.pas index ec990e6d..3c163b1e 100644 --- a/source/uCEFExtensionHandler.pas +++ b/source/uCEFExtensionHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -36,6 +36,10 @@ *) unit uCEFExtensionHandler; + +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} {$IFNDEF CPUX64} {$ALIGN ON} @@ -130,10 +134,10 @@ function TCefExtensionHandlerRef.GetActiveBrowser(const extension : ICef const browser : ICefBrowser; include_incognito : boolean): ICefBrowser; begin - Result := TCefBrowserRef.UnWrap(PCefExtensionHandler(FData).get_active_browser(PCefExtensionHandler(FData), - CefGetData(extension), - CefGetData(browser), - Ord(include_incognito))); + Result := TCefBrowserRef.UnWrap(PCefExtensionHandler(FData)^.get_active_browser(PCefExtensionHandler(FData), + CefGetData(extension), + CefGetData(browser), + Ord(include_incognito))); end; function TCefExtensionHandlerRef.CanAccessBrowser(const extension : ICefExtension; @@ -141,11 +145,11 @@ function TCefExtensionHandlerRef.CanAccessBrowser(const extension : ICef include_incognito : boolean; const target_browser : ICefBrowser): boolean; begin - Result := PCefExtensionHandler(FData).can_access_browser(PCefExtensionHandler(FData), - CefGetData(extension), - CefGetData(browser), - Ord(include_incognito), - CefGetData(target_browser)) <> 0; + Result := PCefExtensionHandler(FData)^.can_access_browser(PCefExtensionHandler(FData), + CefGetData(extension), + CefGetData(browser), + Ord(include_incognito), + CefGetData(target_browser)) <> 0; end; function TCefExtensionHandlerRef.GetExtensionResource(const extension : ICefExtension; @@ -156,11 +160,11 @@ var TempFile : TCefString; begin TempFile := CefString(file_); - Result := PCefExtensionHandler(FData).get_extension_resource(PCefExtensionHandler(FData), - CefGetData(extension), - CefGetData(browser), - @TempFile, - CefGetData(callback)) <> 0; + Result := PCefExtensionHandler(FData)^.get_extension_resource(PCefExtensionHandler(FData), + CefGetData(extension), + CefGetData(browser), + @TempFile, + CefGetData(callback)) <> 0; end; class function TCefExtensionHandlerRef.UnWrap(data: Pointer): ICefExtensionHandler; @@ -337,14 +341,14 @@ begin with PCefExtensionHandler(FData)^ do begin - on_extension_load_failed := cef_extension_handler_on_extension_load_failed; - on_extension_loaded := cef_extension_handler_on_extension_loaded; - on_extension_unloaded := cef_extension_handler_on_extension_unloaded; - on_before_background_browser := cef_extension_handler_on_before_background_browser; - on_before_browser := cef_extension_handler_on_before_browser; - get_active_browser := cef_extension_handler_get_active_browser; - can_access_browser := cef_extension_handler_can_access_browser; - get_extension_resource := cef_extension_handler_get_extension_resource; + on_extension_load_failed := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_extension_load_failed; + on_extension_loaded := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_extension_loaded; + on_extension_unloaded := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_extension_unloaded; + on_before_background_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_before_background_browser; + on_before_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_before_browser; + get_active_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_get_active_browser; + can_access_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_can_access_browser; + get_extension_resource := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_get_extension_resource; end; end; diff --git a/source/uCEFFileDialogCallback.pas b/source/uCEFFileDialogCallback.pas index 5be78b40..4325728b 100644 --- a/source/uCEFFileDialogCallback.pas +++ b/source/uCEFFileDialogCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFFileDialogCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -70,7 +74,7 @@ uses procedure TCefFileDialogCallbackRef.Cancel; begin - PCefFileDialogCallback(FData).cancel(FData); + PCefFileDialogCallback(FData)^.cancel(FData); end; procedure TCefFileDialogCallbackRef.Cont(selectedAcceptFilter: Integer; const filePaths: TStrings); @@ -81,9 +85,9 @@ begin TempSL := TCefStringListOwn.Create; TempSL.AddStrings(filePaths); - PCefFileDialogCallback(FData).cont(PCefFileDialogCallback(FData), - selectedAcceptFilter, - TempSL.Handle); + PCefFileDialogCallback(FData)^.cont(PCefFileDialogCallback(FData), + selectedAcceptFilter, + TempSL.Handle); finally TempSL := nil; end; diff --git a/source/uCEFFindHandler.pas b/source/uCEFFindHandler.pas index daca80a7..d8cd0f5a 100644 --- a/source/uCEFFindHandler.pas +++ b/source/uCEFFindHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFFindHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -108,7 +112,7 @@ constructor TCefFindHandlerOwn.Create; begin inherited CreateData(SizeOf(TCefFindHandler)); - PCefFindHandler(FData).on_find_result := cef_find_handler_on_find_result; + PCefFindHandler(FData)^.on_find_result := {$IFDEF FPC}@{$ENDIF}cef_find_handler_on_find_result; end; procedure TCefFindHandlerOwn.RemoveReferences; diff --git a/source/uCEFFocusHandler.pas b/source/uCEFFocusHandler.pas index 97a004a8..c30aa6d9 100644 --- a/source/uCEFFocusHandler.pas +++ b/source/uCEFFocusHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFFocusHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -131,9 +135,9 @@ begin with PCefFocusHandler(FData)^ do begin - on_take_focus := cef_focus_handler_on_take_focus; - on_set_focus := cef_focus_handler_on_set_focus; - on_got_focus := cef_focus_handler_on_got_focus; + on_take_focus := {$IFDEF FPC}@{$ENDIF}cef_focus_handler_on_take_focus; + on_set_focus := {$IFDEF FPC}@{$ENDIF}cef_focus_handler_on_set_focus; + on_got_focus := {$IFDEF FPC}@{$ENDIF}cef_focus_handler_on_got_focus; end; end; diff --git a/source/uCEFFrame.pas b/source/uCEFFrame.pas index 302617dc..77e5838d 100644 --- a/source/uCEFFrame.pas +++ b/source/uCEFFrame.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFFrame; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -52,7 +56,7 @@ uses type TCefFrameRef = class(TCefBaseRefCountedRef, ICefFrame) public - function IsValid: Boolean; + function IsValid: Boolean; procedure Undo; procedure Redo; procedure Cut; @@ -69,14 +73,14 @@ type procedure LoadUrl(const url: ustring); procedure LoadString(const str, url: ustring); procedure ExecuteJavaScript(const code, scriptUrl: ustring; startLine: Integer); - function IsMain: Boolean; - function IsFocused: Boolean; - function GetName: ustring; - function GetIdentifier: Int64; - function GetParent: ICefFrame; - function GetUrl: ustring; - function GetBrowser: ICefBrowser; - function GetV8Context: ICefv8Context; + function IsMain: Boolean; + function IsFocused: Boolean; + function GetName: ustring; + function GetIdentifier: Int64; + function GetParent: ICefFrame; + function GetUrl: ustring; + function GetBrowser: ICefBrowser; + function GetV8Context: ICefv8Context; procedure VisitDom(const visitor: ICefDomVisitor); procedure VisitDomProc(const proc: TCefDomVisitorProc); @@ -108,14 +112,13 @@ begin PCefFrame(FData)^.del(PCefFrame(FData)); end; -procedure TCefFrameRef.ExecuteJavaScript(const code, scriptUrl: ustring; - startLine: Integer); +procedure TCefFrameRef.ExecuteJavaScript(const code, scriptUrl: ustring; startLine: Integer); var - j, s: TCefString; + TempCode, TempURL : TCefString; begin - j := CefString(code); - s := CefString(scriptUrl); - PCefFrame(FData)^.execute_java_script(PCefFrame(FData), @j, @s, startline); + TempCode := CefString(code); + TempURL := CefString(scriptUrl); + PCefFrame(FData)^.execute_java_script(PCefFrame(FData), @TempCode, @TempURL, startline); end; function TCefFrameRef.GetBrowser: ICefBrowser; @@ -185,19 +188,19 @@ end; procedure TCefFrameRef.LoadString(const str, url: ustring); var - s, u: TCefString; + TempString, TempURL : TCefString; begin - s := CefString(str); - u := CefString(url); - PCefFrame(FData)^.load_string(PCefFrame(FData), @s, @u); + TempString := CefString(str); + TempURL := CefString(url); + PCefFrame(FData)^.load_string(PCefFrame(FData), @TempString, @TempURL); end; procedure TCefFrameRef.LoadUrl(const url: ustring); var - u: TCefString; + TempURL : TCefString; begin - u := CefString(url); - PCefFrame(FData)^.load_url(PCefFrame(FData), @u); + TempURL := CefString(url); + PCefFrame(FData)^.load_url(PCefFrame(FData), @TempURL); end; @@ -238,8 +241,9 @@ end; class function TCefFrameRef.UnWrap(data: Pointer): ICefFrame; begin - if data <> nil then - Result := Create(data) as ICefFrame else + if (data <> nil) then + Result := Create(data) as ICefFrame + else Result := nil; end; diff --git a/source/uCEFGetExtensionResourceCallback.pas b/source/uCEFGetExtensionResourceCallback.pas index 31cf0933..09059077 100644 --- a/source/uCEFGetExtensionResourceCallback.pas +++ b/source/uCEFGetExtensionResourceCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFGetExtensionResourceCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -66,12 +70,12 @@ uses procedure TCefGetExtensionResourceCallbackRef.Cont(const stream: ICefStreamReader); begin - PCefGetExtensionResourceCallback(FData).cont(FData, CefGetData(stream)); + PCefGetExtensionResourceCallback(FData)^.cont(FData, CefGetData(stream)); end; procedure TCefGetExtensionResourceCallbackRef.Cancel; begin - PCefGetExtensionResourceCallback(FData).cancel(FData); + PCefGetExtensionResourceCallback(FData)^.cancel(FData); end; class function TCefGetExtensionResourceCallbackRef.UnWrap(data: Pointer): ICefGetExtensionResourceCallback; diff --git a/source/uCEFImage.pas b/source/uCEFImage.pas index c04664e0..0f7d72f4 100644 --- a/source/uCEFImage.pas +++ b/source/uCEFImage.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFImage; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -88,62 +92,62 @@ function TCefImageRef.AddBitmap(scaleFactor : Single; const pixelData : Pointer; pixelDataSize : NativeUInt): Boolean; begin - Result := PCefImage(FData).add_bitmap(FData, scaleFactor, pixelWidth, pixelHeight, colorType, alphaType, pixelData, pixelDataSize) <> 0; + Result := PCefImage(FData)^.add_bitmap(FData, scaleFactor, pixelWidth, pixelHeight, colorType, alphaType, pixelData, pixelDataSize) <> 0; end; function TCefImageRef.AddJpeg(scaleFactor: Single; const jpegData: Pointer; jpegDataSize: NativeUInt): Boolean; begin - Result := PCefImage(FData).add_jpeg(FData, scaleFactor, jpegData, jpegDataSize) <> 0; + Result := PCefImage(FData)^.add_jpeg(FData, scaleFactor, jpegData, jpegDataSize) <> 0; end; function TCefImageRef.AddPng(scaleFactor: Single; const pngData: Pointer; pngDataSize: NativeUInt): Boolean; begin - Result := PCefImage(FData).add_png(FData, scaleFactor, pngData, pngDataSize) <> 0; + Result := PCefImage(FData)^.add_png(FData, scaleFactor, pngData, pngDataSize) <> 0; end; function TCefImageRef.GetAsBitmap(scaleFactor: Single; colorType: TCefColorType; alphaType: TCefAlphaType; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefImage(FData).get_as_bitmap(FData, scaleFactor, colorType, alphaType, pixelWidth, pixelHeight)); + Result := TCefBinaryValueRef.UnWrap(PCefImage(FData)^.get_as_bitmap(FData, scaleFactor, colorType, alphaType, pixelWidth, pixelHeight)); end; function TCefImageRef.GetAsJpeg(scaleFactor: Single; quality: Integer; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefImage(FData).get_as_jpeg(FData, scaleFactor, quality, pixelWidth, pixelHeight)); + Result := TCefBinaryValueRef.UnWrap(PCefImage(FData)^.get_as_jpeg(FData, scaleFactor, quality, pixelWidth, pixelHeight)); end; function TCefImageRef.GetAsPng(scaleFactor: Single; withTransparency: Boolean; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefImage(FData).get_as_png(FData, scaleFactor, Ord(withTransparency), pixelWidth, pixelHeight)); + Result := TCefBinaryValueRef.UnWrap(PCefImage(FData)^.get_as_png(FData, scaleFactor, Ord(withTransparency), pixelWidth, pixelHeight)); end; function TCefImageRef.GetHeight: NativeUInt; begin - Result := PCefImage(FData).get_height(FData); + Result := PCefImage(FData)^.get_height(FData); end; function TCefImageRef.GetRepresentationInfo(scaleFactor: Single; actualScaleFactor: PSingle; pixelWidth, pixelHeight: PInteger): Boolean; begin - Result := PCefImage(FData).get_representation_info(FData, scaleFactor, actualScaleFactor, pixelWidth, pixelHeight) <> 0; + Result := PCefImage(FData)^.get_representation_info(FData, scaleFactor, actualScaleFactor, pixelWidth, pixelHeight) <> 0; end; function TCefImageRef.GetWidth: NativeUInt; begin - Result := PCefImage(FData).get_width(FData); + Result := PCefImage(FData)^.get_width(FData); end; function TCefImageRef.HasRepresentation(scaleFactor: Single): Boolean; begin - Result := PCefImage(FData).has_representation(FData, scaleFactor) <> 0; + Result := PCefImage(FData)^.has_representation(FData, scaleFactor) <> 0; end; function TCefImageRef.IsEmpty: Boolean; begin - Result := PCefImage(FData).is_empty(FData) <> 0; + Result := PCefImage(FData)^.is_empty(FData) <> 0; end; function TCefImageRef.IsSame(const that: ICefImage): Boolean; begin - Result := PCefImage(FData).is_same(FData, CefGetData(that)) <> 0; + Result := PCefImage(FData)^.is_same(FData, CefGetData(that)) <> 0; end; class function TCefImageRef.New: ICefImage; @@ -153,7 +157,7 @@ end; function TCefImageRef.RemoveRepresentation(scaleFactor: Single): Boolean; begin - Result := PCefImage(FData).remove_representation(FData, scaleFactor) <> 0; + Result := PCefImage(FData)^.remove_representation(FData, scaleFactor) <> 0; end; class function TCefImageRef.UnWrap(data: Pointer): ICefImage; diff --git a/source/uCEFInterfaces.pas b/source/uCEFInterfaces.pas index f8fc4255..c4ef381f 100644 --- a/source/uCEFInterfaces.pas +++ b/source/uCEFInterfaces.pas @@ -1,345 +1,364 @@ -// ************************************************************************ -// ***************************** CEF4Delphi ******************************* -// ************************************************************************ -// -// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based -// browser in Delphi applications. -// -// The original license of DCEF3 still applies to CEF4Delphi. -// -// For more information about CEF4Delphi visit : -// https://www.briskbard.com/index.php?lang=en&pageid=cef -// -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. -// -// ************************************************************************ -// ************ vvvv Original license and comments below vvvv ************* -// ************************************************************************ -(* - * Delphi Chromium Embedded 3 - * - * Usage allowed under the restrictions of the Lesser GNU General Public License - * or alternatively the restrictions of the Mozilla Public License 1.1 - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for - * the specific language governing rights and limitations under the License. - * - * Unit owner : Henri Gourvest <hgourvest@gmail.com> - * Web site : http://www.progdigy.com - * Repository : http://code.google.com/p/delphichromiumembedded/ - * Group : http://groups.google.com/group/delphichromiumembedded - * - * Embarcadero Technologies, Inc is not permitted to use or redistribute - * this source code without explicit permission. - * - *) - -unit uCEFInterfaces; - -{$IFNDEF CPUX64} - {$ALIGN ON} - {$MINENUMSIZE 4} -{$ENDIF} - -{$I cef.inc} - -interface - -uses - {$IFDEF DELPHI16_UP} - {$IFDEF MSWINDOWS}WinApi.Windows,{$ENDIF} System.Classes, - {$ELSE} - Windows, Classes, - {$ENDIF} - uCEFTypes, uCEFSchemeRegistrar; - -type - ICefBrowser = interface; - ICefFrame = interface; - ICefRequest = interface; - ICefv8Value = interface; - ICefV8Exception = interface; - ICefV8StackTrace = interface; - ICefDomVisitor = interface; - ICefDomDocument = interface; - ICefDomNode = interface; - ICefv8Context = interface; - ICefListValue = interface; - ICefBinaryValue = interface; - ICefDictionaryValue = interface; - ICefClient = interface; - ICefUrlrequestClient = interface; - ICefBrowserHost = interface; - ICefTask = interface; - ICefTaskRunner = interface; - ICefFileDialogCallback = interface; - ICefPrintHandler = interface; - ICefPrintDialogCallback = interface; - ICefPrintJobCallback = interface; - ICefRequestContext = interface; - ICefAccessibilityHandler = interface; - ICefDragData = interface; - ICefNavigationEntry = interface; - ICefSslInfo = interface; - ICefSSLStatus = interface; - ICefImage = interface; - IChromiumEvents = interface; - ICefThread = interface; - ICefWaitableEvent = interface; - ICefX509CertPrincipal = interface; - ICefX509Certificate = interface; - ICefSelectClientCertificateCallback = interface; - ICefCommandLine = interface; - ICefRequestHandler = interface; - ICefResourceBundleHandler = interface; - ICefBrowserProcessHandler = interface; - ICefRenderProcessHandler = interface; - ICefProcessMessage = interface; - ICefLifeSpanHandler = interface; - ICefGetExtensionResourceCallback = interface; - ICefExtensionHandler = interface; - ICefExtension = interface; - ICefStreamReader = interface; - ICefLoadHandler = interface; - ICefServer = interface; - ICefServerHandler = interface; - ICefContextMenuParams = interface; - ICefMenuModel = interface; - ICefRunContextMenuCallback = interface; - ICefDownloadItem = interface; - ICefBeforeDownloadCallback = interface; - ICefJsDialogCallback = interface; - ICefDownloadItemCallback = interface; - ICefRequestCallback = interface; - ICefResourceHandler = interface; - ICefResponse = interface; - ICefResponseFilter = interface; - ICefAuthCallback = interface; - ICefCallback = interface; - ICefDragHandler = interface; - ICefFindHandler = interface; - - TCefv8ValueArray = array of ICefv8Value; - TCefX509CertificateArray = array of ICefX509Certificate; - TCefBinaryValueArray = array of ICefBinaryValue; - TCefFrameIdentifierArray = array of int64; - - - - // ******************************************* - // ***************** Events ****************** - // ******************************************* - - - TOnRegisterCustomSchemes = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const registrar: TCefSchemeRegistrarRef) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnRenderThreadCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const extraInfo: ICefListValue) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnWebKitInitializedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure() {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnBrowserCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnBrowserDestroyedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnContextCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnContextReleasedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnUncaughtExceptionEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context; const exception: ICefV8Exception; const stackTrace: ICefV8StackTrace) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnFocusedNodeChangedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnProcessMessageReceivedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage; var aHandled : boolean) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnContextInitializedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure() {$IFNDEF DELPHI12_UP}of object{$ENDIF}; +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest <hgourvest@gmail.com> + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + +unit uCEFInterfaces; + +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + +{$IFNDEF CPUX64} + {$ALIGN ON} + {$MINENUMSIZE 4} +{$ENDIF} + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + {$IFDEF MSWINDOWS}WinApi.Windows,{$ENDIF} System.Classes, + {$ELSE} + Windows, Classes, + {$ENDIF} + uCEFTypes, uCEFSchemeRegistrar; + +type + ICefBrowser = interface; + ICefFrame = interface; + ICefRequest = interface; + ICefv8Value = interface; + ICefV8Exception = interface; + ICefV8StackTrace = interface; + ICefDomVisitor = interface; + ICefDomDocument = interface; + ICefDomNode = interface; + ICefv8Context = interface; + ICefListValue = interface; + ICefBinaryValue = interface; + ICefDictionaryValue = interface; + ICefClient = interface; + ICefUrlrequestClient = interface; + ICefBrowserHost = interface; + ICefTask = interface; + ICefTaskRunner = interface; + ICefFileDialogCallback = interface; + ICefPrintHandler = interface; + ICefPrintDialogCallback = interface; + ICefPrintJobCallback = interface; + ICefRequestContext = interface; + ICefAccessibilityHandler = interface; + ICefDragData = interface; + ICefNavigationEntry = interface; + ICefSslInfo = interface; + ICefSSLStatus = interface; + ICefImage = interface; + IChromiumEvents = interface; + ICefThread = interface; + ICefWaitableEvent = interface; + ICefX509CertPrincipal = interface; + ICefX509Certificate = interface; + ICefSelectClientCertificateCallback = interface; + ICefCommandLine = interface; + ICefRequestHandler = interface; + ICefResourceBundleHandler = interface; + ICefBrowserProcessHandler = interface; + ICefRenderProcessHandler = interface; + ICefProcessMessage = interface; + ICefLifeSpanHandler = interface; + ICefGetExtensionResourceCallback = interface; + ICefExtensionHandler = interface; + ICefExtension = interface; + ICefStreamReader = interface; + ICefLoadHandler = interface; + ICefServer = interface; + ICefServerHandler = interface; + ICefContextMenuParams = interface; + ICefMenuModel = interface; + ICefRunContextMenuCallback = interface; + ICefDownloadItem = interface; + ICefBeforeDownloadCallback = interface; + ICefJsDialogCallback = interface; + ICefDownloadItemCallback = interface; + ICefRequestCallback = interface; + ICefResourceHandler = interface; + ICefResponse = interface; + ICefResponseFilter = interface; + ICefAuthCallback = interface; + ICefCallback = interface; + ICefDragHandler = interface; + ICefFindHandler = interface; + ICefCookieManager = interface; + ICefWebPluginInfo = interface; + + TCefv8ValueArray = array of ICefv8Value; + TCefX509CertificateArray = array of ICefX509Certificate; + TCefBinaryValueArray = array of ICefBinaryValue; + TCefFrameIdentifierArray = array of int64; + + + + // ******************************************* + // ***************** Events ****************** + // ******************************************* + + + TOnRegisterCustomSchemesEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const registrar: TCefSchemeRegistrarRef) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnRenderThreadCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const extraInfo: ICefListValue) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnWebKitInitializedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure() {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnBrowserCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnBrowserDestroyedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnContextCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnContextReleasedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnUncaughtExceptionEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context; const exception: ICefV8Exception; const stackTrace: ICefV8StackTrace) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnFocusedNodeChangedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnProcessMessageReceivedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage; var aHandled : boolean) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnContextInitializedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure() {$IFNDEF DELPHI12_UP}of object{$ENDIF}; TOnBeforeChildProcessLaunchEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const commandLine: ICefCommandLine) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; TOnRenderProcessThreadCreatedEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const extraInfo: ICefListValue) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnScheduleMessagePumpWorkEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const delayMs: Int64) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnGetDataResourceEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(resourceId: Integer; out data: Pointer; out dataSize: NativeUInt; var aResult : Boolean) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnScheduleMessagePumpWorkEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const delayMs: Int64) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + TOnGetDataResourceEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(resourceId: Integer; out data: Pointer; out dataSize: NativeUInt; var aResult : Boolean) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; TOnGetLocalizedStringEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(stringId: Integer; out stringVal: ustring; var aResult : Boolean) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; TOnGetDataResourceForScaleEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(resourceId: Integer; scaleFactor: TCefScaleFactor; out data: Pointer; out dataSize: NativeUInt; var aResult : Boolean) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - TOnCDMRegistrationCompleteEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result : TCefCDMRegistrationError; const error_message : ustring) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; - - - // ******************************************* - // **** Callback procedures and functions **** - // ******************************************* - - - TOnPdfPrintFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const path: ustring; ok: Boolean); - TCefDomVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const document: ICefDomDocument); - TCefDomVisitorProc2 = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser : ICefBrowser; const document: ICefDomDocument); - TCefStringVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const str: ustring); - TCefRunFileDialogCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(selectedAcceptFilter: Integer; const filePaths: TStrings); - TCefCompletionCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure; - TCefSetCookieCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(success: Boolean); - TCefDeleteCookiesCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(numDeleted: Integer); - TCefNavigationEntryVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer): Boolean; - TOnDownloadImageFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage); - TCefCookieVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; - - - - // ******************************************* + TOnCDMRegistrationCompleteEvent = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result : TCefCDMRegistrationError; const error_message : ustring) {$IFNDEF DELPHI12_UP}of object{$ENDIF}; + + + // ******************************************* + // **** Callback procedures and functions **** + // ******************************************* + + + TCefEndTracingCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const tracingFile: ustring); + TCefRegisterCDMProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result: TCefCDMRegistrationError; const error_message: ustring); + TCefRequestContextHandlerProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function: ICefCookieManager; + TCefFastTaskProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(); + TCefv8ArrayBufferReleaseCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(buffer : Pointer); + TCefWebPluginInfoVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const info: ICefWebPluginInfo; count, total: Integer): Boolean; + TCefWebPluginIsUnstableProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const path: ustring; unstable: Boolean); + TCefV8AccessorGetterProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj: ICefv8Value; out value: ICefv8Value; const exception: ustring): Boolean; + TCefV8AccessorSetterProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj, value: ICefv8Value; const exception: ustring): Boolean; + TCefV8InterceptorGetterByNameProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj: ICefv8Value; out value: ICefv8Value; const exception: ustring): Boolean; + TCefV8InterceptorSetterByNameProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj, value: ICefv8Value; const exception: ustring): Boolean; + TCefV8InterceptorGetterByIndexProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(index: integer; const obj: ICefv8Value; out value: ICefv8Value; const exception: ustring): Boolean; + TCefV8InterceptorSetterByIndexProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(index: integer; const obj, value: ICefv8Value; const exception: ustring): Boolean; + TOnPdfPrintFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const path: ustring; ok: Boolean); + TCefDomVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const document: ICefDomDocument); + TCefDomVisitorProc2 = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const browser : ICefBrowser; const document: ICefDomDocument); + TCefStringVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const str: ustring); + TCefRunFileDialogCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(selectedAcceptFilter: Integer; const filePaths: TStrings); + TCefCompletionCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(); + TCefSetCookieCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(success: Boolean); + TCefDeleteCookiesCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(numDeleted: Integer); + TCefNavigationEntryVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer): Boolean; + TOnDownloadImageFinishedProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage); + TCefCookieVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; + + + + // ******************************************* // ************ Custom interfaces ************ - // ******************************************* - - - ICefStringList = interface - ['{DB24F301-2F64-48D6-A72E-33697748147E}'] - function GetHandle: TCefStringList; - function GetSize: NativeUInt; - function GetValue(Index: NativeUInt): ustring; - procedure Append(const Value: ustring); - procedure Clear; - function Copy : TCefStringList; - procedure CopyToStrings(const aStrings : TStrings); - procedure AddStrings(const aStrings : TStrings); - - property Handle : TCefStringList read GetHandle; - property Size : NativeUInt read GetSize; - property Value[index: NativeUInt] : ustring read GetValue; - end; - - ICefStringMap = interface - ['{A33EBC01-B23A-4918-86A4-E24A243B342F}'] - function GetHandle: TCefStringMap; - function GetSize: NativeUInt; - function Find(const Key: ustring): ustring; - function GetKey(Index: NativeUInt): ustring; - function GetValue(Index: NativeUInt): ustring; - function Append(const Key, Value: ustring) : boolean; - procedure Clear; - - property Handle : TCefStringMap read GetHandle; - property Size : NativeUInt read GetSize; - property Key[index: NativeUInt] : ustring read GetKey; - property Value[index: NativeUInt] : ustring read GetValue; - end; - - ICefStringMultimap = interface - ['{583ED0C2-A9D6-4034-A7C9-20EC7E47F0C7}'] - function GetHandle: TCefStringMultimap; - function GetSize: NativeUInt; - function FindCount(const Key: ustring): NativeUInt; - function GetEnumerate(const Key: ustring; ValueIndex: NativeUInt): ustring; - function GetKey(Index: NativeUInt): ustring; - function GetValue(Index: NativeUInt): ustring; - function Append(const Key, Value: ustring) : boolean; - procedure Clear; - - property Handle : TCefStringMultimap read GetHandle; - property Size : NativeUInt read GetSize; - property Key[index: NativeUInt] : ustring read GetKey; - property Value[index: NativeUInt] : ustring read GetValue; - property Enumerate[const Key: ustring; ValueIndex: NativeUInt] : ustring read GetEnumerate; - end; - - IChromiumEvents = interface - ['{0C139DB1-0349-4D7F-8155-76FEA6A0126D}'] - procedure GetSettings(var settings: TCefBrowserSettings); - - // ICefClient - function doOnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage): Boolean; - - // ICefLoadHandler - procedure doOnLoadingStateChange(const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); - procedure doOnLoadStart(const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType); - procedure doOnLoadEnd(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); - procedure doOnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring); - - // ICefFocusHandler - procedure doOnTakeFocus(const browser: ICefBrowser; next: Boolean); - function doOnSetFocus(const browser: ICefBrowser; source: TCefFocusSource): Boolean; - procedure doOnGotFocus(const browser: ICefBrowser); - - // ICefContextMenuHandler - procedure doOnBeforeContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); - function doRunContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel; const callback: ICefRunContextMenuCallback): Boolean; - function doOnContextMenuCommand(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: TCefEventFlags): Boolean; - procedure doOnContextMenuDismissed(const browser: ICefBrowser; const frame: ICefFrame); - - // ICefKeyboardHandler - function doOnPreKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: Boolean): Boolean; - function doOnKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle): Boolean; - - // ICefDisplayHandler - procedure doOnAddressChange(const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); - procedure doOnTitleChange(const browser: ICefBrowser; const title: ustring); - procedure doOnFaviconUrlChange(const browser: ICefBrowser; const iconUrls: TStrings); - procedure doOnFullScreenModeChange(const browser: ICefBrowser; fullscreen: Boolean); - function doOnTooltip(const browser: ICefBrowser; var text: ustring): Boolean; - procedure doOnStatusMessage(const browser: ICefBrowser; const value: ustring); - function doOnConsoleMessage(const browser: ICefBrowser; level: TCefLogSeverity; const message, source: ustring; line: Integer): Boolean; - function doOnAutoResize(const browser: ICefBrowser; const new_size: PCefSize): Boolean; - procedure doOnLoadingProgressChange(const browser: ICefBrowser; const progress: double); - - // ICefDownloadHandler - procedure doOnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); - procedure doOnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); - - // ICefJsDialogHandler - function doOnJsdialog(const browser: ICefBrowser; const originUrl: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; const callback: ICefJsDialogCallback; out suppressMessage: Boolean): Boolean; - function doOnBeforeUnloadDialog(const browser: ICefBrowser; const messageText: ustring; isReload: Boolean; const callback: ICefJsDialogCallback): Boolean; - procedure doOnResetDialogState(const browser: ICefBrowser); - procedure doOnDialogClosed(const browser: ICefBrowser); - - // ICefLifeSpanHandler - function doOnBeforePopup(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean): Boolean; - procedure doOnAfterCreated(const browser: ICefBrowser); - procedure doOnBeforeClose(const browser: ICefBrowser); - function doOnClose(const browser: ICefBrowser): Boolean; - - // ICefRequestHandler - function doOnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; - function doOnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; - function doOnBeforeResourceLoad(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const callback: ICefRequestCallback): TCefReturnValue; - function doOnGetResourceHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): ICefResourceHandler; - procedure doOnResourceRedirect(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; var newUrl: ustring); - function doOnResourceResponse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): Boolean; - function doOnGetResourceResponseFilter(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): ICefResponseFilter; - procedure doOnResourceLoadComplete(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; status: TCefUrlRequestStatus; receivedContentLength: Int64); - function doOnGetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; - function doCanGetCookies(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): boolean; - function doCanSetCookie(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const cookie : PCefCookie): boolean; - function doOnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; - procedure doOnProtocolExecution(const browser: ICefBrowser; const url: ustring; out allowOsExecution: Boolean); - function doOnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; - function doOnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; - procedure doOnPluginCrashed(const browser: ICefBrowser; const pluginPath: ustring); - procedure doOnRenderViewReady(const browser: ICefBrowser); - procedure doOnRenderProcessTerminated(const browser: ICefBrowser; status: TCefTerminationStatus); - - // ICefDialogHandler - function doOnFileDialog(const browser: ICefBrowser; mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefFileDialogCallback): Boolean; - - // ICefRenderHandler - procedure doOnGetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); - function doOnGetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; - function doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; - function doOnGetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; - function doOnGetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; - procedure doOnPopupShow(const browser: ICefBrowser; show: Boolean); - procedure doOnPopupSize(const browser: ICefBrowser; const rect: PCefRect); - procedure doOnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); - procedure doOnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - function doOnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; - procedure doOnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); - procedure doOnScrollOffsetChanged(const browser: ICefBrowser; x, y: Double); - procedure doOnIMECompositionRangeChanged(const browser: ICefBrowser; const selected_range: PCefRange; character_boundsCount: NativeUInt; const character_bounds: PCefRect); - procedure doOnTextSelectionChanged(const browser: ICefBrowser; const selected_text: ustring; const selected_range: PCefRange); - - // ICefDragHandler - function doOnDragEnter(const browser: ICefBrowser; const dragData: ICefDragData; mask: TCefDragOperations): Boolean; - procedure doOnDraggableRegionsChanged(const browser: ICefBrowser; regionsCount: NativeUInt; regions: PCefDraggableRegionArray); - - // ICefFindHandler - procedure doOnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean); - - // Custom - procedure doCookiesDeleted(numDeleted : integer); - procedure doPdfPrintFinished(aResultOK : boolean); - procedure doTextResultAvailable(const aText : string); - procedure doUpdatePreferences(const aBrowser: ICefBrowser); - procedure doUpdateOwnPreferences; - function doSavePreferences : boolean; - procedure doResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings); - end; - - IServerEvents = interface - ['{06A1B3C6-0967-4F6C-A751-8AA3A29E2FF5}'] - procedure doOnServerCreated(const server: ICefServer); + // ******************************************* + + + ICefStringList = interface + ['{DB24F301-2F64-48D6-A72E-33697748147E}'] + function GetHandle: TCefStringList; + function GetSize: NativeUInt; + function GetValue(Index: NativeUInt): ustring; + procedure Append(const Value: ustring); + procedure Clear; + function Copy : TCefStringList; + procedure CopyToStrings(const aStrings : TStrings); + procedure AddStrings(const aStrings : TStrings); + + property Handle : TCefStringList read GetHandle; + property Size : NativeUInt read GetSize; + property Value[index: NativeUInt] : ustring read GetValue; + end; + + ICefStringMap = interface + ['{A33EBC01-B23A-4918-86A4-E24A243B342F}'] + function GetHandle: TCefStringMap; + function GetSize: NativeUInt; + function Find(const Key: ustring): ustring; + function GetKey(Index: NativeUInt): ustring; + function GetValue(Index: NativeUInt): ustring; + function Append(const Key, Value: ustring) : boolean; + procedure Clear; + + property Handle : TCefStringMap read GetHandle; + property Size : NativeUInt read GetSize; + property Key[index: NativeUInt] : ustring read GetKey; + property Value[index: NativeUInt] : ustring read GetValue; + end; + + ICefStringMultimap = interface + ['{583ED0C2-A9D6-4034-A7C9-20EC7E47F0C7}'] + function GetHandle: TCefStringMultimap; + function GetSize: NativeUInt; + function FindCount(const Key: ustring): NativeUInt; + function GetEnumerate(const Key: ustring; ValueIndex: NativeUInt): ustring; + function GetKey(Index: NativeUInt): ustring; + function GetValue(Index: NativeUInt): ustring; + function Append(const Key, Value: ustring) : boolean; + procedure Clear; + + property Handle : TCefStringMultimap read GetHandle; + property Size : NativeUInt read GetSize; + property Key[index: NativeUInt] : ustring read GetKey; + property Value[index: NativeUInt] : ustring read GetValue; + property Enumerate[const aKey: ustring; aValueIndex: NativeUInt] : ustring read GetEnumerate; + end; + + IChromiumEvents = interface + ['{0C139DB1-0349-4D7F-8155-76FEA6A0126D}'] + procedure GetSettings(var settings: TCefBrowserSettings); + + // ICefClient + function doOnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage): Boolean; + + // ICefLoadHandler + procedure doOnLoadingStateChange(const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); + procedure doOnLoadStart(const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType); + procedure doOnLoadEnd(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); + procedure doOnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring); + + // ICefFocusHandler + procedure doOnTakeFocus(const browser: ICefBrowser; next: Boolean); + function doOnSetFocus(const browser: ICefBrowser; source: TCefFocusSource): Boolean; + procedure doOnGotFocus(const browser: ICefBrowser); + + // ICefContextMenuHandler + procedure doOnBeforeContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); + function doRunContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel; const callback: ICefRunContextMenuCallback): Boolean; + function doOnContextMenuCommand(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: TCefEventFlags): Boolean; + procedure doOnContextMenuDismissed(const browser: ICefBrowser; const frame: ICefFrame); + + // ICefKeyboardHandler + function doOnPreKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: Boolean): Boolean; + function doOnKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle): Boolean; + + // ICefDisplayHandler + procedure doOnAddressChange(const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); + procedure doOnTitleChange(const browser: ICefBrowser; const title: ustring); + procedure doOnFaviconUrlChange(const browser: ICefBrowser; const iconUrls: TStrings); + procedure doOnFullScreenModeChange(const browser: ICefBrowser; fullscreen: Boolean); + function doOnTooltip(const browser: ICefBrowser; var text: ustring): Boolean; + procedure doOnStatusMessage(const browser: ICefBrowser; const value: ustring); + function doOnConsoleMessage(const browser: ICefBrowser; level: TCefLogSeverity; const message, source: ustring; line: Integer): Boolean; + function doOnAutoResize(const browser: ICefBrowser; const new_size: PCefSize): Boolean; + procedure doOnLoadingProgressChange(const browser: ICefBrowser; const progress: double); + + // ICefDownloadHandler + procedure doOnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); + procedure doOnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); + + // ICefJsDialogHandler + function doOnJsdialog(const browser: ICefBrowser; const originUrl: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; const callback: ICefJsDialogCallback; out suppressMessage: Boolean): Boolean; + function doOnBeforeUnloadDialog(const browser: ICefBrowser; const messageText: ustring; isReload: Boolean; const callback: ICefJsDialogCallback): Boolean; + procedure doOnResetDialogState(const browser: ICefBrowser); + procedure doOnDialogClosed(const browser: ICefBrowser); + + // ICefLifeSpanHandler + function doOnBeforePopup(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean): Boolean; + procedure doOnAfterCreated(const browser: ICefBrowser); + procedure doOnBeforeClose(const browser: ICefBrowser); + function doOnClose(const browser: ICefBrowser): Boolean; + + // ICefRequestHandler + function doOnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; + function doOnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; + function doOnBeforeResourceLoad(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const callback: ICefRequestCallback): TCefReturnValue; + function doOnGetResourceHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): ICefResourceHandler; + procedure doOnResourceRedirect(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; var newUrl: ustring); + function doOnResourceResponse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): Boolean; + function doOnGetResourceResponseFilter(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): ICefResponseFilter; + procedure doOnResourceLoadComplete(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; status: TCefUrlRequestStatus; receivedContentLength: Int64); + function doOnGetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; + function doCanGetCookies(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): boolean; + function doCanSetCookie(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const cookie : PCefCookie): boolean; + function doOnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; + procedure doOnProtocolExecution(const browser: ICefBrowser; const url: ustring; out allowOsExecution: Boolean); + function doOnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; + function doOnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; + procedure doOnPluginCrashed(const browser: ICefBrowser; const pluginPath: ustring); + procedure doOnRenderViewReady(const browser: ICefBrowser); + procedure doOnRenderProcessTerminated(const browser: ICefBrowser; status: TCefTerminationStatus); + + // ICefDialogHandler + function doOnFileDialog(const browser: ICefBrowser; mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefFileDialogCallback): Boolean; + + // ICefRenderHandler + procedure doOnGetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); + function doOnGetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; + function doOnGetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; + function doOnGetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; + function doOnGetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; + procedure doOnPopupShow(const browser: ICefBrowser; show: Boolean); + procedure doOnPopupSize(const browser: ICefBrowser; const rect: PCefRect); + procedure doOnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); + procedure doOnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); + function doOnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; + procedure doOnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); + procedure doOnScrollOffsetChanged(const browser: ICefBrowser; x, y: Double); + procedure doOnIMECompositionRangeChanged(const browser: ICefBrowser; const selected_range: PCefRange; character_boundsCount: NativeUInt; const character_bounds: PCefRect); + procedure doOnTextSelectionChanged(const browser: ICefBrowser; const selected_text: ustring; const selected_range: PCefRange); + + // ICefDragHandler + function doOnDragEnter(const browser: ICefBrowser; const dragData: ICefDragData; mask: TCefDragOperations): Boolean; + procedure doOnDraggableRegionsChanged(const browser: ICefBrowser; regionsCount: NativeUInt; regions: PCefDraggableRegionArray); + + // ICefFindHandler + procedure doOnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean); + + // Custom + procedure doCookiesDeleted(numDeleted : integer); + procedure doPdfPrintFinished(aResultOK : boolean); + procedure doTextResultAvailable(const aText : ustring); + procedure doUpdatePreferences(const aBrowser: ICefBrowser); + procedure doUpdateOwnPreferences; + function doSavePreferences : boolean; + procedure doResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings); + end; + + IServerEvents = interface + ['{06A1B3C6-0967-4F6C-A751-8AA3A29E2FF5}'] + procedure doOnServerCreated(const server: ICefServer); procedure doOnServerDestroyed(const server: ICefServer); procedure doOnClientConnected(const server: ICefServer; connection_id: Integer); procedure doOnClientDisconnected(const server: ICefServer; connection_id: Integer); @@ -347,1740 +366,1740 @@ type procedure doOnWebSocketRequest(const server: ICefServer; connection_id: Integer; const client_address: ustring; const request: ICefRequest; const callback: ICefCallback); procedure doOnWebSocketConnected(const server: ICefServer; connection_id: Integer); procedure doOnWebSocketMessage(const server: ICefServer; connection_id: Integer; const data: Pointer; data_size: NativeUInt); - end; - - - - // ******************************************* + end; + + + + // ******************************************* // ************** CEF interfaces ************* - // ******************************************* - - - // TCefBaseRefCounted - // /include/capi/cef_base_capi.h (cef_base_ref_counted_t) - ICefBaseRefCounted = interface - ['{1F9A7B44-DCDC-4477-9180-3ADD44BDEB7B}'] - function Wrap: Pointer; - function SameAs(aData : Pointer) : boolean; - end; - - // TCefRunFileDialogCallback - // /include/capi/cef_browser_capi.h (cef_run_file_dialog_callback_t) - ICefRunFileDialogCallback = interface(ICefBaseRefCounted) - ['{59FCECC6-E897-45BA-873B-F09586C4BE47}'] - procedure OnFileDialogDismissed(selectedAcceptFilter: Integer; const filePaths: TStrings); - end; - - // TCefNavigationEntryVisitor - // /include/capi/cef_browser_capi.h (cef_navigation_entry_visitor_t) - ICefNavigationEntryVisitor = interface(ICefBaseRefCounted) - ['{CC4D6BC9-0168-4C2C-98BA-45E9AA9CD619}'] - function Visit(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer): Boolean; - end; - - // TCefPdfPrintCallback - // /include/capi/cef_browser_capi.h (cef_pdf_print_callback_t) - ICefPdfPrintCallback = interface(ICefBaseRefCounted) - ['{F1CC58E9-2C30-4932-91AE-467C8D8EFB8E}'] - procedure OnPdfPrintFinished(const path: ustring; ok: Boolean); - end; - - // TCefDownloadImageCallback - // /include/capi/cef_browser_capi.h (cef_download_image_callback_t) - ICefDownloadImageCallback = interface(ICefBaseRefCounted) - ['{0C6E9032-27DF-4584-95C6-DC3C7CB63727}'] - procedure OnDownloadImageFinished(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage); - end; - - // TCefBrowserHost - // /include/capi/cef_browser_capi.h (cef_browser_host_t) - ICefBrowserHost = interface(ICefBaseRefCounted) - ['{53AE02FF-EF5D-48C3-A43E-069DA9535424}'] - function GetBrowser: ICefBrowser; - procedure CloseBrowser(forceClose: Boolean); - function TryCloseBrowser: Boolean; - procedure SetFocus(focus: Boolean); - function GetWindowHandle: TCefWindowHandle; - function GetOpenerWindowHandle: TCefWindowHandle; - function HasView: Boolean; - function GetRequestContext: ICefRequestContext; - function GetZoomLevel: Double; - procedure SetZoomLevel(const zoomLevel: Double); - procedure RunFileDialog(mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefRunFileDialogCallback); - procedure RunFileDialogProc(mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: TCefRunFileDialogCallbackProc); - procedure StartDownload(const url: ustring); - procedure DownloadImage(const imageUrl: ustring; isFavicon: Boolean; maxImageSize: cardinal; bypassCache: Boolean; const callback: ICefDownloadImageCallback); - procedure Print; - procedure PrintToPdf(const path: ustring; settings: PCefPdfPrintSettings; const callback: ICefPdfPrintCallback); - procedure PrintToPdfProc(const path: ustring; settings: PCefPdfPrintSettings; const callback: TOnPdfPrintFinishedProc); - procedure Find(identifier: Integer; const searchText: ustring; forward, matchCase, findNext: Boolean); - procedure StopFinding(clearSelection: Boolean); - procedure ShowDevTools(const windowInfo: PCefWindowInfo; const client: ICefClient; const settings: PCefBrowserSettings; inspectElementAt: PCefPoint); - procedure CloseDevTools; - function HasDevTools: Boolean; - procedure GetNavigationEntries(const visitor: ICefNavigationEntryVisitor; currentOnly: Boolean); - procedure GetNavigationEntriesProc(const proc: TCefNavigationEntryVisitorProc; currentOnly: Boolean); - procedure SetMouseCursorChangeDisabled(disabled: Boolean); - function IsMouseCursorChangeDisabled: Boolean; - procedure ReplaceMisspelling(const word: ustring); - procedure AddWordToDictionary(const word: ustring); - function IsWindowRenderingDisabled: Boolean; - procedure WasResized; - procedure WasHidden(hidden: Boolean); - procedure NotifyScreenInfoChanged; - procedure Invalidate(kind: TCefPaintElementType); - procedure SendKeyEvent(const event: PCefKeyEvent); - procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); - procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); - procedure SendMouseWheelEvent(const event: PCefMouseEvent; deltaX, deltaY: Integer); - procedure SendFocusEvent(setFocus: Boolean); - procedure SendCaptureLostEvent; - procedure NotifyMoveOrResizeStarted; - function GetWindowlessFrameRate : Integer; - procedure SetWindowlessFrameRate(frameRate: Integer); - procedure IMESetComposition(const text: ustring; underlinesCount : NativeUInt; const underlines : PCefCompositionUnderline; const replacement_range, selection_range : PCefRange); - procedure IMECommitText(const text: ustring; const replacement_range : PCefRange; relative_cursor_pos : integer); - procedure IMEFinishComposingText(keep_selection : boolean); - procedure IMECancelComposition; - procedure DragTargetDragEnter(const dragData: ICefDragData; const event: PCefMouseEvent; allowedOps: TCefDragOperations); - procedure DragTargetDragOver(const event: PCefMouseEvent; allowedOps: TCefDragOperations); - procedure DragTargetDragLeave; - procedure DragTargetDrop(event: PCefMouseEvent); - procedure DragSourceEndedAt(x, y: Integer; op: TCefDragOperation); - procedure DragSourceSystemDragEnded; - function GetVisibleNavigationEntry : ICefNavigationEntry; - procedure SetAccessibilityState(accessibilityState: TCefState); - procedure SetAutoResizeEnabled(enabled: boolean; const min_size, max_size: PCefSize); + // ******************************************* + + + // TCefBaseRefCounted + // /include/capi/cef_base_capi.h (cef_base_ref_counted_t) + ICefBaseRefCounted = interface + ['{1F9A7B44-DCDC-4477-9180-3ADD44BDEB7B}'] + function Wrap: Pointer; + function SameAs(aData : Pointer) : boolean; + end; + + // TCefRunFileDialogCallback + // /include/capi/cef_browser_capi.h (cef_run_file_dialog_callback_t) + ICefRunFileDialogCallback = interface(ICefBaseRefCounted) + ['{59FCECC6-E897-45BA-873B-F09586C4BE47}'] + procedure OnFileDialogDismissed(selectedAcceptFilter: Integer; const filePaths: TStrings); + end; + + // TCefNavigationEntryVisitor + // /include/capi/cef_browser_capi.h (cef_navigation_entry_visitor_t) + ICefNavigationEntryVisitor = interface(ICefBaseRefCounted) + ['{CC4D6BC9-0168-4C2C-98BA-45E9AA9CD619}'] + function Visit(const entry: ICefNavigationEntry; current: Boolean; index, total: Integer): Boolean; + end; + + // TCefPdfPrintCallback + // /include/capi/cef_browser_capi.h (cef_pdf_print_callback_t) + ICefPdfPrintCallback = interface(ICefBaseRefCounted) + ['{F1CC58E9-2C30-4932-91AE-467C8D8EFB8E}'] + procedure OnPdfPrintFinished(const path: ustring; ok: Boolean); + end; + + // TCefDownloadImageCallback + // /include/capi/cef_browser_capi.h (cef_download_image_callback_t) + ICefDownloadImageCallback = interface(ICefBaseRefCounted) + ['{0C6E9032-27DF-4584-95C6-DC3C7CB63727}'] + procedure OnDownloadImageFinished(const imageUrl: ustring; httpStatusCode: Integer; const image: ICefImage); + end; + + // TCefBrowserHost + // /include/capi/cef_browser_capi.h (cef_browser_host_t) + ICefBrowserHost = interface(ICefBaseRefCounted) + ['{53AE02FF-EF5D-48C3-A43E-069DA9535424}'] + function GetBrowser: ICefBrowser; + procedure CloseBrowser(forceClose: Boolean); + function TryCloseBrowser: Boolean; + procedure SetFocus(focus: Boolean); + function GetWindowHandle: TCefWindowHandle; + function GetOpenerWindowHandle: TCefWindowHandle; + function HasView: Boolean; + function GetRequestContext: ICefRequestContext; + function GetZoomLevel: Double; + procedure SetZoomLevel(const zoomLevel: Double); + procedure RunFileDialog(mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefRunFileDialogCallback); + procedure RunFileDialogProc(mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: TCefRunFileDialogCallbackProc); + procedure StartDownload(const url: ustring); + procedure DownloadImage(const imageUrl: ustring; isFavicon: Boolean; maxImageSize: cardinal; bypassCache: Boolean; const callback: ICefDownloadImageCallback); + procedure Print; + procedure PrintToPdf(const path: ustring; settings: PCefPdfPrintSettings; const callback: ICefPdfPrintCallback); + procedure PrintToPdfProc(const path: ustring; settings: PCefPdfPrintSettings; const callback: TOnPdfPrintFinishedProc); + procedure Find(identifier: Integer; const searchText: ustring; forward, matchCase, findNext: Boolean); + procedure StopFinding(clearSelection: Boolean); + procedure ShowDevTools(const windowInfo: PCefWindowInfo; const client: ICefClient; const settings: PCefBrowserSettings; inspectElementAt: PCefPoint); + procedure CloseDevTools; + function HasDevTools: Boolean; + procedure GetNavigationEntries(const visitor: ICefNavigationEntryVisitor; currentOnly: Boolean); + procedure GetNavigationEntriesProc(const proc: TCefNavigationEntryVisitorProc; currentOnly: Boolean); + procedure SetMouseCursorChangeDisabled(disabled: Boolean); + function IsMouseCursorChangeDisabled: Boolean; + procedure ReplaceMisspelling(const word: ustring); + procedure AddWordToDictionary(const word: ustring); + function IsWindowRenderingDisabled: Boolean; + procedure WasResized; + procedure WasHidden(hidden: Boolean); + procedure NotifyScreenInfoChanged; + procedure Invalidate(kind: TCefPaintElementType); + procedure SendKeyEvent(const event: PCefKeyEvent); + procedure SendMouseClickEvent(const event: PCefMouseEvent; kind: TCefMouseButtonType; mouseUp: Boolean; clickCount: Integer); + procedure SendMouseMoveEvent(const event: PCefMouseEvent; mouseLeave: Boolean); + procedure SendMouseWheelEvent(const event: PCefMouseEvent; deltaX, deltaY: Integer); + procedure SendFocusEvent(aSetFocus: Boolean); + procedure SendCaptureLostEvent; + procedure NotifyMoveOrResizeStarted; + function GetWindowlessFrameRate : Integer; + procedure SetWindowlessFrameRate(frameRate: Integer); + procedure IMESetComposition(const text: ustring; underlinesCount : NativeUInt; const underlines : PCefCompositionUnderline; const replacement_range, selection_range : PCefRange); + procedure IMECommitText(const text: ustring; const replacement_range : PCefRange; relative_cursor_pos : integer); + procedure IMEFinishComposingText(keep_selection : boolean); + procedure IMECancelComposition; + procedure DragTargetDragEnter(const dragData: ICefDragData; const event: PCefMouseEvent; allowedOps: TCefDragOperations); + procedure DragTargetDragOver(const event: PCefMouseEvent; allowedOps: TCefDragOperations); + procedure DragTargetDragLeave; + procedure DragTargetDrop(event: PCefMouseEvent); + procedure DragSourceEndedAt(x, y: Integer; op: TCefDragOperation); + procedure DragSourceSystemDragEnded; + function GetVisibleNavigationEntry : ICefNavigationEntry; + procedure SetAccessibilityState(accessibilityState: TCefState); + procedure SetAutoResizeEnabled(enabled: boolean; const min_size, max_size: PCefSize); function GetExtension : ICefExtension; - function IsBackgroundHost : boolean; - - property Browser : ICefBrowser read GetBrowser; - property WindowHandle : TCefWindowHandle read GetWindowHandle; - property OpenerWindowHandle : TCefWindowHandle read GetOpenerWindowHandle; - property ZoomLevel : Double read GetZoomLevel write SetZoomLevel; - property RequestContext : ICefRequestContext read GetRequestContext; - property VisibleNavigationEntry : ICefNavigationEntry read GetVisibleNavigationEntry; - end; - - // TCefProcessMessage - // /include/capi/cef_process_message_capi.h (cef_process_message_t) - ICefProcessMessage = interface(ICefBaseRefCounted) - ['{E0B1001A-8777-425A-869B-29D40B8B93B1}'] - function IsValid: Boolean; - function IsReadOnly: Boolean; - function Copy: ICefProcessMessage; - function GetName: ustring; - function GetArgumentList: ICefListValue; - property Name: ustring read GetName; - property ArgumentList: ICefListValue read GetArgumentList; - end; - - // TCefBrowser - // /include/capi/cef_browser_capi.h (cef_browser_t) - ICefBrowser = interface(ICefBaseRefCounted) - ['{BA003C2E-CF15-458F-9D4A-FE3CEFCF3EEF}'] - function GetHost: ICefBrowserHost; - function CanGoBack: Boolean; - procedure GoBack; - function CanGoForward: Boolean; - procedure GoForward; - function IsLoading: Boolean; - procedure Reload; - procedure ReloadIgnoreCache; - procedure StopLoad; - function GetIdentifier: Integer; - function IsSame(const that: ICefBrowser): Boolean; - function IsPopup: Boolean; - function HasDocument: Boolean; - function GetMainFrame: ICefFrame; - function GetFocusedFrame: ICefFrame; - function GetFrameByident(const identifier: Int64): ICefFrame; - function GetFrame(const name: ustring): ICefFrame; - function GetFrameCount: NativeUInt; - function GetFrameIdentifiers(var aFrameCount : NativeUInt; var aFrameIdentifierArray : TCefFrameIdentifierArray) : boolean; - function GetFrameNames(var aFrameNames : TStrings) : boolean; - function SendProcessMessage(targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage): Boolean; - - property MainFrame : ICefFrame read GetMainFrame; - property FocusedFrame : ICefFrame read GetFocusedFrame; - property FrameCount : NativeUInt read GetFrameCount; - property Host : ICefBrowserHost read GetHost; - property Identifier : Integer read GetIdentifier; - end; - - // TCefPostDataElement - // /include/capi/cef_request_capi.h (cef_post_data_element_t) - ICefPostDataElement = interface(ICefBaseRefCounted) - ['{3353D1B8-0300-4ADC-8D74-4FF31C77D13C}'] - function IsReadOnly: Boolean; - procedure SetToEmpty; - procedure SetToFile(const fileName: ustring); - procedure SetToBytes(size: NativeUInt; const bytes: Pointer); - function GetType: TCefPostDataElementType; - function GetFile: ustring; - function GetBytesCount: NativeUInt; - function GetBytes(size: NativeUInt; bytes: Pointer): NativeUInt; - end; - - // TCefPostData - // /include/capi/cef_request_capi.h (cef_post_data_t) - ICefPostData = interface(ICefBaseRefCounted) - ['{1E677630-9339-4732-BB99-D6FE4DE4AEC0}'] - function IsReadOnly: Boolean; - function HasExcludedElements: Boolean; - function GetCount: NativeUInt; - function GetElements(Count: NativeUInt): IInterfaceList; // list of ICefPostDataElement - function RemoveElement(const element: ICefPostDataElement): Integer; - function AddElement(const element: ICefPostDataElement): Integer; - procedure RemoveElements; - end; - - // TCefRequest - // /include/capi/cef_request_capi.h (cef_request_t) - ICefRequest = interface(ICefBaseRefCounted) - ['{FB4718D3-7D13-4979-9F4C-D7F6C0EC592A}'] - function IsReadOnly: Boolean; - function GetUrl: ustring; - function GetMethod: ustring; - function GetPostData: ICefPostData; - procedure GetHeaderMap(const HeaderMap: ICefStringMultimap); - procedure SetUrl(const value: ustring); - procedure SetMethod(const value: ustring); - procedure SetReferrer(const referrerUrl: ustring; policy: TCefReferrerPolicy); - function GetReferrerUrl: ustring; - function GetReferrerPolicy: TCefReferrerPolicy; - procedure SetPostData(const value: ICefPostData); - procedure SetHeaderMap(const HeaderMap: ICefStringMultimap); - function GetFlags: TCefUrlRequestFlags; - procedure SetFlags(flags: TCefUrlRequestFlags); - function GetFirstPartyForCookies: ustring; - procedure SetFirstPartyForCookies(const url: ustring); - procedure Assign(const url, method: ustring; const postData: ICefPostData; const headerMap: ICefStringMultimap); - function GetResourceType: TCefResourceType; - function GetTransitionType: TCefTransitionType; - function GetIdentifier: UInt64; - - property Url : ustring read GetUrl write SetUrl; - property Method : ustring read GetMethod write SetMethod; - property ReferrerUrl : ustring read GetReferrerUrl; - property ReferrerPolicy : TCefReferrerPolicy read GetReferrerPolicy; - property PostData : ICefPostData read GetPostData write SetPostData; - property Flags : TCefUrlRequestFlags read GetFlags write SetFlags; - property FirstPartyForCookies : ustring read GetFirstPartyForCookies write SetFirstPartyForCookies; - property ResourceType : TCefResourceType read GetResourceType; - property TransitionType : TCefTransitionType read GetTransitionType; - property Identifier : UInt64 read GetIdentifier; - end; - - // TCefStringVisitor - // /include/capi/cef_string_visitor_capi.h (cef_string_visitor_t) - ICefStringVisitor = interface(ICefBaseRefCounted) - ['{63ED4D6C-2FC8-4537-964B-B84C008F6158}'] - procedure Visit(const str: ustring); - end; - - // TCefFrame - // /include/capi/cef_frame_capi.h (cef_frame_t) - ICefFrame = interface(ICefBaseRefCounted) - ['{8FD3D3A6-EA3A-4A72-8501-0276BD5C3D1D}'] - function IsValid: Boolean; - procedure Undo; - procedure Redo; - procedure Cut; - procedure Copy; - procedure Paste; - procedure Del; - procedure SelectAll; - procedure ViewSource; - procedure GetSource(const visitor: ICefStringVisitor); - procedure GetSourceProc(const proc: TCefStringVisitorProc); - procedure GetText(const visitor: ICefStringVisitor); - procedure GetTextProc(const proc: TCefStringVisitorProc); - procedure LoadRequest(const request: ICefRequest); - procedure LoadUrl(const url: ustring); - procedure LoadString(const str, url: ustring); - procedure ExecuteJavaScript(const code, scriptUrl: ustring; startLine: Integer); - function IsMain: Boolean; - function IsFocused: Boolean; - function GetName: ustring; - function GetIdentifier: Int64; - function GetParent: ICefFrame; - function GetUrl: ustring; - function GetBrowser: ICefBrowser; - function GetV8Context: ICefv8Context; - procedure VisitDom(const visitor: ICefDomVisitor); - procedure VisitDomProc(const proc: TCefDomVisitorProc); - - property Name : ustring read GetName; - property Url : ustring read GetUrl; - property Browser : ICefBrowser read GetBrowser; - property Parent : ICefFrame read GetParent; - property Identifier : int64 read GetIdentifier; - end; - - // TCefStreamReader - // /include/capi/cef_stream_capi.h (cef_stream_reader_t) - ICefCustomStreamReader = interface(ICefBaseRefCounted) - ['{BBCFF23A-6FE7-4C28-B13E-6D2ACA5C83B7}'] - function Read(ptr: Pointer; size, n: NativeUInt): NativeUInt; - function Seek(offset: Int64; whence: Integer): Integer; - function Tell: Int64; - function Eof: Boolean; - function MayBlock: Boolean; - end; - - // TCefStreamReader - // /include/capi/cef_stream_capi.h (cef_stream_reader_t) - ICefStreamReader = interface(ICefBaseRefCounted) - ['{DD5361CB-E558-49C5-A4BD-D1CE84ADB277}'] - function Read(ptr: Pointer; size, n: NativeUInt): NativeUInt; - function Seek(offset: Int64; whence: Integer): Integer; - function Tell: Int64; - function Eof: Boolean; - function MayBlock: Boolean; - end; - - // TCefWriteHandler - // /include/capi/cef_stream_capi.h (cef_write_handler_t) - ICefWriteHandler = interface(ICefBaseRefCounted) - ['{F2431888-4EAB-421E-9EC3-320BE695AF30}'] - function Write(const ptr: Pointer; size, n: NativeUInt): NativeUInt; - function Seek(offset: Int64; whence: Integer): Integer; - function Tell: Int64; - function Flush: Integer; - function MayBlock: Boolean; - end; - - // TCefStreamWriter - // /include/capi/cef_stream_capi.h (cef_stream_writer_t) - ICefStreamWriter = interface(ICefBaseRefCounted) - ['{4AA6C477-7D8A-4D5A-A704-67F900A827E7}'] - function Write(const ptr: Pointer; size, n: NativeUInt): NativeUInt; - function Seek(offset: Int64; whence: Integer): Integer; - function Tell: Int64; - function Flush: Integer; - function MayBlock: Boolean; - end; - - // TCefResponse - // /include/capi/cef_response_capi.h (cef_response_t) - ICefResponse = interface(ICefBaseRefCounted) - ['{E9C896E4-59A8-4B96-AB5E-6EA3A498B7F1}'] - function IsReadOnly: Boolean; - function GetError: TCefErrorCode; - procedure SetError(error: TCefErrorCode); - function GetStatus: Integer; - procedure SetStatus(status: Integer); - function GetStatusText: ustring; - procedure SetStatusText(const StatusText: ustring); - function GetMimeType: ustring; - procedure SetMimeType(const mimetype: ustring); - function GetHeader(const name: ustring): ustring; - procedure GetHeaderMap(const headerMap: ICefStringMultimap); - procedure SetHeaderMap(const headerMap: ICefStringMultimap); - function GetURL: ustring; - procedure SetURL(const url: ustring); - - property Status : Integer read GetStatus write SetStatus; - property StatusText : ustring read GetStatusText write SetStatusText; - property MimeType : ustring read GetMimeType write SetMimeType; - property Error : TCefErrorCode read GetError write SetError; - property URL : ustring read GetURL write SetURL; - end; - - // TCefDownloadItem - // /include/capi/cef_download_item_capi.h (cef_download_item_t) - ICefDownloadItem = interface(ICefBaseRefCounted) - ['{B34BD320-A82E-4185-8E84-B98E5EEC803F}'] - function IsValid: Boolean; - function IsInProgress: Boolean; - function IsComplete: Boolean; - function IsCanceled: Boolean; - function GetCurrentSpeed: Int64; - function GetPercentComplete: Integer; - function GetTotalBytes: Int64; - function GetReceivedBytes: Int64; - function GetStartTime: TDateTime; - function GetEndTime: TDateTime; - function GetFullPath: ustring; - function GetId: Cardinal; - function GetUrl: ustring; - function GetOriginalUrl: ustring; - function GetSuggestedFileName: ustring; - function GetContentDisposition: ustring; - function GetMimeType: ustring; - - property CurrentSpeed : Int64 read GetCurrentSpeed; - property PercentComplete : Integer read GetPercentComplete; - property TotalBytes : Int64 read GetTotalBytes; - property ReceivedBytes : Int64 read GetReceivedBytes; - property StartTime : TDateTime read GetStartTime; - property EndTime : TDateTime read GetEndTime; - property FullPath : ustring read GetFullPath; - property Id : Cardinal read GetId; - property Url : ustring read GetUrl; - property OriginalUrl : ustring read GetOriginalUrl; - property SuggestedFileName : ustring read GetSuggestedFileName; - property ContentDisposition : ustring read GetContentDisposition; - property MimeType : ustring read GetMimeType; - end; - - // TCefBeforeDownloadCallback - // /include/capi/cef_download_handler_capi.h (cef_before_download_callback_t) - ICefBeforeDownloadCallback = interface(ICefBaseRefCounted) - ['{5A81AF75-CBA2-444D-AD8E-522160F36433}'] - procedure Cont(const downloadPath: ustring; showDialog: Boolean); - end; - - // TCefDownloadItemCallback - // /include/capi/cef_download_handler_capi.h (cef_download_item_callback_t) - ICefDownloadItemCallback = interface(ICefBaseRefCounted) - ['{498F103F-BE64-4D5F-86B7-B37EC69E1735}'] - procedure Cancel; - procedure Pause; - procedure Resume; - end; - - // TCefDownloadHandler - // /include/capi/cef_download_handler_capi.h (cef_download_handler_t) - ICefDownloadHandler = interface(ICefBaseRefCounted) - ['{3137F90A-5DC5-43C1-858D-A269F28EF4F1}'] - procedure OnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); - procedure OnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefV8Exception - // /include/capi/cef_v8_capi.h (cef_v8exception_t) - ICefV8Exception = interface(ICefBaseRefCounted) - ['{7E422CF0-05AC-4A60-A029-F45105DCE6A4}'] - function GetMessage: ustring; - function GetSourceLine: ustring; - function GetScriptResourceName: ustring; - function GetLineNumber: Integer; - function GetStartPosition: Integer; - function GetEndPosition: Integer; - function GetStartColumn: Integer; - function GetEndColumn: Integer; - - property Message : ustring read GetMessage; - property SourceLine : ustring read GetSourceLine; - property ScriptResourceName : ustring read GetScriptResourceName; - property LineNumber : Integer read GetLineNumber; - property StartPosition : Integer read GetStartPosition; - property EndPosition : Integer read GetEndPosition; - property StartColumn : Integer read GetStartColumn; - property EndColumn : Integer read GetEndColumn; - end; - - // TCefv8ArrayBufferReleaseCallback - // /include/capi/cef_v8_capi.h (cef_v8array_buffer_release_callback_t) - ICefv8ArrayBufferReleaseCallback = interface(ICefBaseRefCounted) - ['{4EAAB422-D046-43DF-B1F0-5503116A5816}'] - procedure ReleaseBuffer(buffer : Pointer); - end; - - // TCefV8Context - // /include/capi/cef_v8_capi.h (cef_v8context_t) - ICefv8Context = interface(ICefBaseRefCounted) - ['{2295A11A-8773-41F2-AD42-308C215062D9}'] - function GetTaskRunner: ICefTaskRunner; - function IsValid: Boolean; - function GetBrowser: ICefBrowser; - function GetFrame: ICefFrame; - function GetGlobal: ICefv8Value; - function Enter: Boolean; - function Exit: Boolean; - function IsSame(const that: ICefv8Context): Boolean; - function Eval(const code: ustring; const script_url: ustring; start_line: integer; var retval: ICefv8Value; var exception: ICefV8Exception): Boolean; - - property Browser : ICefBrowser read GetBrowser; - property Frame : ICefFrame read GetFrame; - property Global : ICefv8Value read GetGlobal; - end; - - // TCefv8Handler - // /include/capi/cef_v8_capi.h (cef_v8handler_t) - ICefv8Handler = interface(ICefBaseRefCounted) - ['{F94CDC60-FDCB-422D-96D5-D2A775BD5D73}'] - function Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean; - end; - - // TCefV8Interceptor - // /include/capi/cef_v8_capi.h (cef_v8interceptor_t) - ICefV8Interceptor = interface(ICefBaseRefCounted) - ['{B3B8FD7C-A916-4B25-93A2-2892AC324F21}'] - function GetByName(const name: ustring; const obj: ICefv8Value; out retval: ICefv8Value; const exception: ustring): boolean; - function GetByIndex(index: integer; const obj: ICefv8Value; out retval: ICefv8Value; const exception: ustring): boolean; - function SetByName(const name: ustring; const obj, value: ICefv8Value; const exception: ustring): boolean; - function SetByIndex(index: integer; const obj, value: ICefv8Value; const exception: ustring): boolean; - end; - - // TCefV8Accessor - // /include/capi/cef_v8_capi.h (cef_v8accessor_t) - ICefV8Accessor = interface(ICefBaseRefCounted) - ['{DCA6D4A2-726A-4E24-AA64-5E8C731D868A}'] - function Get(const name: ustring; const obj: ICefv8Value; out retval: ICefv8Value; var exception: ustring): Boolean; - function Put(const name: ustring; const obj, value: ICefv8Value; var exception: ustring): Boolean; - end; - - // TCefTask - // /include/capi/cef_task_capi.h (cef_task_t) - ICefTask = interface(ICefBaseRefCounted) - ['{0D965470-4A86-47CE-BD39-A8770021AD7E}'] - procedure Execute; - end; - - // TCefTaskRunner - // /include/capi/cef_task_capi.h (cef_task_runner_t) - ICefTaskRunner = interface(ICefBaseRefCounted) - ['{6A500FA3-77B7-4418-8EA8-6337EED1337B}'] - function IsSame(const that: ICefTaskRunner): Boolean; - function BelongsToCurrentThread: Boolean; - function BelongsToThread(threadId: TCefThreadId): Boolean; - function PostTask(const task: ICefTask): Boolean; - function PostDelayedTask(const task: ICefTask; delayMs: Int64): Boolean; - end; - - // TCefThread - // /include/capi/cef_thread_capi.h (cef_thread_t) - ICefThread = interface(ICefBaseRefCounted) - ['{26B30EA5-F44A-4C40-97DF-67FD9E73A4FF}'] - function GetTaskRunner : ICefTaskRunner; - function GetPlatformThreadID : TCefPlatformThreadId; - procedure Stop; - function IsRunning : boolean; - end; - - // TCefWaitableEvent - // /include/capi/cef_waitable_event_capi.h (cef_waitable_event_t) - ICefWaitableEvent = interface(ICefBaseRefCounted) - ['{965C90C9-3DAE-457F-AA64-E04FF508094A}'] - procedure Reset; - procedure Signal; - function IsSignaled : boolean; - procedure Wait; - function TimedWait(max_ms: int64): boolean; - end; - - // TCefv8Value - // /include/capi/cef_v8_capi.h (cef_v8value_t) - ICefv8Value = interface(ICefBaseRefCounted) - ['{52319B8D-75A8-422C-BD4B-16FA08CC7F42}'] - function IsValid: Boolean; - function IsUndefined: Boolean; - function IsNull: Boolean; - function IsBool: Boolean; - function IsInt: Boolean; - function IsUInt: Boolean; - function IsDouble: Boolean; - function IsDate: Boolean; - function IsString: Boolean; - function IsObject: Boolean; - function IsArray: Boolean; - function IsArrayBuffer: Boolean; - function IsFunction: Boolean; - function IsSame(const that: ICefv8Value): Boolean; - function GetBoolValue: Boolean; - function GetIntValue: Integer; - function GetUIntValue: Cardinal; - function GetDoubleValue: Double; - function GetDateValue: TDateTime; - function GetStringValue: ustring; - function IsUserCreated: Boolean; - function HasException: Boolean; - function GetException: ICefV8Exception; - function ClearException: Boolean; - function WillRethrowExceptions: Boolean; - function SetRethrowExceptions(rethrow: Boolean): Boolean; - function HasValueByKey(const key: ustring): Boolean; - function HasValueByIndex(index: Integer): Boolean; - function DeleteValueByKey(const key: ustring): Boolean; - function DeleteValueByIndex(index: Integer): Boolean; - function GetValueByKey(const key: ustring): ICefv8Value; - function GetValueByIndex(index: Integer): ICefv8Value; - function SetValueByKey(const key: ustring; const value: ICefv8Value; attribute: TCefV8PropertyAttributes): Boolean; - function SetValueByIndex(index: Integer; const value: ICefv8Value): Boolean; - function SetValueByAccessor(const key: ustring; settings: TCefV8AccessControls; attribute: TCefV8PropertyAttributes): Boolean; - function GetKeys(const keys: TStrings): Integer; - function SetUserData(const data: ICefv8Value): Boolean; - function GetUserData: ICefv8Value; - function GetExternallyAllocatedMemory: Integer; - function AdjustExternallyAllocatedMemory(changeInBytes: Integer): Integer; - function GetArrayLength: Integer; - function GetArrayBufferReleaseCallback : ICefv8ArrayBufferReleaseCallback; - function NeuterArrayBuffer : boolean; - function GetFunctionName: ustring; - function GetFunctionHandler: ICefv8Handler; - function ExecuteFunction(const obj: ICefv8Value; const arguments: TCefv8ValueArray): ICefv8Value; - function ExecuteFunctionWithContext(const context: ICefv8Context; const obj: ICefv8Value; const arguments: TCefv8ValueArray): ICefv8Value; - end; - - // TCefV8StackFrame - // /include/capi/cef_v8_capi.h (cef_v8stack_frame_t) - ICefV8StackFrame = interface(ICefBaseRefCounted) - ['{BA1FFBF4-E9F2-4842-A827-DC220F324286}'] - function IsValid: Boolean; - function GetScriptName: ustring; - function GetScriptNameOrSourceUrl: ustring; - function GetFunctionName: ustring; - function GetLineNumber: Integer; - function GetColumn: Integer; - function IsEval: Boolean; - function IsConstructor: Boolean; - - property ScriptName : ustring read GetScriptName; - property ScriptNameOrSourceUrl : ustring read GetScriptNameOrSourceUrl; - property FunctionName : ustring read GetFunctionName; - property LineNumber : Integer read GetLineNumber; - property Column : Integer read GetColumn; - end; - - // TCefV8StackTrace - // /include/capi/cef_v8_capi.h (cef_v8stack_trace_t) - ICefV8StackTrace = interface(ICefBaseRefCounted) - ['{32111C84-B7F7-4E3A-92B9-7CA1D0ADB613}'] - function IsValid: Boolean; - function GetFrameCount: Integer; - function GetFrame(index: Integer): ICefV8StackFrame; - - property FrameCount : Integer read GetFrameCount; - property Frame[index: Integer] : ICefV8StackFrame read GetFrame; - end; - - // TCefXmlReader - // /include/capi/cef_xml_reader_capi.h (cef_xml_reader_t) - ICefXmlReader = interface(ICefBaseRefCounted) - ['{0DE686C3-A8D7-45D2-82FD-92F7F4E62A90}'] - function MoveToNextNode: Boolean; - function Close: Boolean; - function HasError: Boolean; - function GetError: ustring; - function GetType: TCefXmlNodeType; - function GetDepth: Integer; - function GetLocalName: ustring; - function GetPrefix: ustring; - function GetQualifiedName: ustring; - function GetNamespaceUri: ustring; - function GetBaseUri: ustring; - function GetXmlLang: ustring; - function IsEmptyElement: Boolean; - function HasValue: Boolean; - function GetValue: ustring; - function HasAttributes: Boolean; - function GetAttributeCount: NativeUInt; - function GetAttributeByIndex(index: Integer): ustring; - function GetAttributeByQName(const qualifiedName: ustring): ustring; - function GetAttributeByLName(const localName, namespaceURI: ustring): ustring; - function GetInnerXml: ustring; - function GetOuterXml: ustring; - function GetLineNumber: Integer; - function MoveToAttributeByIndex(index: Integer): Boolean; - function MoveToAttributeByQName(const qualifiedName: ustring): Boolean; - function MoveToAttributeByLName(const localName, namespaceURI: ustring): Boolean; - function MoveToFirstAttribute: Boolean; - function MoveToNextAttribute: Boolean; - function MoveToCarryingElement: Boolean; - end; - - // TCefZipReader - // /include/capi/cef_zip_reader_capi.h (cef_zip_reader_t) - ICefZipReader = interface(ICefBaseRefCounted) - ['{3B6C591F-9877-42B3-8892-AA7B27DA34A8}'] - function MoveToFirstFile: Boolean; - function MoveToNextFile: Boolean; - function MoveToFile(const fileName: ustring; caseSensitive: Boolean): Boolean; - function Close: Boolean; - function GetFileName: ustring; - function GetFileSize: Int64; - function GetFileLastModified: TCefTime; - function OpenFile(const password: ustring): Boolean; - function CloseFile: Boolean; - function ReadFile(buffer: Pointer; bufferSize: NativeUInt): Integer; - function Tell: Int64; - function Eof: Boolean; - end; - - // TCefDomNode - // /include/capi/cef_dom_capi.h (cef_domnode_t) - ICefDomNode = interface(ICefBaseRefCounted) - ['{96C03C9E-9C98-491A-8DAD-1947332232D6}'] - function GetType: TCefDomNodeType; - function IsText: Boolean; - function IsElement: Boolean; - function IsEditable: Boolean; - function IsFormControlElement: Boolean; - function GetFormControlElementType: ustring; - function IsSame(const that: ICefDomNode): Boolean; - function GetName: ustring; - function GetValue: ustring; - function SetValue(const value: ustring): Boolean; - function GetAsMarkup: ustring; - function GetDocument: ICefDomDocument; - function GetParent: ICefDomNode; - function GetPreviousSibling: ICefDomNode; - function GetNextSibling: ICefDomNode; - function HasChildren: Boolean; - function GetFirstChild: ICefDomNode; - function GetLastChild: ICefDomNode; - function GetElementTagName: ustring; - function HasElementAttributes: Boolean; - function HasElementAttribute(const attrName: ustring): Boolean; - function GetElementAttribute(const attrName: ustring): ustring; - procedure GetElementAttributes(const attrMap: ICefStringMap); - function SetElementAttribute(const attrName, value: ustring): Boolean; - function GetElementInnerText: ustring; - function GetElementBounds: TCefRect; - - property NodeType : TCefDomNodeType read GetType; - property Name : ustring read GetName; - property AsMarkup : ustring read GetAsMarkup; - property Document : ICefDomDocument read GetDocument; - property Parent : ICefDomNode read GetParent; - property PreviousSibling : ICefDomNode read GetPreviousSibling; - property NextSibling : ICefDomNode read GetNextSibling; - property FirstChild : ICefDomNode read GetFirstChild; - property LastChild : ICefDomNode read GetLastChild; - property ElementTagName : ustring read GetElementTagName; - property ElementInnerText : ustring read GetElementInnerText; - property ElementBounds : TCefRect read GetElementBounds; - end; - - // TCefDomDocument - // /include/capi/cef_dom_capi.h (cef_domdocument_t) - ICefDomDocument = interface(ICefBaseRefCounted) - ['{08E74052-45AF-4F69-A578-98A5C3959426}'] - function GetType: TCefDomDocumentType; - function GetDocument: ICefDomNode; - function GetBody: ICefDomNode; - function GetHead: ICefDomNode; - function GetTitle: ustring; - function GetElementById(const id: ustring): ICefDomNode; - function GetFocusedNode: ICefDomNode; - function HasSelection: Boolean; - function GetSelectionStartOffset: Integer; - function GetSelectionEndOffset: Integer; - function GetSelectionAsMarkup: ustring; - function GetSelectionAsText: ustring; - function GetBaseUrl: ustring; - function GetCompleteUrl(const partialURL: ustring): ustring; - - property DocType : TCefDomDocumentType read GetType; - property Document : ICefDomNode read GetDocument; - property Body : ICefDomNode read GetBody; - property Head : ICefDomNode read GetHead; - property Title : ustring read GetTitle; - property FocusedNode : ICefDomNode read GetFocusedNode; - property SelectionStartOffset : Integer read GetSelectionStartOffset; - property SelectionEndOffset : Integer read GetSelectionEndOffset; - property SelectionAsMarkup : ustring read GetSelectionAsMarkup; - property SelectionAsText : ustring read GetSelectionAsText; - property BaseUrl : ustring read GetBaseUrl; - end; - - // TCefDomVisitor - // /include/capi/cef_dom_capi.h (cef_domvisitor_t) - ICefDomVisitor = interface(ICefBaseRefCounted) - ['{30398428-3196-4531-B968-2DDBED36F6B0}'] - procedure visit(const document: ICefDomDocument); - end; - - // TCefCookieVisitor - // /include/capi/cef_cookie_capi.h (cef_cookie_visitor_t) - ICefCookieVisitor = interface(ICefBaseRefCounted) - ['{8378CF1B-84AB-4FDB-9B86-34DDABCCC402}'] - function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; - end; - - // TCefCommandLine - // /include/capi/cef_command_line_capi.h (cef_command_line_t) - ICefCommandLine = interface(ICefBaseRefCounted) - ['{6B43D21B-0F2C-4B94-B4E6-4AF0D7669D8E}'] - function IsValid: Boolean; - function IsReadOnly: Boolean; - function Copy: ICefCommandLine; - procedure InitFromArgv(argc: Integer; const argv: PPAnsiChar); - procedure InitFromString(const commandLine: ustring); - procedure Reset; - function GetCommandLineString: ustring; - procedure GetArgv(var args: TStrings); - function GetProgram: ustring; - procedure SetProgram(const prog: ustring); - function HasSwitches: Boolean; - function HasSwitch(const name: ustring): Boolean; - function GetSwitchValue(const name: ustring): ustring; - procedure GetSwitches(var switches: TStrings); - procedure AppendSwitch(const name: ustring); - procedure AppendSwitchWithValue(const name, value: ustring); - function HasArguments: Boolean; - procedure GetArguments(var arguments: TStrings); - procedure AppendArgument(const argument: ustring); - procedure PrependWrapper(const wrapper: ustring); - - property CommandLineString : ustring read GetCommandLineString; - end; - - // TCefResourceBundleHandler - // /include/capi/cef_resource_bundle_handler_capi.h (cef_resource_bundle_handler_t) - ICefResourceBundleHandler = interface(ICefBaseRefCounted) - ['{09C264FD-7E03-41E3-87B3-4234E82B5EA2}'] - function GetLocalizedString(stringId: Integer; var stringVal: ustring): Boolean; - function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; - function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; - end; - - // TCefBrowserProcessHandler - // /include/capi/cef_browser_process_handler_capi.h (cef_browser_process_handler_t) - ICefBrowserProcessHandler = interface(ICefBaseRefCounted) - ['{27291B7A-C0AE-4EE0-9115-15C810E22F6C}'] - procedure OnContextInitialized; - procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); - procedure OnRenderProcessThreadCreated(const extraInfo: ICefListValue); - procedure GetPrintHandler(var aHandler : ICefPrintHandler); - procedure OnScheduleMessagePumpWork(const delayMs: Int64); - end; - - // TCefRenderProcessHandler - // /include/capi/cef_render_process_handler_capi.h (cef_render_process_handler_t) - ICefRenderProcessHandler = interface(ICefBaseRefCounted) - ['{FADEE3BC-BF66-430A-BA5D-1EE3782ECC58}'] - procedure OnRenderThreadCreated(const extraInfo: ICefListValue); - procedure OnWebKitInitialized; - procedure OnBrowserCreated(const browser: ICefBrowser); - procedure OnBrowserDestroyed(const browser: ICefBrowser); - function GetLoadHandler : ICefLoadHandler; - procedure OnContextCreated(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context); - procedure OnContextReleased(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context); - procedure OnUncaughtException(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context; const V8Exception: ICefV8Exception; const stackTrace: ICefV8StackTrace); - procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode); - function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage): Boolean; - end; - - // TCefApp - // /include/capi/cef_app_capi.h (cef_app_t) - ICefApp = interface(ICefBaseRefCounted) - ['{970CA670-9070-4642-B188-7D8A22DAEED4}'] - procedure OnBeforeCommandLineProcessing(const processType: ustring; const commandLine: ICefCommandLine); - procedure OnRegisterCustomSchemes(const registrar: TCefSchemeRegistrarRef); - procedure GetResourceBundleHandler(var aHandler : ICefResourceBundleHandler); - procedure GetBrowserProcessHandler(var aHandler : ICefBrowserProcessHandler); - procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler); - end; - - // TCefCompletionCallback - // /include/capi/cef_callback_capi.h (cef_completion_callback_t) - ICefCompletionCallback = interface(ICefBaseRefCounted) - ['{A8ECCFBB-FEE0-446F-AB32-AD69A7478D57}'] - procedure OnComplete; - end; - - // TCefSetCookieCallback - // /include/capi/cef_cookie_capi.h (cef_set_cookie_callback_t) - ICefSetCookieCallback = interface(ICefBaseRefCounted) - ['{16E14B6F-CB0A-4F9D-A008-239E0BC7B892}'] - procedure OnComplete(success: Boolean); - end; - - // TCefDeleteCookiesCallback - // /include/capi/cef_cookie_capi.h (cef_delete_cookies_callback_t) - ICefDeleteCookiesCallback = interface(ICefBaseRefCounted) - ['{758B79A1-B9E8-4F0D-94A0-DCE5AFADE33D}'] - procedure OnComplete(numDeleted: Integer); - end; - - // TCefCookieManager - // /include/capi/cef_cookie_capi.h (cef_cookie_manager_t) - ICefCookieManager = Interface(ICefBaseRefCounted) - ['{CC1749E6-9AD3-4283-8430-AF6CBF3E8785}'] - procedure SetSupportedSchemes(const schemes: TStrings; const callback: ICefCompletionCallback); - procedure SetSupportedSchemesProc(const schemes: TStrings; const callback: TCefCompletionCallbackProc); - function VisitAllCookies(const visitor: ICefCookieVisitor): Boolean; - function VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; - function VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean; - function VisitUrlCookiesProc(const url: ustring; includeHttpOnly: Boolean; const visitor: TCefCookieVisitorProc): Boolean; - function SetCookie(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: ICefSetCookieCallback): Boolean; - function SetCookieProc(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: TCefSetCookieCallbackProc): Boolean; - function DeleteCookies(const url, cookieName: ustring; const callback: ICefDeleteCookiesCallback): Boolean; - function DeleteCookiesProc(const url, cookieName: ustring; const callback: TCefDeleteCookiesCallbackProc): Boolean; - function SetStoragePath(const path: ustring; persistSessionCookies: Boolean; const callback: ICefCompletionCallback): Boolean; - function SetStoragePathProc(const path: ustring; persistSessionCookies: Boolean; const callback: TCefCompletionCallbackProc): Boolean; - function FlushStore(const handler: ICefCompletionCallback): Boolean; - function FlushStoreProc(const proc: TCefCompletionCallbackProc): Boolean; - end; - - // TCefWebPluginInfo - // /include/capi/cef_web_plugin_capi.h (cef_web_plugin_info_t) - ICefWebPluginInfo = interface(ICefBaseRefCounted) - ['{AA879E58-F649-44B1-AF9C-655FF5B79A02}'] - function GetName: ustring; - function GetPath: ustring; - function GetVersion: ustring; - function GetDescription: ustring; - - property Name : ustring read GetName; - property Path : ustring read GetPath; - property Version : ustring read GetVersion; - property Description : ustring read GetDescription; - end; - - // TCefCallback - // /include/capi/cef_callback_capi.h (cef_callback_t) - ICefCallback = interface(ICefBaseRefCounted) - ['{1B8C449F-E2D6-4B78-9BBA-6F47E8BCDF37}'] - procedure Cont; - procedure Cancel; - end; - - // TCefResourceHandler - // /include/capi/cef_resource_handler_capi.h (cef_resource_handler_t) - ICefResourceHandler = interface(ICefBaseRefCounted) - ['{BD3EA208-AAAD-488C-BFF2-76993022F2B5}'] - function ProcessRequest(const request: ICefRequest; const callback: ICefCallback): Boolean; - procedure GetResponseHeaders(const response: ICefResponse; out responseLength: Int64; out redirectUrl: ustring); - function ReadResponse(const dataOut: Pointer; bytesToRead: Integer; var bytesRead: Integer; const callback: ICefCallback): Boolean; - function CanGetCookie(const cookie: PCefCookie): Boolean; - function CanSetCookie(const cookie: PCefCookie): Boolean; - procedure Cancel; - end; - - // TCefSchemeHandlerFactory - // /include/capi/cef_scheme_capi.h (cef_scheme_handler_factory_t) - ICefSchemeHandlerFactory = interface(ICefBaseRefCounted) - ['{4D9B7960-B73B-4EBD-9ABE-6C1C43C245EB}'] - function New(const browser: ICefBrowser; const frame: ICefFrame; const schemeName: ustring; const request: ICefRequest): ICefResourceHandler; - end; - - // TCefAuthCallback - // /include/capi/cef_auth_callback_capi.h (cef_auth_callback_t) - ICefAuthCallback = interface(ICefBaseRefCounted) - ['{500C2023-BF4D-4FF7-9C04-165E5C389131}'] - procedure Cont(const username, password: ustring); - procedure Cancel; - end; - - // TCefJsDialogCallback - // /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_callback_t) - ICefJsDialogCallback = interface(ICefBaseRefCounted) - ['{187B2156-9947-4108-87AB-32E559E1B026}'] - procedure Cont(success: Boolean; const userInput: ustring); - end; - - // TCefContextMenuParams - // /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_params_t) - ICefContextMenuParams = interface(ICefBaseRefCounted) - ['{E31BFA9E-D4E2-49B7-A05D-20018C8794EB}'] - function GetXCoord: Integer; - function GetYCoord: Integer; - function GetTypeFlags: TCefContextMenuTypeFlags; - function GetLinkUrl: ustring; - function GetUnfilteredLinkUrl: ustring; - function GetSourceUrl: ustring; - function HasImageContents: Boolean; - function GetTitleText: ustring; - function GetPageUrl: ustring; - function GetFrameUrl: ustring; - function GetFrameCharset: ustring; - function GetMediaType: TCefContextMenuMediaType; - function GetMediaStateFlags: TCefContextMenuMediaStateFlags; - function GetSelectionText: ustring; - function GetMisspelledWord: ustring; - function GetDictionarySuggestions(const suggestions: TStringList): Boolean; - function IsEditable: Boolean; - function IsSpellCheckEnabled: Boolean; - function GetEditStateFlags: TCefContextMenuEditStateFlags; - function IsCustomMenu: Boolean; - function IsPepperMenu: Boolean; - - property XCoord : Integer read GetXCoord; - property YCoord : Integer read GetYCoord; - property TypeFlags : TCefContextMenuTypeFlags read GetTypeFlags; - property LinkUrl : ustring read GetLinkUrl; - property UnfilteredLinkUrl : ustring read GetUnfilteredLinkUrl; - property SourceUrl : ustring read GetSourceUrl; - property TitleText : ustring read GetTitleText; - property PageUrl : ustring read GetPageUrl; - property FrameUrl : ustring read GetFrameUrl; - property FrameCharset : ustring read GetFrameCharset; - property MediaType : TCefContextMenuMediaType read GetMediaType; - property MediaStateFlags : TCefContextMenuMediaStateFlags read GetMediaStateFlags; - property SelectionText : ustring read GetSelectionText; - property EditStateFlags : TCefContextMenuEditStateFlags read GetEditStateFlags; - end; - - // TCefMenuModel - // /include/capi/cef_menu_model_capi.h (cef_menu_model_t) - ICefMenuModel = interface(ICefBaseRefCounted) - ['{40AF19D3-8B4E-44B8-8F89-DEB5907FC495}'] - function IsSubMenu: Boolean; - function Clear: Boolean; - function GetCount: Integer; - function AddSeparator: Boolean; - function AddItem(commandId: Integer; const text: ustring): Boolean; - function AddCheckItem(commandId: Integer; const text: ustring): Boolean; - function AddRadioItem(commandId: Integer; const text: ustring; groupId: Integer): Boolean; - function AddSubMenu(commandId: Integer; const text: ustring): ICefMenuModel; - function InsertSeparatorAt(index: Integer): Boolean; - function InsertItemAt(index, commandId: Integer; const text: ustring): Boolean; - function InsertCheckItemAt(index, commandId: Integer; const text: ustring): Boolean; - function InsertRadioItemAt(index, commandId: Integer; const text: ustring; groupId: Integer): Boolean; - function InsertSubMenuAt(index, commandId: Integer; const text: ustring): ICefMenuModel; - function Remove(commandId: Integer): Boolean; - function RemoveAt(index: Integer): Boolean; - function GetIndexOf(commandId: Integer): Integer; - function GetCommandIdAt(index: Integer): Integer; - function SetCommandIdAt(index, commandId: Integer): Boolean; - function GetLabel(commandId: Integer): ustring; - function GetLabelAt(index: Integer): ustring; - function SetLabel(commandId: Integer; const text: ustring): Boolean; - function SetLabelAt(index: Integer; const text: ustring): Boolean; - function GetType(commandId: Integer): TCefMenuItemType; - function GetTypeAt(index: Integer): TCefMenuItemType; - function GetGroupId(commandId: Integer): Integer; - function GetGroupIdAt(index: Integer): Integer; - function SetGroupId(commandId, groupId: Integer): Boolean; - function SetGroupIdAt(index, groupId: Integer): Boolean; - function GetSubMenu(commandId: Integer): ICefMenuModel; - function GetSubMenuAt(index: Integer): ICefMenuModel; - function IsVisible(commandId: Integer): Boolean; - function isVisibleAt(index: Integer): Boolean; - function SetVisible(commandId: Integer; visible: Boolean): Boolean; - function SetVisibleAt(index: Integer; visible: Boolean): Boolean; - function IsEnabled(commandId: Integer): Boolean; - function IsEnabledAt(index: Integer): Boolean; - function SetEnabled(commandId: Integer; enabled: Boolean): Boolean; - function SetEnabledAt(index: Integer; enabled: Boolean): Boolean; - function IsChecked(commandId: Integer): Boolean; - function IsCheckedAt(index: Integer): Boolean; - function setChecked(commandId: Integer; checked: Boolean): Boolean; - function setCheckedAt(index: Integer; checked: Boolean): Boolean; - function HasAccelerator(commandId: Integer): Boolean; - function HasAcceleratorAt(index: Integer): Boolean; - function SetAccelerator(commandId, keyCode: Integer; shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; - function SetAcceleratorAt(index, keyCode: Integer; shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; - function RemoveAccelerator(commandId: Integer): Boolean; - function RemoveAcceleratorAt(index: Integer): Boolean; - function GetAccelerator(commandId: Integer; out keyCode: Integer; out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; - function GetAcceleratorAt(index: Integer; out keyCode: Integer; out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; - function SetColor(commandId: Integer; colorType: TCefMenuColorType; color: TCefColor): Boolean; - function SetColorAt(index: Integer; colorType: TCefMenuColorType; color: TCefColor): Boolean; - function GetColor(commandId: Integer; colorType: TCefMenuColorType; out color: TCefColor): Boolean; - function GetColorAt(index: Integer; colorType: TCefMenuColorType; out color: TCefColor): Boolean; - function SetFontList(commandId: Integer; const fontList: ustring): Boolean; - function SetFontListAt(index: Integer; const fontList: ustring): Boolean; - end; - - // TCefValue - // /include/capi/cef_values_capi.h (cef_value_t) - ICefValue = interface(ICefBaseRefCounted) - ['{66F9F439-B12B-4EC3-A945-91AE4EF4D4BA}'] - function IsValid: Boolean; - function IsOwned: Boolean; - function IsReadOnly: Boolean; - function IsSame(const that: ICefValue): Boolean; - function IsEqual(const that: ICefValue): Boolean; - function Copy: ICefValue; - function GetType: TCefValueType; - function GetBool: Boolean; - function GetInt: Integer; - function GetDouble: Double; - function GetString: ustring; - function GetBinary: ICefBinaryValue; - function GetDictionary: ICefDictionaryValue; - function GetList: ICefListValue; - function SetNull: Boolean; - function SetBool(value: Integer): Boolean; - function SetInt(value: Integer): Boolean; - function SetDouble(value: Double): Boolean; - function SetString(const value: ustring): Boolean; - function SetBinary(const value: ICefBinaryValue): Boolean; - function SetDictionary(const value: ICefDictionaryValue): Boolean; - function SetList(const value: ICefListValue): Boolean; - end; - - // TCefBinaryValue - // /include/capi/cef_values_capi.h (cef_binary_value_t) - ICefBinaryValue = interface(ICefBaseRefCounted) - ['{974AA40A-9C5C-4726-81F0-9F0D46D7C5B3}'] - function IsValid: Boolean; - function IsOwned: Boolean; - function IsSame(const that: ICefBinaryValue): Boolean; - function IsEqual(const that: ICefBinaryValue): Boolean; - function Copy: ICefBinaryValue; - function GetSize: NativeUInt; - function GetData(buffer: Pointer; bufferSize, dataOffset: NativeUInt): NativeUInt; - - property Size : NativeUInt read GetSize; - end; - - // TCefDictionaryValue - // /include/capi/cef_values_capi.h (cef_dictionary_value_t) - ICefDictionaryValue = interface(ICefBaseRefCounted) - ['{B9638559-54DC-498C-8185-233EEF12BC69}'] - function IsValid: Boolean; - function isOwned: Boolean; - function IsReadOnly: Boolean; - function IsSame(const that: ICefDictionaryValue): Boolean; - function IsEqual(const that: ICefDictionaryValue): Boolean; - function Copy(excludeEmptyChildren: Boolean): ICefDictionaryValue; - function GetSize: NativeUInt; - function Clear: Boolean; - function HasKey(const key: ustring): Boolean; - function GetKeys(const keys: TStrings): Boolean; - function Remove(const key: ustring): Boolean; - function GetType(const key: ustring): TCefValueType; - function GetValue(const key: ustring): ICefValue; - function GetBool(const key: ustring): Boolean; - function GetInt(const key: ustring): Integer; - function GetDouble(const key: ustring): Double; - function GetString(const key: ustring): ustring; - function GetBinary(const key: ustring): ICefBinaryValue; - function GetDictionary(const key: ustring): ICefDictionaryValue; - function GetList(const key: ustring): ICefListValue; - function SetValue(const key: ustring; const value: ICefValue): Boolean; - function SetNull(const key: ustring): Boolean; - function SetBool(const key: ustring; value: Boolean): Boolean; - function SetInt(const key: ustring; value: Integer): Boolean; - function SetDouble(const key: ustring; value: Double): Boolean; - function SetString(const key, value: ustring): Boolean; - function SetBinary(const key: ustring; const value: ICefBinaryValue): Boolean; - function SetDictionary(const key: ustring; const value: ICefDictionaryValue): Boolean; - function SetList(const key: ustring; const value: ICefListValue): Boolean; - end; - - // TCefListValue - // /include/capi/cef_values_capi.h (cef_list_value_t) - ICefListValue = interface(ICefBaseRefCounted) - ['{09174B9D-0CC6-4360-BBB0-3CC0117F70F6}'] - function IsValid: Boolean; - function IsOwned: Boolean; - function IsReadOnly: Boolean; - function IsSame(const that: ICefListValue): Boolean; - function IsEqual(const that: ICefListValue): Boolean; - function Copy: ICefListValue; - function SetSize(size: NativeUInt): Boolean; - function GetSize: NativeUInt; - function Clear: Boolean; - function Remove(index: NativeUInt): Boolean; - function GetType(index: NativeUInt): TCefValueType; - function GetValue(index: NativeUInt): ICefValue; - function GetBool(index: NativeUInt): Boolean; - function GetInt(index: NativeUInt): Integer; - function GetDouble(index: NativeUInt): Double; - function GetString(index: NativeUInt): ustring; - function GetBinary(index: NativeUInt): ICefBinaryValue; - function GetDictionary(index: NativeUInt): ICefDictionaryValue; - function GetList(index: NativeUInt): ICefListValue; - function SetValue(index: NativeUInt; const value: ICefValue): Boolean; - function SetNull(index: NativeUInt): Boolean; - function SetBool(index: NativeUInt; value: Boolean): Boolean; - function SetInt(index: NativeUInt; value: Integer): Boolean; - function SetDouble(index: NativeUInt; value: Double): Boolean; - function SetString(index: NativeUInt; const value: ustring): Boolean; - function SetBinary(index: NativeUInt; const value: ICefBinaryValue): Boolean; - function SetDictionary(index: NativeUInt; const value: ICefDictionaryValue): Boolean; - function SetList(index: NativeUInt; const value: ICefListValue): Boolean; - end; - - // TCefLifeSpanHandler - // /include/capi/cef_life_span_handler_capi.h (cef_life_span_handler_t) - ICefLifeSpanHandler = interface(ICefBaseRefCounted) - ['{0A3EB782-A319-4C35-9B46-09B2834D7169}'] - function OnBeforePopup(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean): Boolean; - procedure OnAfterCreated(const browser: ICefBrowser); - function DoClose(const browser: ICefBrowser): Boolean; - procedure OnBeforeClose(const browser: ICefBrowser); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefGetExtensionResourceCallback - // /include/capi/cef_extension_handler_capi.h (cef_get_extension_resource_callback_t) - ICefGetExtensionResourceCallback = interface(ICefBaseRefCounted) - ['{579C8602-8252-40D0-9E0A-501F32C36C42}'] - procedure cont(const stream: ICefStreamReader); - procedure cancel; - end; - - // TCefExtensionHandler - // /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t) - ICefExtensionHandler = interface(ICefBaseRefCounted) - ['{3234008F-D809-459D-963D-23BA50219648}'] - procedure OnExtensionLoadFailed(result: TCefErrorcode); - procedure OnExtensionLoaded(const extension: ICefExtension); - procedure OnExtensionUnloaded(const extension: ICefExtension); - function OnBeforeBackgroundBrowser(const extension: ICefExtension; const url: ustring; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; - function OnBeforeBrowser(const extension: ICefExtension; const browser, active_browser: ICefBrowser; index: Integer; const url: ustring; active: boolean; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; - function GetActiveBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean): ICefBrowser; - function CanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean; - function GetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean; - end; - - // TCefExtension - // /include/capi/cef_extension_capi.h (cef_extension_t) - ICefExtension = interface(ICefBaseRefCounted) - ['{D30D1C64-A26F-49C0-AEB7-C55EC68951CA}'] - function GetIdentifier : ustring; - function GetPath : ustring; - function GetManifest : ICefDictionaryValue; - function IsSame(const that : ICefExtension) : boolean; - function GetHandler : ICefExtensionHandler; - function GetLoaderContext : ICefRequestContext; - function IsLoaded : boolean; - procedure unload; - - property Identifier : ustring read GetIdentifier; - property Path : ustring read GetPath; - property Manifest : ICefDictionaryValue read GetManifest; - property Handler : ICefExtensionHandler read GetHandler; - property LoaderContext : ICefRequestContext read GetLoaderContext; - end; - - // TCefLoadHandler - // /include/capi/cef_load_handler_capi.h (cef_load_handler_t) - ICefLoadHandler = interface(ICefBaseRefCounted) - ['{2C63FB82-345D-4A5B-9858-5AE7A85C9F49}'] - procedure OnLoadingStateChange(const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); - procedure OnLoadStart(const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType); - procedure OnLoadEnd(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); - procedure OnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefRequestCallback - // /include/capi/cef_request_handler_capi.h (cef_request_callback_t) - ICefRequestCallback = interface(ICefBaseRefCounted) - ['{A35B8FD5-226B-41A8-A763-1940787D321C}'] - procedure Cont(allow: Boolean); - procedure Cancel; - end; - - // TCefResponseFilter - // /include/capi/cef_response_filter_capi.h (cef_response_filter_t) - ICefResponseFilter = interface(ICefBaseRefCounted) - ['{5013BC3C-F1AE-407A-A571-A4C6B1D6831E}'] - function InitFilter: Boolean; - function Filter(data_in: Pointer; data_in_size: NativeUInt; var data_in_read: NativeUInt; data_out: Pointer; data_out_size : NativeUInt; var data_out_written: NativeUInt): TCefResponseFilterStatus; - end; - - // TCefRequestHandler - // /include/capi/cef_request_handler_capi.h (cef_request_handler_t) - ICefRequestHandler = interface(ICefBaseRefCounted) - ['{050877A9-D1F8-4EB3-B58E-50DC3E3D39FD}'] - function OnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; - function OnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; - function OnBeforeResourceLoad(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const callback: ICefRequestCallback): TCefReturnValue; - function GetResourceHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): ICefResourceHandler; - procedure OnResourceRedirect(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; var newUrl: ustring); - function OnResourceResponse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): Boolean; - function GetResourceResponseFilter(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): ICefResponseFilter; - procedure OnResourceLoadComplete(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; status: TCefUrlRequestStatus; receivedContentLength: Int64); - function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; - function CanGetCookies(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): boolean; - function CanSetCookie(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const cookie : PCefCookie): boolean; - function OnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; - procedure OnProtocolExecution(const browser: ICefBrowser; const url: ustring; out allowOsExecution: Boolean); - function OnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; - function OnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; - procedure OnPluginCrashed(const browser: ICefBrowser; const pluginPath: ustring); - procedure OnRenderViewReady(const browser: ICefBrowser); - procedure OnRenderProcessTerminated(const browser: ICefBrowser; status: TCefTerminationStatus); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefDisplayHandler - // /include/capi/cef_display_handler_capi.h (cef_display_handler_t) - ICefDisplayHandler = interface(ICefBaseRefCounted) - ['{1EC7C76D-6969-41D1-B26D-079BCFF054C4}'] - procedure OnAddressChange(const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); - procedure OnTitleChange(const browser: ICefBrowser; const title: ustring); - procedure OnFaviconUrlChange(const browser: ICefBrowser; const icon_urls: TStrings); - procedure OnFullScreenModeChange(const browser: ICefBrowser; fullscreen: Boolean); - function OnTooltip(const browser: ICefBrowser; var text: ustring): Boolean; - procedure OnStatusMessage(const browser: ICefBrowser; const value: ustring); - function OnConsoleMessage(const browser: ICefBrowser; level: TCefLogSeverity; const message_, source: ustring; line: Integer): Boolean; - function OnAutoResize(const browser: ICefBrowser; const new_size: PCefSize): Boolean; - procedure OnLoadingProgressChange(const browser: ICefBrowser; const progress: double); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefFocusHandler - // /include/capi/cef_focus_handler_capi.h (cef_focus_handler_t) - ICefFocusHandler = interface(ICefBaseRefCounted) - ['{BB7FA3FA-7B1A-4ADC-8E50-12A24018DD90}'] - procedure OnTakeFocus(const browser: ICefBrowser; next: Boolean); - function OnSetFocus(const browser: ICefBrowser; source: TCefFocusSource): Boolean; - procedure OnGotFocus(const browser: ICefBrowser); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefKeyboardHandler - // /include/capi/cef_keyboard_handler_capi.h (cef_keyboard_handler_t) - ICefKeyboardHandler = interface(ICefBaseRefCounted) - ['{0512F4EC-ED88-44C9-90D3-5C6D03D3B146}'] - function OnPreKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: Boolean): Boolean; - function OnKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle): Boolean; - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefJsDialogHandler - // /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_handler_t) - ICefJsDialogHandler = interface(ICefBaseRefCounted) - ['{64E18F86-DAC5-4ED1-8589-44DE45B9DB56}'] - function OnJsdialog(const browser: ICefBrowser; const originUrl: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; const callback: ICefJsDialogCallback; out suppressMessage: Boolean): Boolean; - function OnBeforeUnloadDialog(const browser: ICefBrowser; const messageText: ustring; isReload: Boolean; const callback: ICefJsDialogCallback): Boolean; - procedure OnResetDialogState(const browser: ICefBrowser); - procedure OnDialogClosed(const browser: ICefBrowser); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefRunContextMenuCallback - // /include/capi/cef_context_menu_handler_capi.h (cef_run_context_menu_callback_t) - ICefRunContextMenuCallback = interface(ICefBaseRefCounted) - ['{44C3C6E3-B64D-4F6E-A318-4A0F3A72EB00}'] - procedure Cont(commandId: Integer; eventFlags: TCefEventFlags); - procedure Cancel; - end; - - // TCefContextMenuHandler - // /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t) - ICefContextMenuHandler = interface(ICefBaseRefCounted) - ['{C2951895-4087-49D5-BA18-4D9BA4F5EDD7}'] - procedure OnBeforeContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); - function RunContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel; const callback: ICefRunContextMenuCallback): Boolean; - function OnContextMenuCommand(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: TCefEventFlags): Boolean; - procedure OnContextMenuDismissed(const browser: ICefBrowser; const frame: ICefFrame); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefAccessibilityHandler - // /include/capi/cef_accessibility_handler_capi.h (cef_accessibility_handler_t) - ICefAccessibilityHandler = interface(ICefBaseRefCounted) - ['{1878C3C7-7692-44AB-BFE0-6C387106816B}'] - procedure OnAccessibilityTreeChange(const value: ICefValue); - procedure OnAccessibilityLocationChange(const value: ICefValue); - end; - - // TCefDialogHandler - // /include/capi/cef_dialog_handler_capi.h (cef_dialog_handler_t) - ICefDialogHandler = interface(ICefBaseRefCounted) - ['{7763F4B2-8BE1-4E80-AC43-8B825850DC67}'] - function OnFileDialog(const browser: ICefBrowser; mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefFileDialogCallback): Boolean; - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefRenderHandler - // /include/capi/cef_render_handler_capi.h (cef_render_handler_t) - ICefRenderHandler = interface(ICefBaseRefCounted) - ['{1FC1C22B-085A-4741-9366-5249B88EC410}'] - procedure GetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); - function GetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; - function GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; - function GetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; - function GetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; - procedure OnPopupShow(const browser: ICefBrowser; show: Boolean); - procedure OnPopupSize(const browser: ICefBrowser; const rect: PCefRect); - procedure OnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); - procedure OnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; CursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); - function OnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; - procedure OnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); - procedure OnScrollOffsetChanged(const browser: ICefBrowser; x, y: Double); - procedure OnIMECompositionRangeChanged(const browser: ICefBrowser; const selected_range: PCefRange; character_boundsCount: NativeUInt; const character_bounds: PCefRect); - procedure OnTextSelectionChanged(const browser: ICefBrowser; const selected_text: ustring; const selected_range: PCefRange); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefClient - // /include/capi/cef_client_capi.h (cef_client_t) - ICefClient = interface(ICefBaseRefCounted) - ['{1D502075-2FF0-4E13-A112-9E541CD811F4}'] - procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); - procedure GetDialogHandler(var aHandler : ICefDialogHandler); - procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); - procedure GetDownloadHandler(var aHandler : ICefDownloadHandler); - procedure GetDragHandler(var aHandler : ICefDragHandler); - procedure GetFindHandler(var aHandler : ICefFindHandler); - procedure GetFocusHandler(var aHandler : ICefFocusHandler); - procedure GetJsdialogHandler(var aHandler : ICefJsdialogHandler); - procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); - procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); - procedure GetLoadHandler(var aHandler : ICefLoadHandler); - procedure GetRenderHandler(var aHandler : ICefRenderHandler); - procedure GetRequestHandler(var aHandler : ICefRequestHandler); - function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefUrlRequest - // /include/capi/cef_urlrequest_capi.h (cef_urlrequest_t) - ICefUrlRequest = interface(ICefBaseRefCounted) - ['{59226AC1-A0FA-4D59-9DF4-A65C42391A67}'] - function GetRequest: ICefRequest; - function GetRequestStatus: TCefUrlRequestStatus; - function GetRequestError: Integer; - function GetResponse: ICefResponse; - function GetResponseWasCached: boolean; - procedure Cancel; - - property Request : ICefRequest read GetRequest; - property RequestStatus : TCefUrlRequestStatus read GetRequestStatus; - property RequestError : Integer read GetRequestError; - property Response : ICefResponse read GetResponse; - property ResponseWasCached : boolean read GetResponseWasCached; - end; - - // TCefUrlrequestClient - // /include/capi/cef_urlrequest_capi.h (cef_urlrequest_client_t) - ICefUrlrequestClient = interface(ICefBaseRefCounted) - ['{114155BD-C248-4651-9A4F-26F3F9A4F737}'] - procedure OnRequestComplete(const request: ICefUrlRequest); - procedure OnUploadProgress(const request: ICefUrlRequest; current, total: Int64); - procedure OnDownloadProgress(const request: ICefUrlRequest; current, total: Int64); - procedure OnDownloadData(const request: ICefUrlRequest; data: Pointer; dataLength: NativeUInt); - function OnGetAuthCredentials(isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; - end; - - // TCefWebPluginInfoVisitor - // /include/capi/cef_web_plugin_capi.h (cef_web_plugin_info_visitor_t) - ICefWebPluginInfoVisitor = interface(ICefBaseRefCounted) - ['{7523D432-4424-4804-ACAD-E67D2313436E}'] - function Visit(const info: ICefWebPluginInfo; count, total: Integer): Boolean; - end; - - // TCefWebPluginUnstableCallback - // /include/capi/cef_web_plugin_capi.h (cef_web_plugin_unstable_callback_t) - ICefWebPluginUnstableCallback = interface(ICefBaseRefCounted) - ['{67459829-EB47-4B7E-9D69-2EE77DF0E71E}'] - procedure IsUnstable(const path: ustring; unstable: Boolean); - end; - - // TCefRegisterCDMCallback - // /include/capi/cef_web_plugin_capi.h (cef_register_cdm_callback_t) - ICefRegisterCDMCallback = interface(ICefBaseRefCounted) - ['{6C39AB3B-F724-483F-ABA0-37F6E0AECF35}'] - procedure OnCDMRegistrationComplete(result: TCefCDMRegistrationError; const error_message: ustring); - end; - - // TCefEndTracingCallback - // /include/capi/cef_trace_capi.h (cef_end_tracing_callback_t) - ICefEndTracingCallback = interface(ICefBaseRefCounted) - ['{79020EBE-9D1D-49A6-9714-8778FE8929F2}'] - procedure OnEndTracingComplete(const tracingFile: ustring); - end; - - // TCefFileDialogCallback - // /include/capi/cef_dialog_handler_capi.h (cef_file_dialog_callback_t) - ICefFileDialogCallback = interface(ICefBaseRefCounted) - ['{1AF659AB-4522-4E39-9C52-184000D8E3C7}'] - procedure Cont(selectedAcceptFilter: Integer; const filePaths: TStrings); - procedure Cancel; - end; - - // TCefDragData - // /include/capi/cef_drag_data_capi.h (cef_drag_data_t) - ICefDragData = interface(ICefBaseRefCounted) - ['{FBB6A487-F633-4055-AB3E-6619EDE75683}'] - function Clone: ICefDragData; - function IsReadOnly: Boolean; - function IsLink: Boolean; - function IsFragment: Boolean; - function IsFile: Boolean; - function GetLinkUrl: ustring; - function GetLinkTitle: ustring; - function GetLinkMetadata: ustring; - function GetFragmentText: ustring; - function GetFragmentHtml: ustring; - function GetFragmentBaseUrl: ustring; - function GetFileName: ustring; - function GetFileContents(const writer: ICefStreamWriter): NativeUInt; - function GetFileNames(var names: TStrings): Integer; - procedure SetLinkUrl(const url: ustring); - procedure SetLinkTitle(const title: ustring); - procedure SetLinkMetadata(const data: ustring); - procedure SetFragmentText(const text: ustring); - procedure SetFragmentHtml(const html: ustring); - procedure SetFragmentBaseUrl(const baseUrl: ustring); - procedure ResetFileContents; - procedure AddFile(const path, displayName: ustring); - function GetImage : ICefImage; - function GetImageHotspot : TCefPoint; - function HasImage : boolean; - end; - - // TCefDragHandler - // /include/capi/cef_drag_handler_capi.h (cef_drag_handler_t) - ICefDragHandler = interface(ICefBaseRefCounted) - ['{59A89579-5B18-489F-A25C-5CC25FF831FC}'] - function OnDragEnter(const browser: ICefBrowser; const dragData: ICefDragData; mask: TCefDragOperations): Boolean; - procedure OnDraggableRegionsChanged(const browser: ICefBrowser; regionsCount: NativeUInt; regions: PCefDraggableRegionArray); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefFindHandler - // /include/capi/cef_find_handler_capi.h (cef_find_handler_t) - ICefFindHandler = interface(ICefBaseRefCounted) - ['{F20DF234-BD43-42B3-A80B-D354A9E5B787}'] - procedure OnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean); - - procedure RemoveReferences; // custom procedure to clear all references - end; - - // TCefRequestContextHandler - // /include/capi/cef_request_context_handler_capi.h (cef_request_context_handler_t) - ICefRequestContextHandler = interface(ICefBaseRefCounted) - ['{76EB1FA7-78DF-4FD5-ABB3-1CDD3E73A140}'] - procedure OnRequestContextInitialized(const request_context: ICefRequestContext); - function GetCookieManager: ICefCookieManager; - function OnBeforePluginLoad(const mimeType, pluginUrl:ustring; isMainFrame : boolean; const topOriginUrl: ustring; const pluginInfo: ICefWebPluginInfo; pluginPolicy: PCefPluginPolicy): Boolean; - end; - - // TCefResolveCallback - // /include/capi/cef_request_context_capi.h (cef_resolve_callback_t) - ICefResolveCallback = interface(ICefBaseRefCounted) - ['{0C0EA252-7968-4163-A1BE-A1453576DD06}'] - procedure OnResolveCompleted(result: TCefErrorCode; const resolvedIps: TStrings); - end; - - // TCefRequestContext - // /include/capi/cef_request_context_capi.h (cef_request_context_t) - ICefRequestContext = interface(ICefBaseRefCounted) - ['{5830847A-2971-4BD5-ABE6-21451F8923F7}'] - function IsSame(const other: ICefRequestContext): Boolean; - function IsSharingWith(const other: ICefRequestContext): Boolean; - function IsGlobal: Boolean; - function GetHandler: ICefRequestContextHandler; - function GetCachePath: ustring; - function GetDefaultCookieManager(const callback: ICefCompletionCallback): ICefCookieManager; - function GetDefaultCookieManagerProc(const callback: TCefCompletionCallbackProc): ICefCookieManager; - function RegisterSchemeHandlerFactory(const schemeName, domainName: ustring; const factory: ICefSchemeHandlerFactory): Boolean; - function ClearSchemeHandlerFactories: Boolean; - procedure PurgePluginListCache(reloadPages: Boolean); - function HasPreference(const name: ustring): Boolean; - function GetPreference(const name: ustring): ICefValue; - function GetAllPreferences(includeDefaults: Boolean): ICefDictionaryValue; - function CanSetPreference(const name: ustring): Boolean; - function SetPreference(const name: ustring; const value: ICefValue; out error: ustring): Boolean; - procedure ClearCertificateExceptions(const callback: ICefCompletionCallback); - procedure CloseAllConnections(const callback: ICefCompletionCallback); - procedure ResolveHost(const origin: ustring; const callback: ICefResolveCallback); - function ResolveHostCached(const origin: ustring; const resolvedIps: TStrings): TCefErrorCode; - procedure LoadExtension(const root_directory: ustring; const manifest: ICefDictionaryValue; const handler: ICefExtensionHandler); + function IsBackgroundHost : boolean; + + property Browser : ICefBrowser read GetBrowser; + property WindowHandle : TCefWindowHandle read GetWindowHandle; + property OpenerWindowHandle : TCefWindowHandle read GetOpenerWindowHandle; + property ZoomLevel : Double read GetZoomLevel write SetZoomLevel; + property RequestContext : ICefRequestContext read GetRequestContext; + property VisibleNavigationEntry : ICefNavigationEntry read GetVisibleNavigationEntry; + end; + + // TCefProcessMessage + // /include/capi/cef_process_message_capi.h (cef_process_message_t) + ICefProcessMessage = interface(ICefBaseRefCounted) + ['{E0B1001A-8777-425A-869B-29D40B8B93B1}'] + function IsValid: Boolean; + function IsReadOnly: Boolean; + function Copy: ICefProcessMessage; + function GetName: ustring; + function GetArgumentList: ICefListValue; + property Name: ustring read GetName; + property ArgumentList: ICefListValue read GetArgumentList; + end; + + // TCefBrowser + // /include/capi/cef_browser_capi.h (cef_browser_t) + ICefBrowser = interface(ICefBaseRefCounted) + ['{BA003C2E-CF15-458F-9D4A-FE3CEFCF3EEF}'] + function GetHost: ICefBrowserHost; + function CanGoBack: Boolean; + procedure GoBack; + function CanGoForward: Boolean; + procedure GoForward; + function IsLoading: Boolean; + procedure Reload; + procedure ReloadIgnoreCache; + procedure StopLoad; + function GetIdentifier: Integer; + function IsSame(const that: ICefBrowser): Boolean; + function IsPopup: Boolean; + function HasDocument: Boolean; + function GetMainFrame: ICefFrame; + function GetFocusedFrame: ICefFrame; + function GetFrameByident(const identifier: Int64): ICefFrame; + function GetFrame(const name: ustring): ICefFrame; + function GetFrameCount: NativeUInt; + function GetFrameIdentifiers(var aFrameCount : NativeUInt; var aFrameIdentifierArray : TCefFrameIdentifierArray) : boolean; + function GetFrameNames(var aFrameNames : TStrings) : boolean; + function SendProcessMessage(targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage): Boolean; + + property MainFrame : ICefFrame read GetMainFrame; + property FocusedFrame : ICefFrame read GetFocusedFrame; + property FrameCount : NativeUInt read GetFrameCount; + property Host : ICefBrowserHost read GetHost; + property Identifier : Integer read GetIdentifier; + end; + + // TCefPostDataElement + // /include/capi/cef_request_capi.h (cef_post_data_element_t) + ICefPostDataElement = interface(ICefBaseRefCounted) + ['{3353D1B8-0300-4ADC-8D74-4FF31C77D13C}'] + function IsReadOnly: Boolean; + procedure SetToEmpty; + procedure SetToFile(const fileName: ustring); + procedure SetToBytes(size: NativeUInt; const bytes: Pointer); + function GetType: TCefPostDataElementType; + function GetFile: ustring; + function GetBytesCount: NativeUInt; + function GetBytes(size: NativeUInt; bytes: Pointer): NativeUInt; + end; + + // TCefPostData + // /include/capi/cef_request_capi.h (cef_post_data_t) + ICefPostData = interface(ICefBaseRefCounted) + ['{1E677630-9339-4732-BB99-D6FE4DE4AEC0}'] + function IsReadOnly: Boolean; + function HasExcludedElements: Boolean; + function GetCount: NativeUInt; + function GetElements(Count: NativeUInt): IInterfaceList; // list of ICefPostDataElement + function RemoveElement(const element: ICefPostDataElement): Integer; + function AddElement(const element: ICefPostDataElement): Integer; + procedure RemoveElements; + end; + + // TCefRequest + // /include/capi/cef_request_capi.h (cef_request_t) + ICefRequest = interface(ICefBaseRefCounted) + ['{FB4718D3-7D13-4979-9F4C-D7F6C0EC592A}'] + function IsReadOnly: Boolean; + function GetUrl: ustring; + function GetMethod: ustring; + function GetPostData: ICefPostData; + procedure GetHeaderMap(const HeaderMap: ICefStringMultimap); + procedure SetUrl(const value: ustring); + procedure SetMethod(const value: ustring); + procedure SetReferrer(const referrerUrl: ustring; policy: TCefReferrerPolicy); + function GetReferrerUrl: ustring; + function GetReferrerPolicy: TCefReferrerPolicy; + procedure SetPostData(const value: ICefPostData); + procedure SetHeaderMap(const HeaderMap: ICefStringMultimap); + function GetFlags: TCefUrlRequestFlags; + procedure SetFlags(flags: TCefUrlRequestFlags); + function GetFirstPartyForCookies: ustring; + procedure SetFirstPartyForCookies(const url: ustring); + procedure Assign(const url, method: ustring; const postData: ICefPostData; const headerMap: ICefStringMultimap); + function GetResourceType: TCefResourceType; + function GetTransitionType: TCefTransitionType; + function GetIdentifier: UInt64; + + property Url : ustring read GetUrl write SetUrl; + property Method : ustring read GetMethod write SetMethod; + property ReferrerUrl : ustring read GetReferrerUrl; + property ReferrerPolicy : TCefReferrerPolicy read GetReferrerPolicy; + property PostData : ICefPostData read GetPostData write SetPostData; + property Flags : TCefUrlRequestFlags read GetFlags write SetFlags; + property FirstPartyForCookies : ustring read GetFirstPartyForCookies write SetFirstPartyForCookies; + property ResourceType : TCefResourceType read GetResourceType; + property TransitionType : TCefTransitionType read GetTransitionType; + property Identifier : UInt64 read GetIdentifier; + end; + + // TCefStringVisitor + // /include/capi/cef_string_visitor_capi.h (cef_string_visitor_t) + ICefStringVisitor = interface(ICefBaseRefCounted) + ['{63ED4D6C-2FC8-4537-964B-B84C008F6158}'] + procedure Visit(const str: ustring); + end; + + // TCefFrame + // /include/capi/cef_frame_capi.h (cef_frame_t) + ICefFrame = interface(ICefBaseRefCounted) + ['{8FD3D3A6-EA3A-4A72-8501-0276BD5C3D1D}'] + function IsValid: Boolean; + procedure Undo; + procedure Redo; + procedure Cut; + procedure Copy; + procedure Paste; + procedure Del; + procedure SelectAll; + procedure ViewSource; + procedure GetSource(const visitor: ICefStringVisitor); + procedure GetSourceProc(const proc: TCefStringVisitorProc); + procedure GetText(const visitor: ICefStringVisitor); + procedure GetTextProc(const proc: TCefStringVisitorProc); + procedure LoadRequest(const request: ICefRequest); + procedure LoadUrl(const url: ustring); + procedure LoadString(const str, url: ustring); + procedure ExecuteJavaScript(const code, scriptUrl: ustring; startLine: Integer); + function IsMain: Boolean; + function IsFocused: Boolean; + function GetName: ustring; + function GetIdentifier: Int64; + function GetParent: ICefFrame; + function GetUrl: ustring; + function GetBrowser: ICefBrowser; + function GetV8Context: ICefv8Context; + procedure VisitDom(const visitor: ICefDomVisitor); + procedure VisitDomProc(const proc: TCefDomVisitorProc); + + property Name : ustring read GetName; + property Url : ustring read GetUrl; + property Browser : ICefBrowser read GetBrowser; + property Parent : ICefFrame read GetParent; + property Identifier : int64 read GetIdentifier; + end; + + // TCefStreamReader + // /include/capi/cef_stream_capi.h (cef_stream_reader_t) + ICefCustomStreamReader = interface(ICefBaseRefCounted) + ['{BBCFF23A-6FE7-4C28-B13E-6D2ACA5C83B7}'] + function Read(ptr: Pointer; size, n: NativeUInt): NativeUInt; + function Seek(offset: Int64; whence: Integer): Integer; + function Tell: Int64; + function Eof: Boolean; + function MayBlock: Boolean; + end; + + // TCefStreamReader + // /include/capi/cef_stream_capi.h (cef_stream_reader_t) + ICefStreamReader = interface(ICefBaseRefCounted) + ['{DD5361CB-E558-49C5-A4BD-D1CE84ADB277}'] + function Read(ptr: Pointer; size, n: NativeUInt): NativeUInt; + function Seek(offset: Int64; whence: Integer): Integer; + function Tell: Int64; + function Eof: Boolean; + function MayBlock: Boolean; + end; + + // TCefWriteHandler + // /include/capi/cef_stream_capi.h (cef_write_handler_t) + ICefWriteHandler = interface(ICefBaseRefCounted) + ['{F2431888-4EAB-421E-9EC3-320BE695AF30}'] + function Write(const ptr: Pointer; size, n: NativeUInt): NativeUInt; + function Seek(offset: Int64; whence: Integer): Integer; + function Tell: Int64; + function Flush: Integer; + function MayBlock: Boolean; + end; + + // TCefStreamWriter + // /include/capi/cef_stream_capi.h (cef_stream_writer_t) + ICefStreamWriter = interface(ICefBaseRefCounted) + ['{4AA6C477-7D8A-4D5A-A704-67F900A827E7}'] + function Write(const ptr: Pointer; size, n: NativeUInt): NativeUInt; + function Seek(offset: Int64; whence: Integer): Integer; + function Tell: Int64; + function Flush: Integer; + function MayBlock: Boolean; + end; + + // TCefResponse + // /include/capi/cef_response_capi.h (cef_response_t) + ICefResponse = interface(ICefBaseRefCounted) + ['{E9C896E4-59A8-4B96-AB5E-6EA3A498B7F1}'] + function IsReadOnly: Boolean; + function GetError: TCefErrorCode; + procedure SetError(error: TCefErrorCode); + function GetStatus: Integer; + procedure SetStatus(status: Integer); + function GetStatusText: ustring; + procedure SetStatusText(const StatusText: ustring); + function GetMimeType: ustring; + procedure SetMimeType(const mimetype: ustring); + function GetHeader(const name: ustring): ustring; + procedure GetHeaderMap(const headerMap: ICefStringMultimap); + procedure SetHeaderMap(const headerMap: ICefStringMultimap); + function GetURL: ustring; + procedure SetURL(const url: ustring); + + property Status : Integer read GetStatus write SetStatus; + property StatusText : ustring read GetStatusText write SetStatusText; + property MimeType : ustring read GetMimeType write SetMimeType; + property Error : TCefErrorCode read GetError write SetError; + property URL : ustring read GetURL write SetURL; + end; + + // TCefDownloadItem + // /include/capi/cef_download_item_capi.h (cef_download_item_t) + ICefDownloadItem = interface(ICefBaseRefCounted) + ['{B34BD320-A82E-4185-8E84-B98E5EEC803F}'] + function IsValid: Boolean; + function IsInProgress: Boolean; + function IsComplete: Boolean; + function IsCanceled: Boolean; + function GetCurrentSpeed: Int64; + function GetPercentComplete: Integer; + function GetTotalBytes: Int64; + function GetReceivedBytes: Int64; + function GetStartTime: TDateTime; + function GetEndTime: TDateTime; + function GetFullPath: ustring; + function GetId: Cardinal; + function GetUrl: ustring; + function GetOriginalUrl: ustring; + function GetSuggestedFileName: ustring; + function GetContentDisposition: ustring; + function GetMimeType: ustring; + + property CurrentSpeed : Int64 read GetCurrentSpeed; + property PercentComplete : Integer read GetPercentComplete; + property TotalBytes : Int64 read GetTotalBytes; + property ReceivedBytes : Int64 read GetReceivedBytes; + property StartTime : TDateTime read GetStartTime; + property EndTime : TDateTime read GetEndTime; + property FullPath : ustring read GetFullPath; + property Id : Cardinal read GetId; + property Url : ustring read GetUrl; + property OriginalUrl : ustring read GetOriginalUrl; + property SuggestedFileName : ustring read GetSuggestedFileName; + property ContentDisposition : ustring read GetContentDisposition; + property MimeType : ustring read GetMimeType; + end; + + // TCefBeforeDownloadCallback + // /include/capi/cef_download_handler_capi.h (cef_before_download_callback_t) + ICefBeforeDownloadCallback = interface(ICefBaseRefCounted) + ['{5A81AF75-CBA2-444D-AD8E-522160F36433}'] + procedure Cont(const downloadPath: ustring; showDialog: Boolean); + end; + + // TCefDownloadItemCallback + // /include/capi/cef_download_handler_capi.h (cef_download_item_callback_t) + ICefDownloadItemCallback = interface(ICefBaseRefCounted) + ['{498F103F-BE64-4D5F-86B7-B37EC69E1735}'] + procedure Cancel; + procedure Pause; + procedure Resume; + end; + + // TCefDownloadHandler + // /include/capi/cef_download_handler_capi.h (cef_download_handler_t) + ICefDownloadHandler = interface(ICefBaseRefCounted) + ['{3137F90A-5DC5-43C1-858D-A269F28EF4F1}'] + procedure OnBeforeDownload(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback); + procedure OnDownloadUpdated(const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefV8Exception + // /include/capi/cef_v8_capi.h (cef_v8exception_t) + ICefV8Exception = interface(ICefBaseRefCounted) + ['{7E422CF0-05AC-4A60-A029-F45105DCE6A4}'] + function GetMessage: ustring; + function GetSourceLine: ustring; + function GetScriptResourceName: ustring; + function GetLineNumber: Integer; + function GetStartPosition: Integer; + function GetEndPosition: Integer; + function GetStartColumn: Integer; + function GetEndColumn: Integer; + + property Message : ustring read GetMessage; + property SourceLine : ustring read GetSourceLine; + property ScriptResourceName : ustring read GetScriptResourceName; + property LineNumber : Integer read GetLineNumber; + property StartPosition : Integer read GetStartPosition; + property EndPosition : Integer read GetEndPosition; + property StartColumn : Integer read GetStartColumn; + property EndColumn : Integer read GetEndColumn; + end; + + // TCefv8ArrayBufferReleaseCallback + // /include/capi/cef_v8_capi.h (cef_v8array_buffer_release_callback_t) + ICefv8ArrayBufferReleaseCallback = interface(ICefBaseRefCounted) + ['{4EAAB422-D046-43DF-B1F0-5503116A5816}'] + procedure ReleaseBuffer(buffer : Pointer); + end; + + // TCefV8Context + // /include/capi/cef_v8_capi.h (cef_v8context_t) + ICefv8Context = interface(ICefBaseRefCounted) + ['{2295A11A-8773-41F2-AD42-308C215062D9}'] + function GetTaskRunner: ICefTaskRunner; + function IsValid: Boolean; + function GetBrowser: ICefBrowser; + function GetFrame: ICefFrame; + function GetGlobal: ICefv8Value; + function Enter: Boolean; + function Exit: Boolean; + function IsSame(const that: ICefv8Context): Boolean; + function Eval(const code: ustring; const script_url: ustring; start_line: integer; var retval: ICefv8Value; var exception: ICefV8Exception): Boolean; + + property Browser : ICefBrowser read GetBrowser; + property Frame : ICefFrame read GetFrame; + property Global : ICefv8Value read GetGlobal; + end; + + // TCefv8Handler + // /include/capi/cef_v8_capi.h (cef_v8handler_t) + ICefv8Handler = interface(ICefBaseRefCounted) + ['{F94CDC60-FDCB-422D-96D5-D2A775BD5D73}'] + function Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean; + end; + + // TCefV8Interceptor + // /include/capi/cef_v8_capi.h (cef_v8interceptor_t) + ICefV8Interceptor = interface(ICefBaseRefCounted) + ['{B3B8FD7C-A916-4B25-93A2-2892AC324F21}'] + function GetByName(const name: ustring; const obj: ICefv8Value; out retval: ICefv8Value; const exception: ustring): boolean; + function GetByIndex(index: integer; const obj: ICefv8Value; out retval: ICefv8Value; const exception: ustring): boolean; + function SetByName(const name: ustring; const obj, value: ICefv8Value; const exception: ustring): boolean; + function SetByIndex(index: integer; const obj, value: ICefv8Value; const exception: ustring): boolean; + end; + + // TCefV8Accessor + // /include/capi/cef_v8_capi.h (cef_v8accessor_t) + ICefV8Accessor = interface(ICefBaseRefCounted) + ['{DCA6D4A2-726A-4E24-AA64-5E8C731D868A}'] + function Get(const name: ustring; const obj: ICefv8Value; out retval: ICefv8Value; var exception: ustring): Boolean; + function Put(const name: ustring; const obj, value: ICefv8Value; var exception: ustring): Boolean; + end; + + // TCefTask + // /include/capi/cef_task_capi.h (cef_task_t) + ICefTask = interface(ICefBaseRefCounted) + ['{0D965470-4A86-47CE-BD39-A8770021AD7E}'] + procedure Execute; + end; + + // TCefTaskRunner + // /include/capi/cef_task_capi.h (cef_task_runner_t) + ICefTaskRunner = interface(ICefBaseRefCounted) + ['{6A500FA3-77B7-4418-8EA8-6337EED1337B}'] + function IsSame(const that: ICefTaskRunner): Boolean; + function BelongsToCurrentThread: Boolean; + function BelongsToThread(threadId: TCefThreadId): Boolean; + function PostTask(const task: ICefTask): Boolean; + function PostDelayedTask(const task: ICefTask; delayMs: Int64): Boolean; + end; + + // TCefThread + // /include/capi/cef_thread_capi.h (cef_thread_t) + ICefThread = interface(ICefBaseRefCounted) + ['{26B30EA5-F44A-4C40-97DF-67FD9E73A4FF}'] + function GetTaskRunner : ICefTaskRunner; + function GetPlatformThreadID : TCefPlatformThreadId; + procedure Stop; + function IsRunning : boolean; + end; + + // TCefWaitableEvent + // /include/capi/cef_waitable_event_capi.h (cef_waitable_event_t) + ICefWaitableEvent = interface(ICefBaseRefCounted) + ['{965C90C9-3DAE-457F-AA64-E04FF508094A}'] + procedure Reset; + procedure Signal; + function IsSignaled : boolean; + procedure Wait; + function TimedWait(max_ms: int64): boolean; + end; + + // TCefv8Value + // /include/capi/cef_v8_capi.h (cef_v8value_t) + ICefv8Value = interface(ICefBaseRefCounted) + ['{52319B8D-75A8-422C-BD4B-16FA08CC7F42}'] + function IsValid: Boolean; + function IsUndefined: Boolean; + function IsNull: Boolean; + function IsBool: Boolean; + function IsInt: Boolean; + function IsUInt: Boolean; + function IsDouble: Boolean; + function IsDate: Boolean; + function IsString: Boolean; + function IsObject: Boolean; + function IsArray: Boolean; + function IsArrayBuffer: Boolean; + function IsFunction: Boolean; + function IsSame(const that: ICefv8Value): Boolean; + function GetBoolValue: Boolean; + function GetIntValue: Integer; + function GetUIntValue: Cardinal; + function GetDoubleValue: Double; + function GetDateValue: TDateTime; + function GetStringValue: ustring; + function IsUserCreated: Boolean; + function HasException: Boolean; + function GetException: ICefV8Exception; + function ClearException: Boolean; + function WillRethrowExceptions: Boolean; + function SetRethrowExceptions(rethrow: Boolean): Boolean; + function HasValueByKey(const key: ustring): Boolean; + function HasValueByIndex(index: Integer): Boolean; + function DeleteValueByKey(const key: ustring): Boolean; + function DeleteValueByIndex(index: Integer): Boolean; + function GetValueByKey(const key: ustring): ICefv8Value; + function GetValueByIndex(index: Integer): ICefv8Value; + function SetValueByKey(const key: ustring; const value: ICefv8Value; attribute: TCefV8PropertyAttributes): Boolean; + function SetValueByIndex(index: Integer; const value: ICefv8Value): Boolean; + function SetValueByAccessor(const key: ustring; settings: TCefV8AccessControls; attribute: TCefV8PropertyAttributes): Boolean; + function GetKeys(const keys: TStrings): Integer; + function SetUserData(const data: ICefv8Value): Boolean; + function GetUserData: ICefv8Value; + function GetExternallyAllocatedMemory: Integer; + function AdjustExternallyAllocatedMemory(changeInBytes: Integer): Integer; + function GetArrayLength: Integer; + function GetArrayBufferReleaseCallback : ICefv8ArrayBufferReleaseCallback; + function NeuterArrayBuffer : boolean; + function GetFunctionName: ustring; + function GetFunctionHandler: ICefv8Handler; + function ExecuteFunction(const obj: ICefv8Value; const arguments: TCefv8ValueArray): ICefv8Value; + function ExecuteFunctionWithContext(const context: ICefv8Context; const obj: ICefv8Value; const arguments: TCefv8ValueArray): ICefv8Value; + end; + + // TCefV8StackFrame + // /include/capi/cef_v8_capi.h (cef_v8stack_frame_t) + ICefV8StackFrame = interface(ICefBaseRefCounted) + ['{BA1FFBF4-E9F2-4842-A827-DC220F324286}'] + function IsValid: Boolean; + function GetScriptName: ustring; + function GetScriptNameOrSourceUrl: ustring; + function GetFunctionName: ustring; + function GetLineNumber: Integer; + function GetColumn: Integer; + function IsEval: Boolean; + function IsConstructor: Boolean; + + property ScriptName : ustring read GetScriptName; + property ScriptNameOrSourceUrl : ustring read GetScriptNameOrSourceUrl; + property FunctionName : ustring read GetFunctionName; + property LineNumber : Integer read GetLineNumber; + property Column : Integer read GetColumn; + end; + + // TCefV8StackTrace + // /include/capi/cef_v8_capi.h (cef_v8stack_trace_t) + ICefV8StackTrace = interface(ICefBaseRefCounted) + ['{32111C84-B7F7-4E3A-92B9-7CA1D0ADB613}'] + function IsValid: Boolean; + function GetFrameCount: Integer; + function GetFrame(index: Integer): ICefV8StackFrame; + + property FrameCount : Integer read GetFrameCount; + property Frame[index: Integer] : ICefV8StackFrame read GetFrame; + end; + + // TCefXmlReader + // /include/capi/cef_xml_reader_capi.h (cef_xml_reader_t) + ICefXmlReader = interface(ICefBaseRefCounted) + ['{0DE686C3-A8D7-45D2-82FD-92F7F4E62A90}'] + function MoveToNextNode: Boolean; + function Close: Boolean; + function HasError: Boolean; + function GetError: ustring; + function GetType: TCefXmlNodeType; + function GetDepth: Integer; + function GetLocalName: ustring; + function GetPrefix: ustring; + function GetQualifiedName: ustring; + function GetNamespaceUri: ustring; + function GetBaseUri: ustring; + function GetXmlLang: ustring; + function IsEmptyElement: Boolean; + function HasValue: Boolean; + function GetValue: ustring; + function HasAttributes: Boolean; + function GetAttributeCount: NativeUInt; + function GetAttributeByIndex(index: Integer): ustring; + function GetAttributeByQName(const qualifiedName: ustring): ustring; + function GetAttributeByLName(const localName, namespaceURI: ustring): ustring; + function GetInnerXml: ustring; + function GetOuterXml: ustring; + function GetLineNumber: Integer; + function MoveToAttributeByIndex(index: Integer): Boolean; + function MoveToAttributeByQName(const qualifiedName: ustring): Boolean; + function MoveToAttributeByLName(const localName, namespaceURI: ustring): Boolean; + function MoveToFirstAttribute: Boolean; + function MoveToNextAttribute: Boolean; + function MoveToCarryingElement: Boolean; + end; + + // TCefZipReader + // /include/capi/cef_zip_reader_capi.h (cef_zip_reader_t) + ICefZipReader = interface(ICefBaseRefCounted) + ['{3B6C591F-9877-42B3-8892-AA7B27DA34A8}'] + function MoveToFirstFile: Boolean; + function MoveToNextFile: Boolean; + function MoveToFile(const fileName: ustring; caseSensitive: Boolean): Boolean; + function Close: Boolean; + function GetFileName: ustring; + function GetFileSize: Int64; + function GetFileLastModified: TCefTime; + function OpenFile(const password: ustring): Boolean; + function CloseFile: Boolean; + function ReadFile(buffer: Pointer; bufferSize: NativeUInt): Integer; + function Tell: Int64; + function Eof: Boolean; + end; + + // TCefDomNode + // /include/capi/cef_dom_capi.h (cef_domnode_t) + ICefDomNode = interface(ICefBaseRefCounted) + ['{96C03C9E-9C98-491A-8DAD-1947332232D6}'] + function GetType: TCefDomNodeType; + function IsText: Boolean; + function IsElement: Boolean; + function IsEditable: Boolean; + function IsFormControlElement: Boolean; + function GetFormControlElementType: ustring; + function IsSame(const that: ICefDomNode): Boolean; + function GetName: ustring; + function GetValue: ustring; + function SetValue(const value: ustring): Boolean; + function GetAsMarkup: ustring; + function GetDocument: ICefDomDocument; + function GetParent: ICefDomNode; + function GetPreviousSibling: ICefDomNode; + function GetNextSibling: ICefDomNode; + function HasChildren: Boolean; + function GetFirstChild: ICefDomNode; + function GetLastChild: ICefDomNode; + function GetElementTagName: ustring; + function HasElementAttributes: Boolean; + function HasElementAttribute(const attrName: ustring): Boolean; + function GetElementAttribute(const attrName: ustring): ustring; + procedure GetElementAttributes(const attrMap: ICefStringMap); + function SetElementAttribute(const attrName, value: ustring): Boolean; + function GetElementInnerText: ustring; + function GetElementBounds: TCefRect; + + property NodeType : TCefDomNodeType read GetType; + property Name : ustring read GetName; + property AsMarkup : ustring read GetAsMarkup; + property Document : ICefDomDocument read GetDocument; + property Parent : ICefDomNode read GetParent; + property PreviousSibling : ICefDomNode read GetPreviousSibling; + property NextSibling : ICefDomNode read GetNextSibling; + property FirstChild : ICefDomNode read GetFirstChild; + property LastChild : ICefDomNode read GetLastChild; + property ElementTagName : ustring read GetElementTagName; + property ElementInnerText : ustring read GetElementInnerText; + property ElementBounds : TCefRect read GetElementBounds; + end; + + // TCefDomDocument + // /include/capi/cef_dom_capi.h (cef_domdocument_t) + ICefDomDocument = interface(ICefBaseRefCounted) + ['{08E74052-45AF-4F69-A578-98A5C3959426}'] + function GetType: TCefDomDocumentType; + function GetDocument: ICefDomNode; + function GetBody: ICefDomNode; + function GetHead: ICefDomNode; + function GetTitle: ustring; + function GetElementById(const id: ustring): ICefDomNode; + function GetFocusedNode: ICefDomNode; + function HasSelection: Boolean; + function GetSelectionStartOffset: Integer; + function GetSelectionEndOffset: Integer; + function GetSelectionAsMarkup: ustring; + function GetSelectionAsText: ustring; + function GetBaseUrl: ustring; + function GetCompleteUrl(const partialURL: ustring): ustring; + + property DocType : TCefDomDocumentType read GetType; + property Document : ICefDomNode read GetDocument; + property Body : ICefDomNode read GetBody; + property Head : ICefDomNode read GetHead; + property Title : ustring read GetTitle; + property FocusedNode : ICefDomNode read GetFocusedNode; + property SelectionStartOffset : Integer read GetSelectionStartOffset; + property SelectionEndOffset : Integer read GetSelectionEndOffset; + property SelectionAsMarkup : ustring read GetSelectionAsMarkup; + property SelectionAsText : ustring read GetSelectionAsText; + property BaseUrl : ustring read GetBaseUrl; + end; + + // TCefDomVisitor + // /include/capi/cef_dom_capi.h (cef_domvisitor_t) + ICefDomVisitor = interface(ICefBaseRefCounted) + ['{30398428-3196-4531-B968-2DDBED36F6B0}'] + procedure visit(const document: ICefDomDocument); + end; + + // TCefCookieVisitor + // /include/capi/cef_cookie_capi.h (cef_cookie_visitor_t) + ICefCookieVisitor = interface(ICefBaseRefCounted) + ['{8378CF1B-84AB-4FDB-9B86-34DDABCCC402}'] + function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; out deleteCookie: Boolean): Boolean; + end; + + // TCefCommandLine + // /include/capi/cef_command_line_capi.h (cef_command_line_t) + ICefCommandLine = interface(ICefBaseRefCounted) + ['{6B43D21B-0F2C-4B94-B4E6-4AF0D7669D8E}'] + function IsValid: Boolean; + function IsReadOnly: Boolean; + function Copy: ICefCommandLine; + procedure InitFromArgv(argc: Integer; const argv: PPAnsiChar); + procedure InitFromString(const commandLine: ustring); + procedure Reset; + function GetCommandLineString: ustring; + procedure GetArgv(var args: TStrings); + function GetProgram: ustring; + procedure SetProgram(const prog: ustring); + function HasSwitches: Boolean; + function HasSwitch(const name: ustring): Boolean; + function GetSwitchValue(const name: ustring): ustring; + procedure GetSwitches(var switches: TStrings); + procedure AppendSwitch(const name: ustring); + procedure AppendSwitchWithValue(const name, value: ustring); + function HasArguments: Boolean; + procedure GetArguments(var arguments: TStrings); + procedure AppendArgument(const argument: ustring); + procedure PrependWrapper(const wrapper: ustring); + + property CommandLineString : ustring read GetCommandLineString; + end; + + // TCefResourceBundleHandler + // /include/capi/cef_resource_bundle_handler_capi.h (cef_resource_bundle_handler_t) + ICefResourceBundleHandler = interface(ICefBaseRefCounted) + ['{09C264FD-7E03-41E3-87B3-4234E82B5EA2}'] + function GetLocalizedString(stringId: Integer; var stringVal: ustring): Boolean; + function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; + function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; + end; + + // TCefBrowserProcessHandler + // /include/capi/cef_browser_process_handler_capi.h (cef_browser_process_handler_t) + ICefBrowserProcessHandler = interface(ICefBaseRefCounted) + ['{27291B7A-C0AE-4EE0-9115-15C810E22F6C}'] + procedure OnContextInitialized; + procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); + procedure OnRenderProcessThreadCreated(const extraInfo: ICefListValue); + procedure GetPrintHandler(var aHandler : ICefPrintHandler); + procedure OnScheduleMessagePumpWork(const delayMs: Int64); + end; + + // TCefRenderProcessHandler + // /include/capi/cef_render_process_handler_capi.h (cef_render_process_handler_t) + ICefRenderProcessHandler = interface(ICefBaseRefCounted) + ['{FADEE3BC-BF66-430A-BA5D-1EE3782ECC58}'] + procedure OnRenderThreadCreated(const extraInfo: ICefListValue); + procedure OnWebKitInitialized; + procedure OnBrowserCreated(const browser: ICefBrowser); + procedure OnBrowserDestroyed(const browser: ICefBrowser); + function GetLoadHandler : ICefLoadHandler; + procedure OnContextCreated(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context); + procedure OnContextReleased(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context); + procedure OnUncaughtException(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context; const V8Exception: ICefV8Exception; const stackTrace: ICefV8StackTrace); + procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode); + function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage): Boolean; + end; + + // TCefApp + // /include/capi/cef_app_capi.h (cef_app_t) + ICefApp = interface(ICefBaseRefCounted) + ['{970CA670-9070-4642-B188-7D8A22DAEED4}'] + procedure OnBeforeCommandLineProcessing(const processType: ustring; const commandLine: ICefCommandLine); + procedure OnRegisterCustomSchemes(const registrar: TCefSchemeRegistrarRef); + procedure GetResourceBundleHandler(var aHandler : ICefResourceBundleHandler); + procedure GetBrowserProcessHandler(var aHandler : ICefBrowserProcessHandler); + procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler); + end; + + // TCefCompletionCallback + // /include/capi/cef_callback_capi.h (cef_completion_callback_t) + ICefCompletionCallback = interface(ICefBaseRefCounted) + ['{A8ECCFBB-FEE0-446F-AB32-AD69A7478D57}'] + procedure OnComplete; + end; + + // TCefSetCookieCallback + // /include/capi/cef_cookie_capi.h (cef_set_cookie_callback_t) + ICefSetCookieCallback = interface(ICefBaseRefCounted) + ['{16E14B6F-CB0A-4F9D-A008-239E0BC7B892}'] + procedure OnComplete(success: Boolean); + end; + + // TCefDeleteCookiesCallback + // /include/capi/cef_cookie_capi.h (cef_delete_cookies_callback_t) + ICefDeleteCookiesCallback = interface(ICefBaseRefCounted) + ['{758B79A1-B9E8-4F0D-94A0-DCE5AFADE33D}'] + procedure OnComplete(numDeleted: Integer); + end; + + // TCefCookieManager + // /include/capi/cef_cookie_capi.h (cef_cookie_manager_t) + ICefCookieManager = Interface(ICefBaseRefCounted) + ['{CC1749E6-9AD3-4283-8430-AF6CBF3E8785}'] + procedure SetSupportedSchemes(const schemes: TStrings; const callback: ICefCompletionCallback); + procedure SetSupportedSchemesProc(const schemes: TStrings; const callback: TCefCompletionCallbackProc); + function VisitAllCookies(const visitor: ICefCookieVisitor): Boolean; + function VisitAllCookiesProc(const visitor: TCefCookieVisitorProc): Boolean; + function VisitUrlCookies(const url: ustring; includeHttpOnly: Boolean; const visitor: ICefCookieVisitor): Boolean; + function VisitUrlCookiesProc(const url: ustring; includeHttpOnly: Boolean; const visitor: TCefCookieVisitorProc): Boolean; + function SetCookie(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: ICefSetCookieCallback): Boolean; + function SetCookieProc(const url: ustring; const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; const callback: TCefSetCookieCallbackProc): Boolean; + function DeleteCookies(const url, cookieName: ustring; const callback: ICefDeleteCookiesCallback): Boolean; + function DeleteCookiesProc(const url, cookieName: ustring; const callback: TCefDeleteCookiesCallbackProc): Boolean; + function SetStoragePath(const path: ustring; persistSessionCookies: Boolean; const callback: ICefCompletionCallback): Boolean; + function SetStoragePathProc(const path: ustring; persistSessionCookies: Boolean; const callback: TCefCompletionCallbackProc): Boolean; + function FlushStore(const handler: ICefCompletionCallback): Boolean; + function FlushStoreProc(const proc: TCefCompletionCallbackProc): Boolean; + end; + + // TCefWebPluginInfo + // /include/capi/cef_web_plugin_capi.h (cef_web_plugin_info_t) + ICefWebPluginInfo = interface(ICefBaseRefCounted) + ['{AA879E58-F649-44B1-AF9C-655FF5B79A02}'] + function GetName: ustring; + function GetPath: ustring; + function GetVersion: ustring; + function GetDescription: ustring; + + property Name : ustring read GetName; + property Path : ustring read GetPath; + property Version : ustring read GetVersion; + property Description : ustring read GetDescription; + end; + + // TCefCallback + // /include/capi/cef_callback_capi.h (cef_callback_t) + ICefCallback = interface(ICefBaseRefCounted) + ['{1B8C449F-E2D6-4B78-9BBA-6F47E8BCDF37}'] + procedure Cont; + procedure Cancel; + end; + + // TCefResourceHandler + // /include/capi/cef_resource_handler_capi.h (cef_resource_handler_t) + ICefResourceHandler = interface(ICefBaseRefCounted) + ['{BD3EA208-AAAD-488C-BFF2-76993022F2B5}'] + function ProcessRequest(const request: ICefRequest; const callback: ICefCallback): Boolean; + procedure GetResponseHeaders(const response: ICefResponse; out responseLength: Int64; out redirectUrl: ustring); + function ReadResponse(const dataOut: Pointer; bytesToRead: Integer; var bytesRead: Integer; const callback: ICefCallback): Boolean; + function CanGetCookie(const cookie: PCefCookie): Boolean; + function CanSetCookie(const cookie: PCefCookie): Boolean; + procedure Cancel; + end; + + // TCefSchemeHandlerFactory + // /include/capi/cef_scheme_capi.h (cef_scheme_handler_factory_t) + ICefSchemeHandlerFactory = interface(ICefBaseRefCounted) + ['{4D9B7960-B73B-4EBD-9ABE-6C1C43C245EB}'] + function New(const browser: ICefBrowser; const frame: ICefFrame; const schemeName: ustring; const request: ICefRequest): ICefResourceHandler; + end; + + // TCefAuthCallback + // /include/capi/cef_auth_callback_capi.h (cef_auth_callback_t) + ICefAuthCallback = interface(ICefBaseRefCounted) + ['{500C2023-BF4D-4FF7-9C04-165E5C389131}'] + procedure Cont(const username, password: ustring); + procedure Cancel; + end; + + // TCefJsDialogCallback + // /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_callback_t) + ICefJsDialogCallback = interface(ICefBaseRefCounted) + ['{187B2156-9947-4108-87AB-32E559E1B026}'] + procedure Cont(success: Boolean; const userInput: ustring); + end; + + // TCefContextMenuParams + // /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_params_t) + ICefContextMenuParams = interface(ICefBaseRefCounted) + ['{E31BFA9E-D4E2-49B7-A05D-20018C8794EB}'] + function GetXCoord: Integer; + function GetYCoord: Integer; + function GetTypeFlags: TCefContextMenuTypeFlags; + function GetLinkUrl: ustring; + function GetUnfilteredLinkUrl: ustring; + function GetSourceUrl: ustring; + function HasImageContents: Boolean; + function GetTitleText: ustring; + function GetPageUrl: ustring; + function GetFrameUrl: ustring; + function GetFrameCharset: ustring; + function GetMediaType: TCefContextMenuMediaType; + function GetMediaStateFlags: TCefContextMenuMediaStateFlags; + function GetSelectionText: ustring; + function GetMisspelledWord: ustring; + function GetDictionarySuggestions(const suggestions: TStringList): Boolean; + function IsEditable: Boolean; + function IsSpellCheckEnabled: Boolean; + function GetEditStateFlags: TCefContextMenuEditStateFlags; + function IsCustomMenu: Boolean; + function IsPepperMenu: Boolean; + + property XCoord : Integer read GetXCoord; + property YCoord : Integer read GetYCoord; + property TypeFlags : TCefContextMenuTypeFlags read GetTypeFlags; + property LinkUrl : ustring read GetLinkUrl; + property UnfilteredLinkUrl : ustring read GetUnfilteredLinkUrl; + property SourceUrl : ustring read GetSourceUrl; + property TitleText : ustring read GetTitleText; + property PageUrl : ustring read GetPageUrl; + property FrameUrl : ustring read GetFrameUrl; + property FrameCharset : ustring read GetFrameCharset; + property MediaType : TCefContextMenuMediaType read GetMediaType; + property MediaStateFlags : TCefContextMenuMediaStateFlags read GetMediaStateFlags; + property SelectionText : ustring read GetSelectionText; + property EditStateFlags : TCefContextMenuEditStateFlags read GetEditStateFlags; + end; + + // TCefMenuModel + // /include/capi/cef_menu_model_capi.h (cef_menu_model_t) + ICefMenuModel = interface(ICefBaseRefCounted) + ['{40AF19D3-8B4E-44B8-8F89-DEB5907FC495}'] + function IsSubMenu: Boolean; + function Clear: Boolean; + function GetCount: Integer; + function AddSeparator: Boolean; + function AddItem(commandId: Integer; const text: ustring): Boolean; + function AddCheckItem(commandId: Integer; const text: ustring): Boolean; + function AddRadioItem(commandId: Integer; const text: ustring; groupId: Integer): Boolean; + function AddSubMenu(commandId: Integer; const text: ustring): ICefMenuModel; + function InsertSeparatorAt(index: Integer): Boolean; + function InsertItemAt(index, commandId: Integer; const text: ustring): Boolean; + function InsertCheckItemAt(index, commandId: Integer; const text: ustring): Boolean; + function InsertRadioItemAt(index, commandId: Integer; const text: ustring; groupId: Integer): Boolean; + function InsertSubMenuAt(index, commandId: Integer; const text: ustring): ICefMenuModel; + function Remove(commandId: Integer): Boolean; + function RemoveAt(index: Integer): Boolean; + function GetIndexOf(commandId: Integer): Integer; + function GetCommandIdAt(index: Integer): Integer; + function SetCommandIdAt(index, commandId: Integer): Boolean; + function GetLabel(commandId: Integer): ustring; + function GetLabelAt(index: Integer): ustring; + function SetLabel(commandId: Integer; const text: ustring): Boolean; + function SetLabelAt(index: Integer; const text: ustring): Boolean; + function GetType(commandId: Integer): TCefMenuItemType; + function GetTypeAt(index: Integer): TCefMenuItemType; + function GetGroupId(commandId: Integer): Integer; + function GetGroupIdAt(index: Integer): Integer; + function SetGroupId(commandId, groupId: Integer): Boolean; + function SetGroupIdAt(index, groupId: Integer): Boolean; + function GetSubMenu(commandId: Integer): ICefMenuModel; + function GetSubMenuAt(index: Integer): ICefMenuModel; + function IsVisible(commandId: Integer): Boolean; + function isVisibleAt(index: Integer): Boolean; + function SetVisible(commandId: Integer; visible: Boolean): Boolean; + function SetVisibleAt(index: Integer; visible: Boolean): Boolean; + function IsEnabled(commandId: Integer): Boolean; + function IsEnabledAt(index: Integer): Boolean; + function SetEnabled(commandId: Integer; enabled: Boolean): Boolean; + function SetEnabledAt(index: Integer; enabled: Boolean): Boolean; + function IsChecked(commandId: Integer): Boolean; + function IsCheckedAt(index: Integer): Boolean; + function setChecked(commandId: Integer; checked: Boolean): Boolean; + function setCheckedAt(index: Integer; checked: Boolean): Boolean; + function HasAccelerator(commandId: Integer): Boolean; + function HasAcceleratorAt(index: Integer): Boolean; + function SetAccelerator(commandId, keyCode: Integer; shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; + function SetAcceleratorAt(index, keyCode: Integer; shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; + function RemoveAccelerator(commandId: Integer): Boolean; + function RemoveAcceleratorAt(index: Integer): Boolean; + function GetAccelerator(commandId: Integer; out keyCode: Integer; out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; + function GetAcceleratorAt(index: Integer; out keyCode: Integer; out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; + function SetColor(commandId: Integer; colorType: TCefMenuColorType; color: TCefColor): Boolean; + function SetColorAt(index: Integer; colorType: TCefMenuColorType; color: TCefColor): Boolean; + function GetColor(commandId: Integer; colorType: TCefMenuColorType; out color: TCefColor): Boolean; + function GetColorAt(index: Integer; colorType: TCefMenuColorType; out color: TCefColor): Boolean; + function SetFontList(commandId: Integer; const fontList: ustring): Boolean; + function SetFontListAt(index: Integer; const fontList: ustring): Boolean; + end; + + // TCefValue + // /include/capi/cef_values_capi.h (cef_value_t) + ICefValue = interface(ICefBaseRefCounted) + ['{66F9F439-B12B-4EC3-A945-91AE4EF4D4BA}'] + function IsValid: Boolean; + function IsOwned: Boolean; + function IsReadOnly: Boolean; + function IsSame(const that: ICefValue): Boolean; + function IsEqual(const that: ICefValue): Boolean; + function Copy: ICefValue; + function GetType: TCefValueType; + function GetBool: Boolean; + function GetInt: Integer; + function GetDouble: Double; + function GetString: ustring; + function GetBinary: ICefBinaryValue; + function GetDictionary: ICefDictionaryValue; + function GetList: ICefListValue; + function SetNull: Boolean; + function SetBool(value: Integer): Boolean; + function SetInt(value: Integer): Boolean; + function SetDouble(value: Double): Boolean; + function SetString(const value: ustring): Boolean; + function SetBinary(const value: ICefBinaryValue): Boolean; + function SetDictionary(const value: ICefDictionaryValue): Boolean; + function SetList(const value: ICefListValue): Boolean; + end; + + // TCefBinaryValue + // /include/capi/cef_values_capi.h (cef_binary_value_t) + ICefBinaryValue = interface(ICefBaseRefCounted) + ['{974AA40A-9C5C-4726-81F0-9F0D46D7C5B3}'] + function IsValid: Boolean; + function IsOwned: Boolean; + function IsSame(const that: ICefBinaryValue): Boolean; + function IsEqual(const that: ICefBinaryValue): Boolean; + function Copy: ICefBinaryValue; + function GetSize: NativeUInt; + function GetData(buffer: Pointer; bufferSize, dataOffset: NativeUInt): NativeUInt; + + property Size : NativeUInt read GetSize; + end; + + // TCefDictionaryValue + // /include/capi/cef_values_capi.h (cef_dictionary_value_t) + ICefDictionaryValue = interface(ICefBaseRefCounted) + ['{B9638559-54DC-498C-8185-233EEF12BC69}'] + function IsValid: Boolean; + function isOwned: Boolean; + function IsReadOnly: Boolean; + function IsSame(const that: ICefDictionaryValue): Boolean; + function IsEqual(const that: ICefDictionaryValue): Boolean; + function Copy(excludeEmptyChildren: Boolean): ICefDictionaryValue; + function GetSize: NativeUInt; + function Clear: Boolean; + function HasKey(const key: ustring): Boolean; + function GetKeys(const keys: TStrings): Boolean; + function Remove(const key: ustring): Boolean; + function GetType(const key: ustring): TCefValueType; + function GetValue(const key: ustring): ICefValue; + function GetBool(const key: ustring): Boolean; + function GetInt(const key: ustring): Integer; + function GetDouble(const key: ustring): Double; + function GetString(const key: ustring): ustring; + function GetBinary(const key: ustring): ICefBinaryValue; + function GetDictionary(const key: ustring): ICefDictionaryValue; + function GetList(const key: ustring): ICefListValue; + function SetValue(const key: ustring; const value: ICefValue): Boolean; + function SetNull(const key: ustring): Boolean; + function SetBool(const key: ustring; value: Boolean): Boolean; + function SetInt(const key: ustring; value: Integer): Boolean; + function SetDouble(const key: ustring; value: Double): Boolean; + function SetString(const key, value: ustring): Boolean; + function SetBinary(const key: ustring; const value: ICefBinaryValue): Boolean; + function SetDictionary(const key: ustring; const value: ICefDictionaryValue): Boolean; + function SetList(const key: ustring; const value: ICefListValue): Boolean; + end; + + // TCefListValue + // /include/capi/cef_values_capi.h (cef_list_value_t) + ICefListValue = interface(ICefBaseRefCounted) + ['{09174B9D-0CC6-4360-BBB0-3CC0117F70F6}'] + function IsValid: Boolean; + function IsOwned: Boolean; + function IsReadOnly: Boolean; + function IsSame(const that: ICefListValue): Boolean; + function IsEqual(const that: ICefListValue): Boolean; + function Copy: ICefListValue; + function SetSize(size: NativeUInt): Boolean; + function GetSize: NativeUInt; + function Clear: Boolean; + function Remove(index: NativeUInt): Boolean; + function GetType(index: NativeUInt): TCefValueType; + function GetValue(index: NativeUInt): ICefValue; + function GetBool(index: NativeUInt): Boolean; + function GetInt(index: NativeUInt): Integer; + function GetDouble(index: NativeUInt): Double; + function GetString(index: NativeUInt): ustring; + function GetBinary(index: NativeUInt): ICefBinaryValue; + function GetDictionary(index: NativeUInt): ICefDictionaryValue; + function GetList(index: NativeUInt): ICefListValue; + function SetValue(index: NativeUInt; const value: ICefValue): Boolean; + function SetNull(index: NativeUInt): Boolean; + function SetBool(index: NativeUInt; value: Boolean): Boolean; + function SetInt(index: NativeUInt; value: Integer): Boolean; + function SetDouble(index: NativeUInt; value: Double): Boolean; + function SetString(index: NativeUInt; const value: ustring): Boolean; + function SetBinary(index: NativeUInt; const value: ICefBinaryValue): Boolean; + function SetDictionary(index: NativeUInt; const value: ICefDictionaryValue): Boolean; + function SetList(index: NativeUInt; const value: ICefListValue): Boolean; + end; + + // TCefLifeSpanHandler + // /include/capi/cef_life_span_handler_capi.h (cef_life_span_handler_t) + ICefLifeSpanHandler = interface(ICefBaseRefCounted) + ['{0A3EB782-A319-4C35-9B46-09B2834D7169}'] + function OnBeforePopup(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean): Boolean; + procedure OnAfterCreated(const browser: ICefBrowser); + function DoClose(const browser: ICefBrowser): Boolean; + procedure OnBeforeClose(const browser: ICefBrowser); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefGetExtensionResourceCallback + // /include/capi/cef_extension_handler_capi.h (cef_get_extension_resource_callback_t) + ICefGetExtensionResourceCallback = interface(ICefBaseRefCounted) + ['{579C8602-8252-40D0-9E0A-501F32C36C42}'] + procedure cont(const stream: ICefStreamReader); + procedure cancel; + end; + + // TCefExtensionHandler + // /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t) + ICefExtensionHandler = interface(ICefBaseRefCounted) + ['{3234008F-D809-459D-963D-23BA50219648}'] + procedure OnExtensionLoadFailed(result: TCefErrorcode); + procedure OnExtensionLoaded(const extension: ICefExtension); + procedure OnExtensionUnloaded(const extension: ICefExtension); + function OnBeforeBackgroundBrowser(const extension: ICefExtension; const url: ustring; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; + function OnBeforeBrowser(const extension: ICefExtension; const browser, active_browser: ICefBrowser; index: Integer; const url: ustring; active: boolean; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; + function GetActiveBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean): ICefBrowser; + function CanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean; + function GetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean; + end; + + // TCefExtension + // /include/capi/cef_extension_capi.h (cef_extension_t) + ICefExtension = interface(ICefBaseRefCounted) + ['{D30D1C64-A26F-49C0-AEB7-C55EC68951CA}'] + function GetIdentifier : ustring; + function GetPath : ustring; + function GetManifest : ICefDictionaryValue; + function IsSame(const that : ICefExtension) : boolean; + function GetHandler : ICefExtensionHandler; + function GetLoaderContext : ICefRequestContext; + function IsLoaded : boolean; + procedure unload; + + property Identifier : ustring read GetIdentifier; + property Path : ustring read GetPath; + property Manifest : ICefDictionaryValue read GetManifest; + property Handler : ICefExtensionHandler read GetHandler; + property LoaderContext : ICefRequestContext read GetLoaderContext; + end; + + // TCefLoadHandler + // /include/capi/cef_load_handler_capi.h (cef_load_handler_t) + ICefLoadHandler = interface(ICefBaseRefCounted) + ['{2C63FB82-345D-4A5B-9858-5AE7A85C9F49}'] + procedure OnLoadingStateChange(const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); + procedure OnLoadStart(const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType); + procedure OnLoadEnd(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); + procedure OnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefRequestCallback + // /include/capi/cef_request_handler_capi.h (cef_request_callback_t) + ICefRequestCallback = interface(ICefBaseRefCounted) + ['{A35B8FD5-226B-41A8-A763-1940787D321C}'] + procedure Cont(allow: Boolean); + procedure Cancel; + end; + + // TCefResponseFilter + // /include/capi/cef_response_filter_capi.h (cef_response_filter_t) + ICefResponseFilter = interface(ICefBaseRefCounted) + ['{5013BC3C-F1AE-407A-A571-A4C6B1D6831E}'] + function InitFilter: Boolean; + function Filter(data_in: Pointer; data_in_size: NativeUInt; var data_in_read: NativeUInt; data_out: Pointer; data_out_size : NativeUInt; var data_out_written: NativeUInt): TCefResponseFilterStatus; + end; + + // TCefRequestHandler + // /include/capi/cef_request_handler_capi.h (cef_request_handler_t) + ICefRequestHandler = interface(ICefBaseRefCounted) + ['{050877A9-D1F8-4EB3-B58E-50DC3E3D39FD}'] + function OnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; + function OnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; + function OnBeforeResourceLoad(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const callback: ICefRequestCallback): TCefReturnValue; + function GetResourceHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): ICefResourceHandler; + procedure OnResourceRedirect(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; var newUrl: ustring); + function OnResourceResponse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): Boolean; + function GetResourceResponseFilter(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse): ICefResponseFilter; + procedure OnResourceLoadComplete(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; status: TCefUrlRequestStatus; receivedContentLength: Int64); + function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; + function CanGetCookies(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest): boolean; + function CanSetCookie(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const cookie : PCefCookie): boolean; + function OnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; + procedure OnProtocolExecution(const browser: ICefBrowser; const url: ustring; out allowOsExecution: Boolean); + function OnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; + function OnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; + procedure OnPluginCrashed(const browser: ICefBrowser; const pluginPath: ustring); + procedure OnRenderViewReady(const browser: ICefBrowser); + procedure OnRenderProcessTerminated(const browser: ICefBrowser; status: TCefTerminationStatus); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefDisplayHandler + // /include/capi/cef_display_handler_capi.h (cef_display_handler_t) + ICefDisplayHandler = interface(ICefBaseRefCounted) + ['{1EC7C76D-6969-41D1-B26D-079BCFF054C4}'] + procedure OnAddressChange(const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); + procedure OnTitleChange(const browser: ICefBrowser; const title: ustring); + procedure OnFaviconUrlChange(const browser: ICefBrowser; const icon_urls: TStrings); + procedure OnFullScreenModeChange(const browser: ICefBrowser; fullscreen: Boolean); + function OnTooltip(const browser: ICefBrowser; var text: ustring): Boolean; + procedure OnStatusMessage(const browser: ICefBrowser; const value: ustring); + function OnConsoleMessage(const browser: ICefBrowser; level: TCefLogSeverity; const message_, source: ustring; line: Integer): Boolean; + function OnAutoResize(const browser: ICefBrowser; const new_size: PCefSize): Boolean; + procedure OnLoadingProgressChange(const browser: ICefBrowser; const progress: double); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefFocusHandler + // /include/capi/cef_focus_handler_capi.h (cef_focus_handler_t) + ICefFocusHandler = interface(ICefBaseRefCounted) + ['{BB7FA3FA-7B1A-4ADC-8E50-12A24018DD90}'] + procedure OnTakeFocus(const browser: ICefBrowser; next: Boolean); + function OnSetFocus(const browser: ICefBrowser; source: TCefFocusSource): Boolean; + procedure OnGotFocus(const browser: ICefBrowser); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefKeyboardHandler + // /include/capi/cef_keyboard_handler_capi.h (cef_keyboard_handler_t) + ICefKeyboardHandler = interface(ICefBaseRefCounted) + ['{0512F4EC-ED88-44C9-90D3-5C6D03D3B146}'] + function OnPreKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: Boolean): Boolean; + function OnKeyEvent(const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle): Boolean; + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefJsDialogHandler + // /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_handler_t) + ICefJsDialogHandler = interface(ICefBaseRefCounted) + ['{64E18F86-DAC5-4ED1-8589-44DE45B9DB56}'] + function OnJsdialog(const browser: ICefBrowser; const originUrl: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; const callback: ICefJsDialogCallback; out suppressMessage: Boolean): Boolean; + function OnBeforeUnloadDialog(const browser: ICefBrowser; const messageText: ustring; isReload: Boolean; const callback: ICefJsDialogCallback): Boolean; + procedure OnResetDialogState(const browser: ICefBrowser); + procedure OnDialogClosed(const browser: ICefBrowser); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefRunContextMenuCallback + // /include/capi/cef_context_menu_handler_capi.h (cef_run_context_menu_callback_t) + ICefRunContextMenuCallback = interface(ICefBaseRefCounted) + ['{44C3C6E3-B64D-4F6E-A318-4A0F3A72EB00}'] + procedure Cont(commandId: Integer; eventFlags: TCefEventFlags); + procedure Cancel; + end; + + // TCefContextMenuHandler + // /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t) + ICefContextMenuHandler = interface(ICefBaseRefCounted) + ['{C2951895-4087-49D5-BA18-4D9BA4F5EDD7}'] + procedure OnBeforeContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); + function RunContextMenu(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel; const callback: ICefRunContextMenuCallback): Boolean; + function OnContextMenuCommand(const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer; eventFlags: TCefEventFlags): Boolean; + procedure OnContextMenuDismissed(const browser: ICefBrowser; const frame: ICefFrame); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefAccessibilityHandler + // /include/capi/cef_accessibility_handler_capi.h (cef_accessibility_handler_t) + ICefAccessibilityHandler = interface(ICefBaseRefCounted) + ['{1878C3C7-7692-44AB-BFE0-6C387106816B}'] + procedure OnAccessibilityTreeChange(const value: ICefValue); + procedure OnAccessibilityLocationChange(const value: ICefValue); + end; + + // TCefDialogHandler + // /include/capi/cef_dialog_handler_capi.h (cef_dialog_handler_t) + ICefDialogHandler = interface(ICefBaseRefCounted) + ['{7763F4B2-8BE1-4E80-AC43-8B825850DC67}'] + function OnFileDialog(const browser: ICefBrowser; mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; selectedAcceptFilter: Integer; const callback: ICefFileDialogCallback): Boolean; + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefRenderHandler + // /include/capi/cef_render_handler_capi.h (cef_render_handler_t) + ICefRenderHandler = interface(ICefBaseRefCounted) + ['{1FC1C22B-085A-4741-9366-5249B88EC410}'] + procedure GetAccessibilityHandler(var aAccessibilityHandler : ICefAccessibilityHandler); + function GetRootScreenRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; + function GetViewRect(const browser: ICefBrowser; var rect: TCefRect): Boolean; + function GetScreenPoint(const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer): Boolean; + function GetScreenInfo(const browser: ICefBrowser; var screenInfo: TCefScreenInfo): Boolean; + procedure OnPopupShow(const browser: ICefBrowser; show: Boolean); + procedure OnPopupSize(const browser: ICefBrowser; const rect: PCefRect); + procedure OnPaint(const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer); + procedure OnCursorChange(const browser: ICefBrowser; cursor: TCefCursorHandle; CursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo); + function OnStartDragging(const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer): Boolean; + procedure OnUpdateDragCursor(const browser: ICefBrowser; operation: TCefDragOperation); + procedure OnScrollOffsetChanged(const browser: ICefBrowser; x, y: Double); + procedure OnIMECompositionRangeChanged(const browser: ICefBrowser; const selected_range: PCefRange; character_boundsCount: NativeUInt; const character_bounds: PCefRect); + procedure OnTextSelectionChanged(const browser: ICefBrowser; const selected_text: ustring; const selected_range: PCefRange); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefClient + // /include/capi/cef_client_capi.h (cef_client_t) + ICefClient = interface(ICefBaseRefCounted) + ['{1D502075-2FF0-4E13-A112-9E541CD811F4}'] + procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); + procedure GetDialogHandler(var aHandler : ICefDialogHandler); + procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); + procedure GetDownloadHandler(var aHandler : ICefDownloadHandler); + procedure GetDragHandler(var aHandler : ICefDragHandler); + procedure GetFindHandler(var aHandler : ICefFindHandler); + procedure GetFocusHandler(var aHandler : ICefFocusHandler); + procedure GetJsdialogHandler(var aHandler : ICefJsdialogHandler); + procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); + procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); + procedure GetLoadHandler(var aHandler : ICefLoadHandler); + procedure GetRenderHandler(var aHandler : ICefRenderHandler); + procedure GetRequestHandler(var aHandler : ICefRequestHandler); + function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefUrlRequest + // /include/capi/cef_urlrequest_capi.h (cef_urlrequest_t) + ICefUrlRequest = interface(ICefBaseRefCounted) + ['{59226AC1-A0FA-4D59-9DF4-A65C42391A67}'] + function GetRequest: ICefRequest; + function GetRequestStatus: TCefUrlRequestStatus; + function GetRequestError: Integer; + function GetResponse: ICefResponse; + function GetResponseWasCached: boolean; + procedure Cancel; + + property Request : ICefRequest read GetRequest; + property RequestStatus : TCefUrlRequestStatus read GetRequestStatus; + property RequestError : Integer read GetRequestError; + property Response : ICefResponse read GetResponse; + property ResponseWasCached : boolean read GetResponseWasCached; + end; + + // TCefUrlrequestClient + // /include/capi/cef_urlrequest_capi.h (cef_urlrequest_client_t) + ICefUrlrequestClient = interface(ICefBaseRefCounted) + ['{114155BD-C248-4651-9A4F-26F3F9A4F737}'] + procedure OnRequestComplete(const request: ICefUrlRequest); + procedure OnUploadProgress(const request: ICefUrlRequest; current, total: Int64); + procedure OnDownloadProgress(const request: ICefUrlRequest; current, total: Int64); + procedure OnDownloadData(const request: ICefUrlRequest; data: Pointer; dataLength: NativeUInt); + function OnGetAuthCredentials(isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; + end; + + // TCefWebPluginInfoVisitor + // /include/capi/cef_web_plugin_capi.h (cef_web_plugin_info_visitor_t) + ICefWebPluginInfoVisitor = interface(ICefBaseRefCounted) + ['{7523D432-4424-4804-ACAD-E67D2313436E}'] + function Visit(const info: ICefWebPluginInfo; count, total: Integer): Boolean; + end; + + // TCefWebPluginUnstableCallback + // /include/capi/cef_web_plugin_capi.h (cef_web_plugin_unstable_callback_t) + ICefWebPluginUnstableCallback = interface(ICefBaseRefCounted) + ['{67459829-EB47-4B7E-9D69-2EE77DF0E71E}'] + procedure IsUnstable(const path: ustring; unstable: Boolean); + end; + + // TCefRegisterCDMCallback + // /include/capi/cef_web_plugin_capi.h (cef_register_cdm_callback_t) + ICefRegisterCDMCallback = interface(ICefBaseRefCounted) + ['{6C39AB3B-F724-483F-ABA0-37F6E0AECF35}'] + procedure OnCDMRegistrationComplete(result: TCefCDMRegistrationError; const error_message: ustring); + end; + + // TCefEndTracingCallback + // /include/capi/cef_trace_capi.h (cef_end_tracing_callback_t) + ICefEndTracingCallback = interface(ICefBaseRefCounted) + ['{79020EBE-9D1D-49A6-9714-8778FE8929F2}'] + procedure OnEndTracingComplete(const tracingFile: ustring); + end; + + // TCefFileDialogCallback + // /include/capi/cef_dialog_handler_capi.h (cef_file_dialog_callback_t) + ICefFileDialogCallback = interface(ICefBaseRefCounted) + ['{1AF659AB-4522-4E39-9C52-184000D8E3C7}'] + procedure Cont(selectedAcceptFilter: Integer; const filePaths: TStrings); + procedure Cancel; + end; + + // TCefDragData + // /include/capi/cef_drag_data_capi.h (cef_drag_data_t) + ICefDragData = interface(ICefBaseRefCounted) + ['{FBB6A487-F633-4055-AB3E-6619EDE75683}'] + function Clone: ICefDragData; + function IsReadOnly: Boolean; + function IsLink: Boolean; + function IsFragment: Boolean; + function IsFile: Boolean; + function GetLinkUrl: ustring; + function GetLinkTitle: ustring; + function GetLinkMetadata: ustring; + function GetFragmentText: ustring; + function GetFragmentHtml: ustring; + function GetFragmentBaseUrl: ustring; + function GetFileName: ustring; + function GetFileContents(const writer: ICefStreamWriter): NativeUInt; + function GetFileNames(var names: TStrings): Integer; + procedure SetLinkUrl(const url: ustring); + procedure SetLinkTitle(const title: ustring); + procedure SetLinkMetadata(const data: ustring); + procedure SetFragmentText(const text: ustring); + procedure SetFragmentHtml(const html: ustring); + procedure SetFragmentBaseUrl(const baseUrl: ustring); + procedure ResetFileContents; + procedure AddFile(const path, displayName: ustring); + function GetImage : ICefImage; + function GetImageHotspot : TCefPoint; + function HasImage : boolean; + end; + + // TCefDragHandler + // /include/capi/cef_drag_handler_capi.h (cef_drag_handler_t) + ICefDragHandler = interface(ICefBaseRefCounted) + ['{59A89579-5B18-489F-A25C-5CC25FF831FC}'] + function OnDragEnter(const browser: ICefBrowser; const dragData: ICefDragData; mask: TCefDragOperations): Boolean; + procedure OnDraggableRegionsChanged(const browser: ICefBrowser; regionsCount: NativeUInt; regions: PCefDraggableRegionArray); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefFindHandler + // /include/capi/cef_find_handler_capi.h (cef_find_handler_t) + ICefFindHandler = interface(ICefBaseRefCounted) + ['{F20DF234-BD43-42B3-A80B-D354A9E5B787}'] + procedure OnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean); + + procedure RemoveReferences; // custom procedure to clear all references + end; + + // TCefRequestContextHandler + // /include/capi/cef_request_context_handler_capi.h (cef_request_context_handler_t) + ICefRequestContextHandler = interface(ICefBaseRefCounted) + ['{76EB1FA7-78DF-4FD5-ABB3-1CDD3E73A140}'] + procedure OnRequestContextInitialized(const request_context: ICefRequestContext); + function GetCookieManager: ICefCookieManager; + function OnBeforePluginLoad(const mimeType, pluginUrl:ustring; isMainFrame : boolean; const topOriginUrl: ustring; const pluginInfo: ICefWebPluginInfo; pluginPolicy: PCefPluginPolicy): Boolean; + end; + + // TCefResolveCallback + // /include/capi/cef_request_context_capi.h (cef_resolve_callback_t) + ICefResolveCallback = interface(ICefBaseRefCounted) + ['{0C0EA252-7968-4163-A1BE-A1453576DD06}'] + procedure OnResolveCompleted(result: TCefErrorCode; const resolvedIps: TStrings); + end; + + // TCefRequestContext + // /include/capi/cef_request_context_capi.h (cef_request_context_t) + ICefRequestContext = interface(ICefBaseRefCounted) + ['{5830847A-2971-4BD5-ABE6-21451F8923F7}'] + function IsSame(const other: ICefRequestContext): Boolean; + function IsSharingWith(const other: ICefRequestContext): Boolean; + function IsGlobal: Boolean; + function GetHandler: ICefRequestContextHandler; + function GetCachePath: ustring; + function GetDefaultCookieManager(const callback: ICefCompletionCallback): ICefCookieManager; + function GetDefaultCookieManagerProc(const callback: TCefCompletionCallbackProc): ICefCookieManager; + function RegisterSchemeHandlerFactory(const schemeName, domainName: ustring; const factory: ICefSchemeHandlerFactory): Boolean; + function ClearSchemeHandlerFactories: Boolean; + procedure PurgePluginListCache(reloadPages: Boolean); + function HasPreference(const name: ustring): Boolean; + function GetPreference(const name: ustring): ICefValue; + function GetAllPreferences(includeDefaults: Boolean): ICefDictionaryValue; + function CanSetPreference(const name: ustring): Boolean; + function SetPreference(const name: ustring; const value: ICefValue; out error: ustring): Boolean; + procedure ClearCertificateExceptions(const callback: ICefCompletionCallback); + procedure CloseAllConnections(const callback: ICefCompletionCallback); + procedure ResolveHost(const origin: ustring; const callback: ICefResolveCallback); + function ResolveHostCached(const origin: ustring; const resolvedIps: TStrings): TCefErrorCode; + procedure LoadExtension(const root_directory: ustring; const manifest: ICefDictionaryValue; const handler: ICefExtensionHandler); function DidLoadExtension(const extension_id: ustring): boolean; function HasExtension(const extension_id: ustring): boolean; function GetExtensions(const extension_ids: TStringList): boolean; - function GetExtension(const extension_id: ustring): ICefExtension; - - property CachePath : ustring read GetCachePath; - property IsGlobalContext : boolean read IsGlobal; - end; - - // TCefPrintSettings - // /include/capi/cef_print_settings_capi.h (cef_print_settings_t) - ICefPrintSettings = Interface(ICefBaseRefCounted) - ['{ACBD2395-E9C1-49E5-B7F3-344DAA4A0F12}'] - function IsValid: Boolean; - function IsReadOnly: Boolean; - function Copy: ICefPrintSettings; - procedure SetOrientation(landscape: Boolean); - function IsLandscape: Boolean; - procedure SetPrinterPrintableArea(const physicalSizeDeviceUnits: PCefSize; const printableAreaDeviceUnits: PCefRect; landscapeNeedsFlip: Boolean); - procedure SetDeviceName(const name: ustring); - function GetDeviceName: ustring; - procedure SetDpi(dpi: Integer); - function GetDpi: Integer; - procedure SetPageRanges(const ranges: TCefRangeArray); - function GetPageRangesCount: NativeUInt; - procedure GetPageRanges(out ranges: TCefRangeArray); - procedure SetSelectionOnly(selectionOnly: Boolean); - function IsSelectionOnly: Boolean; - procedure SetCollate(collate: Boolean); - function WillCollate: Boolean; - procedure SetColorModel(model: TCefColorModel); - function GetColorModel: TCefColorModel; - procedure SetCopies(copies: Integer); - function GetCopies: Integer; - procedure SetDuplexMode(mode: TCefDuplexMode); - function GetDuplexMode: TCefDuplexMode; - - property Landscape : Boolean read IsLandscape write SetOrientation; - property DeviceName : ustring read GetDeviceName write SetDeviceName; - property Dpi : Integer read GetDpi write SetDpi; - property SelectionOnly : Boolean read IsSelectionOnly write SetSelectionOnly; - property Collate : Boolean read WillCollate write SetCollate; - property ColorModel : TCefColorModel read GetColorModel write SetColorModel; - property Copies : Integer read GetCopies write SetCopies; - property DuplexMode : TCefDuplexMode read GetDuplexMode write SetDuplexMode; - end; - - // TCefPrintDialogCallback - // /include/capi/cef_print_handler_capi.h (cef_print_dialog_callback_t) - ICefPrintDialogCallback = interface(ICefBaseRefCounted) - ['{1D7FB71E-0019-4A80-95ED-91DDD019253B}'] - procedure cont(const settings: ICefPrintSettings); - procedure cancel; - end; - - // TCefPrintJobCallback - // /include/capi/cef_print_handler_capi.h (cef_print_job_callback_t) - ICefPrintJobCallback = interface(ICefBaseRefCounted) - ['{5554852A-052C-464B-A868-B618C7E7E2FD}'] - procedure cont; - end; - - // TCefPrintHandler - // /include/capi/cef_print_handler_capi.h (cef_print_handler_t) - ICefPrintHandler = interface(ICefBaseRefCounted) - ['{2831D5C9-6E2B-4A30-A65A-0F4435371EFC}'] - procedure OnPrintStart(const browser: ICefBrowser); - procedure OnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); - function OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback): boolean; - function OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback): boolean; - procedure OnPrintReset(const browser: ICefBrowser); - function GetPDFPaperSize(deviceUnitsPerInch: Integer): TCefSize; - end; - - // TCefNavigationEntry - // /include/capi/cef_navigation_entry_capi.h (cef_navigation_entry_t) - ICefNavigationEntry = interface(ICefBaseRefCounted) - ['{D17B4B37-AA45-42D9-B4E4-AAB6FE2AB297}'] - function IsValid: Boolean; - function GetUrl: ustring; - function GetDisplayUrl: ustring; - function GetOriginalUrl: ustring; - function GetTitle: ustring; - function GetTransitionType: TCefTransitionType; - function HasPostData: Boolean; - function GetCompletionTime: TDateTime; - function GetHttpStatusCode: Integer; - function GetSSLStatus: ICefSSLStatus; - - property Url : ustring read GetUrl; - property DisplayUrl : ustring read GetDisplayUrl; - property OriginalUrl : ustring read GetOriginalUrl; - property Title : ustring read GetTitle; - property TransitionType : TCefTransitionType read GetTransitionType; - property CompletionTime : TDateTime read GetCompletionTime; - property HttpStatusCode : Integer read GetHttpStatusCode; - property SSLStatus : ICefSSLStatus read GetSSLStatus; - end; - - // TCefX509CertPrincipal - // /include/capi/cef_x509_certificate_capi.h (cef_x509cert_principal_t) - ICefX509CertPrincipal = interface(ICefBaseRefCounted) - ['{CD3621ED-7D68-4A1F-95B5-190C7001B65F}'] - function GetDisplayName: ustring; - function GetCommonName: ustring; - function GetLocalityName: ustring; - function GetStateOrProvinceName: ustring; - function GetCountryName: ustring; - procedure GetStreetAddresses(const addresses: TStrings); - procedure GetOrganizationNames(const names: TStrings); - procedure GetOrganizationUnitNames(const names: TStrings); - procedure GetDomainComponents(const components: TStrings); - end; - - // TCefX509Certificate - // /include/capi/cef_x509_certificate_capi.h (cef_x509certificate_t) - ICefX509Certificate = interface(ICefBaseRefCounted) - ['{C897979D-F068-4428-82DF-4221612FF7E0}'] - function GetSubject: ICefX509CertPrincipal; - function GetIssuer: ICefX509CertPrincipal; - function GetSerialNumber: ICefBinaryValue; - function GetValidStart: TCefTime; - function GetValidExpiry: TCefTime; - function GetDerEncoded: ICefBinaryValue; - function GetPemEncoded: ICefBinaryValue; - function GetIssuerChainSize: NativeUInt; - procedure GetDEREncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); - procedure GetPEMEncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); - end; - - // TCefSslInfo - // /include/capi/cef_ssl_info_capi.h (cef_sslinfo_t) - ICefSslInfo = interface(ICefBaseRefCounted) - ['{67EC86BD-DE7D-453D-908F-AD15626C514F}'] - function GetCertStatus: TCefCertStatus; - function GetX509Certificate: ICefX509Certificate; - end; - - // TCefSSLStatus - // /include/capi/cef_ssl_status_capi.h (cef_sslstatus_t) - ICefSSLStatus = interface(ICefBaseRefCounted) - ['{E3F004F2-03D5-46A2-91D0-510C50F3B225}'] - function IsSecureConnection: boolean; - function GetCertStatus: TCefCertStatus; - function GetSSLVersion: TCefSSLVersion; - function GetContentStatus: TCefSSLContentStatus; - function GetX509Certificate: ICefX509Certificate; - end; - - // TCefSelectClientCertificateCallback - // /include/capi/cef_request_handler_capi.h (cef_select_client_certificate_callback_t) - ICefSelectClientCertificateCallback = interface(ICefBaseRefCounted) - ['{003E3D09-ADE8-4C6E-A174-079D3D616608}'] - procedure Select(const cert: ICefX509Certificate); - end; - - // TCefResourceBundle - // /include/capi/cef_resource_bundle_capi.h (cef_resource_bundle_t) - ICefResourceBundle = interface(ICefBaseRefCounted) - ['{3213CF97-C854-452B-B615-39192F8D07DC}'] - function GetLocalizedString(stringId: Integer): ustring; - function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; - function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; - end; - - // TCefImage - // /include/capi/cef_image_capi.h (cef_image_t) - ICefImage = interface(ICefBaseRefCounted) - ['{E2C2F424-26A2-4498-BB45-DA23219831BE}'] - function IsEmpty: Boolean; - function IsSame(const that: ICefImage): Boolean; - function AddBitmap(scaleFactor: Single; pixelWidth, pixelHeight: Integer; colorType: TCefColorType; alphaType: TCefAlphaType; const pixelData: Pointer; pixelDataSize: NativeUInt): Boolean; - function AddPng(scaleFactor: Single; const pngData: Pointer; pngDataSize: NativeUInt): Boolean; - function AddJpeg(scaleFactor: Single; const jpegData: Pointer; jpegDataSize: NativeUInt): Boolean; - function GetWidth: NativeUInt; - function GetHeight: NativeUInt; - function HasRepresentation(scaleFactor: Single): Boolean; - function RemoveRepresentation(scaleFactor: Single): Boolean; - function GetRepresentationInfo(scaleFactor: Single; actualScaleFactor: PSingle; pixelWidth, pixelHeight: PInteger): Boolean; - function GetAsBitmap(scaleFactor: Single; colorType: TCefColorType; alphaType: TCefAlphaType; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; - function GetAsPng(scaleFactor: Single; withTransparency: Boolean; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; - function GetAsJpeg(scaleFactor: Single; quality: Integer; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; - - property Width : NativeUInt read GetWidth; - property Height : NativeUInt read GetHeight; - end; - - // TCefMenuModelDelegate - // /include/capi/cef_menu_model_delegate_capi.h (cef_menu_model_delegate_t) - ICefMenuModelDelegate = interface(ICefBaseRefCounted) - ['{1430D202-2795-433E-9A35-C79A0996F316}'] - procedure ExecuteCommand(const menuModel: ICefMenuModel; commandId: Integer; eventFlags: TCefEventFlags); - procedure MouseOutsideMenu(const menuModel: ICefMenuModel; const screenPoint: PCefPoint); - procedure UnhandledOpenSubmenu(const menuModel: ICefMenuModel; isRTL: boolean); - procedure UnhandledCloseSubmenu(const menuModel: ICefMenuModel; isRTL: boolean); - procedure MenuWillShow(const menuModel: ICefMenuModel); - procedure MenuClosed(const menuModel: ICefMenuModel); - function FormatLabel(const menuModel: ICefMenuModel; const label_ : ustring) : boolean; - end; - - // TCefServer - // /include/capi/cef_server_capi.h (cef_server_t) - ICefServer = interface(ICefBaseRefCounted) - ['{41D41764-A74B-4552-B166-C77E70549047}'] - function GetTaskRunner : ICefTaskRunner; + function GetExtension(const extension_id: ustring): ICefExtension; + + property CachePath : ustring read GetCachePath; + property IsGlobalContext : boolean read IsGlobal; + end; + + // TCefPrintSettings + // /include/capi/cef_print_settings_capi.h (cef_print_settings_t) + ICefPrintSettings = Interface(ICefBaseRefCounted) + ['{ACBD2395-E9C1-49E5-B7F3-344DAA4A0F12}'] + function IsValid: Boolean; + function IsReadOnly: Boolean; + function Copy: ICefPrintSettings; + procedure SetOrientation(landscape: Boolean); + function IsLandscape: Boolean; + procedure SetPrinterPrintableArea(const physicalSizeDeviceUnits: PCefSize; const printableAreaDeviceUnits: PCefRect; landscapeNeedsFlip: Boolean); + procedure SetDeviceName(const name: ustring); + function GetDeviceName: ustring; + procedure SetDpi(dpi: Integer); + function GetDpi: Integer; + procedure SetPageRanges(const ranges: TCefRangeArray); + function GetPageRangesCount: NativeUInt; + procedure GetPageRanges(out ranges: TCefRangeArray); + procedure SetSelectionOnly(selectionOnly: Boolean); + function IsSelectionOnly: Boolean; + procedure SetCollate(collate: Boolean); + function WillCollate: Boolean; + procedure SetColorModel(model: TCefColorModel); + function GetColorModel: TCefColorModel; + procedure SetCopies(copies: Integer); + function GetCopies: Integer; + procedure SetDuplexMode(mode: TCefDuplexMode); + function GetDuplexMode: TCefDuplexMode; + + property Landscape : Boolean read IsLandscape write SetOrientation; + property DeviceName : ustring read GetDeviceName write SetDeviceName; + property Dpi : Integer read GetDpi write SetDpi; + property SelectionOnly : Boolean read IsSelectionOnly write SetSelectionOnly; + property Collate : Boolean read WillCollate write SetCollate; + property ColorModel : TCefColorModel read GetColorModel write SetColorModel; + property Copies : Integer read GetCopies write SetCopies; + property DuplexMode : TCefDuplexMode read GetDuplexMode write SetDuplexMode; + end; + + // TCefPrintDialogCallback + // /include/capi/cef_print_handler_capi.h (cef_print_dialog_callback_t) + ICefPrintDialogCallback = interface(ICefBaseRefCounted) + ['{1D7FB71E-0019-4A80-95ED-91DDD019253B}'] + procedure cont(const settings: ICefPrintSettings); + procedure cancel; + end; + + // TCefPrintJobCallback + // /include/capi/cef_print_handler_capi.h (cef_print_job_callback_t) + ICefPrintJobCallback = interface(ICefBaseRefCounted) + ['{5554852A-052C-464B-A868-B618C7E7E2FD}'] + procedure cont; + end; + + // TCefPrintHandler + // /include/capi/cef_print_handler_capi.h (cef_print_handler_t) + ICefPrintHandler = interface(ICefBaseRefCounted) + ['{2831D5C9-6E2B-4A30-A65A-0F4435371EFC}'] + procedure OnPrintStart(const browser: ICefBrowser); + procedure OnPrintSettings(const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean); + function OnPrintDialog(const browser: ICefBrowser; hasSelection: boolean; const callback: ICefPrintDialogCallback): boolean; + function OnPrintJob(const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback): boolean; + procedure OnPrintReset(const browser: ICefBrowser); + function GetPDFPaperSize(deviceUnitsPerInch: Integer): TCefSize; + end; + + // TCefNavigationEntry + // /include/capi/cef_navigation_entry_capi.h (cef_navigation_entry_t) + ICefNavigationEntry = interface(ICefBaseRefCounted) + ['{D17B4B37-AA45-42D9-B4E4-AAB6FE2AB297}'] + function IsValid: Boolean; + function GetUrl: ustring; + function GetDisplayUrl: ustring; + function GetOriginalUrl: ustring; + function GetTitle: ustring; + function GetTransitionType: TCefTransitionType; + function HasPostData: Boolean; + function GetCompletionTime: TDateTime; + function GetHttpStatusCode: Integer; + function GetSSLStatus: ICefSSLStatus; + + property Url : ustring read GetUrl; + property DisplayUrl : ustring read GetDisplayUrl; + property OriginalUrl : ustring read GetOriginalUrl; + property Title : ustring read GetTitle; + property TransitionType : TCefTransitionType read GetTransitionType; + property CompletionTime : TDateTime read GetCompletionTime; + property HttpStatusCode : Integer read GetHttpStatusCode; + property SSLStatus : ICefSSLStatus read GetSSLStatus; + end; + + // TCefX509CertPrincipal + // /include/capi/cef_x509_certificate_capi.h (cef_x509cert_principal_t) + ICefX509CertPrincipal = interface(ICefBaseRefCounted) + ['{CD3621ED-7D68-4A1F-95B5-190C7001B65F}'] + function GetDisplayName: ustring; + function GetCommonName: ustring; + function GetLocalityName: ustring; + function GetStateOrProvinceName: ustring; + function GetCountryName: ustring; + procedure GetStreetAddresses(const addresses: TStrings); + procedure GetOrganizationNames(const names: TStrings); + procedure GetOrganizationUnitNames(const names: TStrings); + procedure GetDomainComponents(const components: TStrings); + end; + + // TCefX509Certificate + // /include/capi/cef_x509_certificate_capi.h (cef_x509certificate_t) + ICefX509Certificate = interface(ICefBaseRefCounted) + ['{C897979D-F068-4428-82DF-4221612FF7E0}'] + function GetSubject: ICefX509CertPrincipal; + function GetIssuer: ICefX509CertPrincipal; + function GetSerialNumber: ICefBinaryValue; + function GetValidStart: TCefTime; + function GetValidExpiry: TCefTime; + function GetDerEncoded: ICefBinaryValue; + function GetPemEncoded: ICefBinaryValue; + function GetIssuerChainSize: NativeUInt; + procedure GetDEREncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); + procedure GetPEMEncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); + end; + + // TCefSslInfo + // /include/capi/cef_ssl_info_capi.h (cef_sslinfo_t) + ICefSslInfo = interface(ICefBaseRefCounted) + ['{67EC86BD-DE7D-453D-908F-AD15626C514F}'] + function GetCertStatus: TCefCertStatus; + function GetX509Certificate: ICefX509Certificate; + end; + + // TCefSSLStatus + // /include/capi/cef_ssl_status_capi.h (cef_sslstatus_t) + ICefSSLStatus = interface(ICefBaseRefCounted) + ['{E3F004F2-03D5-46A2-91D0-510C50F3B225}'] + function IsSecureConnection: boolean; + function GetCertStatus: TCefCertStatus; + function GetSSLVersion: TCefSSLVersion; + function GetContentStatus: TCefSSLContentStatus; + function GetX509Certificate: ICefX509Certificate; + end; + + // TCefSelectClientCertificateCallback + // /include/capi/cef_request_handler_capi.h (cef_select_client_certificate_callback_t) + ICefSelectClientCertificateCallback = interface(ICefBaseRefCounted) + ['{003E3D09-ADE8-4C6E-A174-079D3D616608}'] + procedure Select(const cert: ICefX509Certificate); + end; + + // TCefResourceBundle + // /include/capi/cef_resource_bundle_capi.h (cef_resource_bundle_t) + ICefResourceBundle = interface(ICefBaseRefCounted) + ['{3213CF97-C854-452B-B615-39192F8D07DC}'] + function GetLocalizedString(stringId: Integer): ustring; + function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; + function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; + end; + + // TCefImage + // /include/capi/cef_image_capi.h (cef_image_t) + ICefImage = interface(ICefBaseRefCounted) + ['{E2C2F424-26A2-4498-BB45-DA23219831BE}'] + function IsEmpty: Boolean; + function IsSame(const that: ICefImage): Boolean; + function AddBitmap(scaleFactor: Single; pixelWidth, pixelHeight: Integer; colorType: TCefColorType; alphaType: TCefAlphaType; const pixelData: Pointer; pixelDataSize: NativeUInt): Boolean; + function AddPng(scaleFactor: Single; const pngData: Pointer; pngDataSize: NativeUInt): Boolean; + function AddJpeg(scaleFactor: Single; const jpegData: Pointer; jpegDataSize: NativeUInt): Boolean; + function GetWidth: NativeUInt; + function GetHeight: NativeUInt; + function HasRepresentation(scaleFactor: Single): Boolean; + function RemoveRepresentation(scaleFactor: Single): Boolean; + function GetRepresentationInfo(scaleFactor: Single; actualScaleFactor: PSingle; pixelWidth, pixelHeight: PInteger): Boolean; + function GetAsBitmap(scaleFactor: Single; colorType: TCefColorType; alphaType: TCefAlphaType; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; + function GetAsPng(scaleFactor: Single; withTransparency: Boolean; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; + function GetAsJpeg(scaleFactor: Single; quality: Integer; pixelWidth, pixelHeight: PInteger): ICefBinaryValue; + + property Width : NativeUInt read GetWidth; + property Height : NativeUInt read GetHeight; + end; + + // TCefMenuModelDelegate + // /include/capi/cef_menu_model_delegate_capi.h (cef_menu_model_delegate_t) + ICefMenuModelDelegate = interface(ICefBaseRefCounted) + ['{1430D202-2795-433E-9A35-C79A0996F316}'] + procedure ExecuteCommand(const menuModel: ICefMenuModel; commandId: Integer; eventFlags: TCefEventFlags); + procedure MouseOutsideMenu(const menuModel: ICefMenuModel; const screenPoint: PCefPoint); + procedure UnhandledOpenSubmenu(const menuModel: ICefMenuModel; isRTL: boolean); + procedure UnhandledCloseSubmenu(const menuModel: ICefMenuModel; isRTL: boolean); + procedure MenuWillShow(const menuModel: ICefMenuModel); + procedure MenuClosed(const menuModel: ICefMenuModel); + function FormatLabel(const menuModel: ICefMenuModel; const label_ : ustring) : boolean; + end; + + // TCefServer + // /include/capi/cef_server_capi.h (cef_server_t) + ICefServer = interface(ICefBaseRefCounted) + ['{41D41764-A74B-4552-B166-C77E70549047}'] + function GetTaskRunner : ICefTaskRunner; procedure Shutdown; function IsRunning : boolean; function GetAddress : ustring; @@ -2093,13 +2112,13 @@ type procedure SendRawData(connection_id: Integer; const data: Pointer; data_size: NativeUInt); procedure CloseConnection(connection_id: Integer); procedure SendWebSocketMessage(connection_id: Integer; const data: Pointer; data_size: NativeUInt); - end; - - // TCefServerHandler - // /include/capi/cef_server_capi.h (cef_server_handler_t) - ICefServerHandler = interface(ICefBaseRefCounted) - ['{AFB64A63-44C9-44CD-959B-D8E20F549879}'] - procedure OnServerCreated(const server: ICefServer); + end; + + // TCefServerHandler + // /include/capi/cef_server_capi.h (cef_server_handler_t) + ICefServerHandler = interface(ICefBaseRefCounted) + ['{AFB64A63-44C9-44CD-959B-D8E20F549879}'] + procedure OnServerCreated(const server: ICefServer); procedure OnServerDestroyed(const server: ICefServer); procedure OnClientConnected(const server: ICefServer; connection_id: Integer); procedure OnClientDisconnected(const server: ICefServer; connection_id: Integer); @@ -2107,8 +2126,8 @@ type procedure OnWebSocketRequest(const server: ICefServer; connection_id: Integer; const client_address: ustring; const request: ICefRequest; const callback: ICefCallback); procedure OnWebSocketConnected(const server: ICefServer; connection_id: Integer); procedure OnWebSocketMessage(const server: ICefServer; connection_id: Integer; const data: Pointer; data_size: NativeUInt); - end; - -implementation - -end. + end; + +implementation + +end. diff --git a/source/uCEFJsDialogCallback.pas b/source/uCEFJsDialogCallback.pas index 799420b7..3b2fbb5c 100644 --- a/source/uCEFJsDialogCallback.pas +++ b/source/uCEFJsDialogCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFJsDialogCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -65,10 +69,10 @@ uses procedure TCefJsDialogCallbackRef.Cont(success: Boolean; const userInput: ustring); var - ui: TCefString; + TempInput : TCefString; begin - ui := CefString(userInput); - PCefJsDialogCallback(FData).cont(PCefJsDialogCallback(FData), Ord(success), @ui); + TempInput := CefString(userInput); + PCefJsDialogCallback(FData)^.cont(PCefJsDialogCallback(FData), Ord(success), @TempInput); end; class function TCefJsDialogCallbackRef.UnWrap(data: Pointer): ICefJsDialogCallback; diff --git a/source/uCEFJsDialogHandler.pas b/source/uCEFJsDialogHandler.pas index 53d93f99..2a8d2496 100644 --- a/source/uCEFJsDialogHandler.pas +++ b/source/uCEFJsDialogHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFJsDialogHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -163,10 +167,10 @@ begin with PCefJsDialogHandler(FData)^ do begin - on_jsdialog := cef_jsdialog_handler_on_jsdialog; - on_before_unload_dialog := cef_jsdialog_handler_on_before_unload_dialog; - on_reset_dialog_state := cef_jsdialog_handler_on_reset_dialog_state; - on_dialog_closed := cef_jsdialog_handler_on_dialog_closed; + on_jsdialog := {$IFDEF FPC}@{$ENDIF}cef_jsdialog_handler_on_jsdialog; + on_before_unload_dialog := {$IFDEF FPC}@{$ENDIF}cef_jsdialog_handler_on_before_unload_dialog; + on_reset_dialog_state := {$IFDEF FPC}@{$ENDIF}cef_jsdialog_handler_on_reset_dialog_state; + on_dialog_closed := {$IFDEF FPC}@{$ENDIF}cef_jsdialog_handler_on_dialog_closed; end; end; diff --git a/source/uCEFKeyboardHandler.pas b/source/uCEFKeyboardHandler.pas index b5cd4498..69fe339b 100644 --- a/source/uCEFKeyboardHandler.pas +++ b/source/uCEFKeyboardHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFKeyboardHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -129,8 +133,8 @@ begin with PCefKeyboardHandler(FData)^ do begin - on_pre_key_event := cef_keyboard_handler_on_pre_key_event; - on_key_event := cef_keyboard_handler_on_key_event; + on_pre_key_event := {$IFDEF FPC}@{$ENDIF}cef_keyboard_handler_on_pre_key_event; + on_key_event := {$IFDEF FPC}@{$ENDIF}cef_keyboard_handler_on_key_event; end; end; diff --git a/source/uCEFLibFunctions.pas b/source/uCEFLibFunctions.pas index 4d2b9e02..a298846c 100644 --- a/source/uCEFLibFunctions.pas +++ b/source/uCEFLibFunctions.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFLibFunctions; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -56,252 +60,252 @@ uses var // /include/capi/cef_app_capi.h - cef_initialize : function(const args: PCefMainArgs; const settings: PCefSettings; application: PCefApp; windows_sandbox_info: Pointer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_shutdown : procedure; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_execute_process : function(const args: PCefMainArgs; application: PCefApp; windows_sandbox_info: Pointer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_do_message_loop_work : procedure; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_run_message_loop : procedure; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_quit_message_loop : procedure; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_set_osmodal_loop : procedure(osModalLoop: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_enable_highdpi_support : procedure; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_initialize : function(const args: PCefMainArgs; const settings: PCefSettings; application: PCefApp; windows_sandbox_info: Pointer): Integer; cdecl; + cef_shutdown : procedure; cdecl; + cef_execute_process : function(const args: PCefMainArgs; application: PCefApp; windows_sandbox_info: Pointer): Integer; cdecl; + cef_do_message_loop_work : procedure; cdecl; + cef_run_message_loop : procedure; cdecl; + cef_quit_message_loop : procedure; cdecl; + cef_set_osmodal_loop : procedure(osModalLoop: Integer); cdecl; + cef_enable_highdpi_support : procedure; cdecl; // /include/capi/cef_browser_capi.h - cef_browser_host_create_browser : function(const windowInfo: PCefWindowInfo; client: PCefClient; const url: PCefString; const settings: PCefBrowserSettings; request_context: PCefRequestContext): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_browser_host_create_browser_sync : function(const windowInfo: PCefWindowInfo; client: PCefClient; const url: PCefString; const settings: PCefBrowserSettings; request_context: PCefRequestContext): PCefBrowser; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_browser_host_create_browser : function(const windowInfo: PCefWindowInfo; client: PCefClient; const url: PCefString; const settings: PCefBrowserSettings; request_context: PCefRequestContext): Integer; cdecl; + cef_browser_host_create_browser_sync : function(const windowInfo: PCefWindowInfo; client: PCefClient; const url: PCefString; const settings: PCefBrowserSettings; request_context: PCefRequestContext): PCefBrowser; cdecl; // /include/capi/cef_command_line_capi.h - cef_command_line_create : function : PCefCommandLine; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_command_line_get_global : function : PCefCommandLine; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_command_line_create : function : PCefCommandLine; cdecl; + cef_command_line_get_global : function : PCefCommandLine; cdecl; // /include/capi/cef_cookie_capi.h - cef_cookie_manager_get_global_manager : function(callback: PCefCompletionCallback): PCefCookieManager; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_cookie_manager_get_blocking_manager : function : PCefCookieManager; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_cookie_manager_create_manager : function(const path: PCefString; persist_session_cookies: Integer; callback: PCefCompletionCallback): PCefCookieManager; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_cookie_manager_get_global_manager : function(callback: PCefCompletionCallback): PCefCookieManager; cdecl; + cef_cookie_manager_get_blocking_manager : function : PCefCookieManager; cdecl; + cef_cookie_manager_create_manager : function(const path: PCefString; persist_session_cookies: Integer; callback: PCefCompletionCallback): PCefCookieManager; cdecl; // /include/capi/cef_crash_util.h - cef_crash_reporting_enabled : function : integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_set_crash_key_value : procedure(const key, value : PCefString); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_crash_reporting_enabled : function : integer; cdecl; + cef_set_crash_key_value : procedure(const key, value : PCefString); cdecl; // /include/capi/cef_drag_data_capi.h - cef_drag_data_create : function : PCefDragData; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_drag_data_create : function : PCefDragData; cdecl; // /include/capi/cef_file_util_capi.h - cef_create_directory : function(const full_path : PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_get_temp_directory : function(temp_dir : PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_create_new_temp_directory : function(const prefix : PCefString; new_temp_path: PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_create_temp_directory_in_directory : function(const base_dir, prefix : PCefString; new_dir : PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_directory_exists : function(const path : PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_delete_file : function(const path : PCefString; recursive : integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_zip_directory : function(const src_dir, dest_file : PCefString; include_hidden_files : integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_load_crlsets_file : procedure(const path : PCefString); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_create_directory : function(const full_path : PCefString): Integer; cdecl; + cef_get_temp_directory : function(temp_dir : PCefString): Integer; cdecl; + cef_create_new_temp_directory : function(const prefix : PCefString; new_temp_path: PCefString): Integer; cdecl; + cef_create_temp_directory_in_directory : function(const base_dir, prefix : PCefString; new_dir : PCefString): Integer; cdecl; + cef_directory_exists : function(const path : PCefString): Integer; cdecl; + cef_delete_file : function(const path : PCefString; recursive : integer): Integer; cdecl; + cef_zip_directory : function(const src_dir, dest_file : PCefString; include_hidden_files : integer): Integer; cdecl; + cef_load_crlsets_file : procedure(const path : PCefString); cdecl; // /include/capi/cef_image_capi.h - cef_image_create : function : PCefImage; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_image_create : function : PCefImage; cdecl; // /include/capi/cef_menu_model_capi.h - cef_menu_model_create : function(delegate: PCefMenuModelDelegate): PCefMenuModel; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_menu_model_create : function(delegate: PCefMenuModelDelegate): PCefMenuModel; cdecl; // /include/capi/cef_origin_whitelist_capi.h - cef_add_cross_origin_whitelist_entry : function(const source_origin, target_protocol, target_domain: PCefString; allow_target_subdomains: Integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_remove_cross_origin_whitelist_entry : function(const source_origin, target_protocol, target_domain: PCefString; allow_target_subdomains: Integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_clear_cross_origin_whitelist : function : Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_add_cross_origin_whitelist_entry : function(const source_origin, target_protocol, target_domain: PCefString; allow_target_subdomains: Integer): Integer; cdecl; + cef_remove_cross_origin_whitelist_entry : function(const source_origin, target_protocol, target_domain: PCefString; allow_target_subdomains: Integer): Integer; cdecl; + cef_clear_cross_origin_whitelist : function : Integer; cdecl; // /include/capi/cef_parser_capi.h - cef_parse_url : function(const url: PCefString; var parts: TCefUrlParts): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_create_url : function(const parts: PCefUrlParts; url: PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_format_url_for_security_display : function(const origin_url: PCefString): PCefStringUserFree; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_get_mime_type : function(const extension: PCefString): PCefStringUserFree; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_get_extensions_for_mime_type : procedure(const mime_type: PCefString; extensions: TCefStringList); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_base64encode : function(const data: Pointer; data_size: NativeUInt): PCefStringUserFree; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_base64decode : function(const data: PCefString): PCefBinaryValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_uriencode : function(const text: PCefString; use_plus: Integer): PCefStringUserFree; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_uridecode : function(const text: PCefString; convert_to_utf8: Integer; unescape_rule: TCefUriUnescapeRule): PCefStringUserFree; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_parse_json : function(const json_string: PCefString; options: TCefJsonParserOptions): PCefValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_parse_jsonand_return_error : function(const json_string: PCefString; options: TCefJsonParserOptions; error_code_out: PCefJsonParserError; error_msg_out: PCefString): PCefValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_write_json : function(node: PCefValue; options: TCefJsonWriterOptions): PCefStringUserFree; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_parse_url : function(const url: PCefString; var parts: TCefUrlParts): Integer; cdecl; + cef_create_url : function(const parts: PCefUrlParts; url: PCefString): Integer; cdecl; + cef_format_url_for_security_display : function(const origin_url: PCefString): PCefStringUserFree; cdecl; + cef_get_mime_type : function(const extension: PCefString): PCefStringUserFree; cdecl; + cef_get_extensions_for_mime_type : procedure(const mime_type: PCefString; extensions: TCefStringList); cdecl; + cef_base64encode : function(const data: Pointer; data_size: NativeUInt): PCefStringUserFree; cdecl; + cef_base64decode : function(const data: PCefString): PCefBinaryValue; cdecl; + cef_uriencode : function(const text: PCefString; use_plus: Integer): PCefStringUserFree; cdecl; + cef_uridecode : function(const text: PCefString; convert_to_utf8: Integer; unescape_rule: TCefUriUnescapeRule): PCefStringUserFree; cdecl; + cef_parse_json : function(const json_string: PCefString; options: TCefJsonParserOptions): PCefValue; cdecl; + cef_parse_jsonand_return_error : function(const json_string: PCefString; options: TCefJsonParserOptions; error_code_out: PCefJsonParserError; error_msg_out: PCefString): PCefValue; cdecl; + cef_write_json : function(node: PCefValue; options: TCefJsonWriterOptions): PCefStringUserFree; cdecl; // /include/capi/cef_path_util_capi.h - cef_get_path : function(key: TCefPathKey; path: PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_get_path : function(key: TCefPathKey; path: PCefString): Integer; cdecl; // /include/capi/cef_print_settings_capi.h - cef_print_settings_create : function : PCefPrintSettings; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_print_settings_create : function : PCefPrintSettings; cdecl; // /include/capi/cef_process_message_capi.h - cef_process_message_create : function(const name: PCefString): PCefProcessMessage; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_process_message_create : function(const name: PCefString): PCefProcessMessage; cdecl; // /include/capi/cef_process_util_capi.h - cef_launch_process : function(command_line: PCefCommandLine): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_launch_process : function(command_line: PCefCommandLine): Integer; cdecl; // /include/capi/cef_request_capi.h - cef_request_create : function : PCefRequest; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_post_data_create : function : PCefPostData; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_post_data_element_create : function : PCefPostDataElement; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_request_create : function : PCefRequest; cdecl; + cef_post_data_create : function : PCefPostData; cdecl; + cef_post_data_element_create : function : PCefPostDataElement; cdecl; // /include/capi/cef_request_context_capi.h - cef_request_context_get_global_context : function : PCefRequestContext; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_request_context_create_context : function(const settings: PCefRequestContextSettings; handler: PCefRequestContextHandler): PCefRequestContext; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_create_context_shared : function(other: PCefRequestContext; handler: PCefRequestContextHandler): PCefRequestContext; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_request_context_get_global_context : function : PCefRequestContext; cdecl; + cef_request_context_create_context : function(const settings: PCefRequestContextSettings; handler: PCefRequestContextHandler): PCefRequestContext; cdecl; + cef_create_context_shared : function(other: PCefRequestContext; handler: PCefRequestContextHandler): PCefRequestContext; cdecl; // /include/capi/cef_resource_bundle_capi.h - cef_resource_bundle_get_global : function : PCefResourceBundle; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_resource_bundle_get_global : function : PCefResourceBundle; cdecl; // /include/capi/cef_response_capi.h - cef_response_create : function : PCefResponse; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_response_create : function : PCefResponse; cdecl; // /include/capi/cef_scheme_capi.h - cef_register_scheme_handler_factory : function(const scheme_name, domain_name: PCefString; factory: PCefSchemeHandlerFactory): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_clear_scheme_handler_factories : function : Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_register_scheme_handler_factory : function(const scheme_name, domain_name: PCefString; factory: PCefSchemeHandlerFactory): Integer; cdecl; + cef_clear_scheme_handler_factories : function : Integer; cdecl; // /include/capi/cef_server_capi.h - cef_server_create : procedure(const address: PCefString; port: uint16; backlog: Integer; handler: PCefServerHandler); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_server_create : procedure(const address: PCefString; port: uint16; backlog: Integer; handler: PCefServerHandler); cdecl; // /include/capi/cef_ssl_info_capi.h - cef_is_cert_status_error : function(status : TCefCertStatus) : integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_is_cert_status_minor_error : function(status : TCefCertStatus) : integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_is_cert_status_error : function(status : TCefCertStatus) : integer; cdecl; + cef_is_cert_status_minor_error : function(status : TCefCertStatus) : integer; cdecl; // /include/capi/cef_stream_capi.h - cef_stream_reader_create_for_file : function(const fileName: PCefString): PCefStreamReader; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_stream_reader_create_for_data : function(data: Pointer; size: NativeUInt): PCefStreamReader; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_stream_reader_create_for_handler : function(handler: PCefReadHandler): PCefStreamReader; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_stream_writer_create_for_file : function(const fileName: PCefString): PCefStreamWriter; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_stream_writer_create_for_handler : function(handler: PCefWriteHandler): PCefStreamWriter; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_stream_reader_create_for_file : function(const fileName: PCefString): PCefStreamReader; cdecl; + cef_stream_reader_create_for_data : function(data: Pointer; size: NativeUInt): PCefStreamReader; cdecl; + cef_stream_reader_create_for_handler : function(handler: PCefReadHandler): PCefStreamReader; cdecl; + cef_stream_writer_create_for_file : function(const fileName: PCefString): PCefStreamWriter; cdecl; + cef_stream_writer_create_for_handler : function(handler: PCefWriteHandler): PCefStreamWriter; cdecl; // /include/capi/cef_task_capi.h - cef_task_runner_get_for_current_thread : function : PCefTaskRunner; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_task_runner_get_for_thread : function(threadId: TCefThreadId): PCefTaskRunner; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_currently_on : function(threadId: TCefThreadId): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_post_task : function(threadId: TCefThreadId; task: PCefTask): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_post_delayed_task : function(threadId: TCefThreadId; task: PCefTask; delay_ms: Int64): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_task_runner_get_for_current_thread : function : PCefTaskRunner; cdecl; + cef_task_runner_get_for_thread : function(threadId: TCefThreadId): PCefTaskRunner; cdecl; + cef_currently_on : function(threadId: TCefThreadId): Integer; cdecl; + cef_post_task : function(threadId: TCefThreadId; task: PCefTask): Integer; cdecl; + cef_post_delayed_task : function(threadId: TCefThreadId; task: PCefTask; delay_ms: Int64): Integer; cdecl; // /include/capi/cef_thread_capi.h - cef_thread_create : function(const display_name: PCefString; priority: TCefThreadPriority; message_loop_type: TCefMessageLoopType; stoppable: integer; com_init_mode: TCefCOMInitMode): PCefThread; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_thread_create : function(const display_name: PCefString; priority: TCefThreadPriority; message_loop_type: TCefMessageLoopType; stoppable: integer; com_init_mode: TCefCOMInitMode): PCefThread; cdecl; // /include/capi/cef_trace_capi.h - cef_begin_tracing : function(const categories: PCefString; callback: PCefCompletionCallback): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_end_tracing : function(const tracing_file: PCefString; callback: PCefEndTracingCallback): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_now_from_system_trace_time : function : int64; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_begin_tracing : function(const categories: PCefString; callback: PCefCompletionCallback): Integer; cdecl; + cef_end_tracing : function(const tracing_file: PCefString; callback: PCefEndTracingCallback): Integer; cdecl; + cef_now_from_system_trace_time : function : int64; cdecl; // /include/capi/cef_urlrequest_capi.h - cef_urlrequest_create : function(request: PCefRequest; client: PCefUrlRequestClient; request_context: PCefRequestContext): PCefUrlRequest; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_urlrequest_create : function(request: PCefRequest; client: PCefUrlRequestClient; request_context: PCefRequestContext): PCefUrlRequest; cdecl; // /include/capi/cef_v8_capi.h - cef_v8context_get_current_context : function : PCefv8Context; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8context_get_entered_context : function : PCefv8Context; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8context_in_context : function : Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_undefined : function : PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_null : function : PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_bool : function(value: Integer): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_int : function(value: Integer): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_uint : function(value: Cardinal): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_double : function(value: Double): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_date : function(const value: PCefTime): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_string : function(const value: PCefString): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_object : function(accessor: PCefV8Accessor; interceptor: PCefV8Interceptor): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_array : function(length: Integer): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_array_buffer : function(buffer : Pointer; length: NativeUInt; release_callback : PCefv8ArrayBufferReleaseCallback): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8value_create_function : function(const name: PCefString; handler: PCefv8Handler): PCefv8Value; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_v8stack_trace_get_current : function(frame_limit: Integer): PCefV8StackTrace; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_register_extension : function(const extension_name, javascript_code: PCefString; handler: PCefv8Handler): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_v8context_get_current_context : function : PCefv8Context; cdecl; + cef_v8context_get_entered_context : function : PCefv8Context; cdecl; + cef_v8context_in_context : function : Integer; cdecl; + cef_v8value_create_undefined : function : PCefv8Value; cdecl; + cef_v8value_create_null : function : PCefv8Value; cdecl; + cef_v8value_create_bool : function(value: Integer): PCefv8Value; cdecl; + cef_v8value_create_int : function(value: Integer): PCefv8Value; cdecl; + cef_v8value_create_uint : function(value: Cardinal): PCefv8Value; cdecl; + cef_v8value_create_double : function(value: Double): PCefv8Value; cdecl; + cef_v8value_create_date : function(const value: PCefTime): PCefv8Value; cdecl; + cef_v8value_create_string : function(const value: PCefString): PCefv8Value; cdecl; + cef_v8value_create_object : function(accessor: PCefV8Accessor; interceptor: PCefV8Interceptor): PCefv8Value; cdecl; + cef_v8value_create_array : function(length: Integer): PCefv8Value; cdecl; + cef_v8value_create_array_buffer : function(buffer : Pointer; length: NativeUInt; release_callback : PCefv8ArrayBufferReleaseCallback): PCefv8Value; cdecl; + cef_v8value_create_function : function(const name: PCefString; handler: PCefv8Handler): PCefv8Value; cdecl; + cef_v8stack_trace_get_current : function(frame_limit: Integer): PCefV8StackTrace; cdecl; + cef_register_extension : function(const extension_name, javascript_code: PCefString; handler: PCefv8Handler): Integer; cdecl; // /include/capi/cef_values_capi.h - cef_value_create : function : PCefValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_binary_value_create : function(const data: Pointer; data_size: NativeUInt): PCefBinaryValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_dictionary_value_create : function : PCefDictionaryValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_list_value_create : function : PCefListValue; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_value_create : function : PCefValue; cdecl; + cef_binary_value_create : function(const data: Pointer; data_size: NativeUInt): PCefBinaryValue; cdecl; + cef_dictionary_value_create : function : PCefDictionaryValue; cdecl; + cef_list_value_create : function : PCefListValue; cdecl; // /include/capi/cef_waitable_event_capi.h - cef_waitable_event_create : function(automatic_reset, initially_signaled : integer): PCefWaitableEvent; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_waitable_event_create : function(automatic_reset, initially_signaled : integer): PCefWaitableEvent; cdecl; // /include/capi/cef_web_plugin_capi.h - cef_visit_web_plugin_info : procedure(visitor: PCefWebPluginInfoVisitor); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_refresh_web_plugins : procedure; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_unregister_internal_web_plugin : procedure(const path: PCefString); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_register_web_plugin_crash : procedure(const path: PCefString); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_is_web_plugin_unstable : procedure(const path: PCefString; callback: PCefWebPluginUnstableCallback); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_register_widevine_cdm : procedure(const path: PCefString; callback: PCefRegisterCDMCallback); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_visit_web_plugin_info : procedure(visitor: PCefWebPluginInfoVisitor); cdecl; + cef_refresh_web_plugins : procedure; cdecl; + cef_unregister_internal_web_plugin : procedure(const path: PCefString); cdecl; + cef_register_web_plugin_crash : procedure(const path: PCefString); cdecl; + cef_is_web_plugin_unstable : procedure(const path: PCefString; callback: PCefWebPluginUnstableCallback); cdecl; + cef_register_widevine_cdm : procedure(const path: PCefString; callback: PCefRegisterCDMCallback); cdecl; // /include/capi/cef_xml_reader_capi.h - cef_xml_reader_create : function(stream: PCefStreamReader; encodingType: TCefXmlEncodingType; const URI: PCefString): PCefXmlReader; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_xml_reader_create : function(stream: PCefStreamReader; encodingType: TCefXmlEncodingType; const URI: PCefString): PCefXmlReader; cdecl; // /include/capi/cef_zip_reader_capi.h - cef_zip_reader_create : function(stream: PCefStreamReader): PCefZipReader; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_zip_reader_create : function(stream: PCefStreamReader): PCefZipReader; cdecl; // /include/internal/cef_logging_internal.h - cef_get_min_log_level : function : Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_get_vlog_level : function(const file_start: PAnsiChar; N: NativeInt): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_log : procedure(const file_: PAnsiChar; line, severity: Integer; const message: PAnsiChar); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_get_min_log_level : function : Integer; cdecl; + cef_get_vlog_level : function(const file_start: PAnsiChar; N: NativeInt): Integer; cdecl; + cef_log : procedure(const file_: PAnsiChar; line, severity: Integer; const message: PAnsiChar); cdecl; // /include/internal/cef_string_list.h - cef_string_list_alloc : function : TCefStringList; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_list_size : function(list: TCefStringList): NativeUInt; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_list_value : function(list: TCefStringList; index: NativeUInt; value: PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_list_append : procedure(list: TCefStringList; const value: PCefString); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_list_clear : procedure(list: TCefStringList); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_list_free : procedure(list: TCefStringList); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_list_copy : function(list: TCefStringList): TCefStringList; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_string_list_alloc : function : TCefStringList; cdecl; + cef_string_list_size : function(list: TCefStringList): NativeUInt; cdecl; + cef_string_list_value : function(list: TCefStringList; index: NativeUInt; value: PCefString): Integer; cdecl; + cef_string_list_append : procedure(list: TCefStringList; const value: PCefString); cdecl; + cef_string_list_clear : procedure(list: TCefStringList); cdecl; + cef_string_list_free : procedure(list: TCefStringList); cdecl; + cef_string_list_copy : function(list: TCefStringList): TCefStringList; cdecl; // /include/internal/cef_string_map.h - cef_string_map_alloc : function : TCefStringMap; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_size : function(map: TCefStringMap): NativeUInt; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_find : function(map: TCefStringMap; const key: PCefString; var value: TCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_key : function(map: TCefStringMap; index: NativeUInt; var key: TCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_value : function(map: TCefStringMap; index: NativeUInt; var value: TCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_append : function(map: TCefStringMap; const key, value: PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_clear : procedure(map: TCefStringMap); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_map_free : procedure(map: TCefStringMap); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_string_map_alloc : function : TCefStringMap; cdecl; + cef_string_map_size : function(map: TCefStringMap): NativeUInt; cdecl; + cef_string_map_find : function(map: TCefStringMap; const key: PCefString; var value: TCefString): Integer; cdecl; + cef_string_map_key : function(map: TCefStringMap; index: NativeUInt; var key: TCefString): Integer; cdecl; + cef_string_map_value : function(map: TCefStringMap; index: NativeUInt; var value: TCefString): Integer; cdecl; + cef_string_map_append : function(map: TCefStringMap; const key, value: PCefString): Integer; cdecl; + cef_string_map_clear : procedure(map: TCefStringMap); cdecl; + cef_string_map_free : procedure(map: TCefStringMap); cdecl; // /include/internal/cef_string_multimap.h - cef_string_multimap_alloc : function : TCefStringMultimap; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_size : function(map: TCefStringMultimap): NativeUInt; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_find_count : function(map: TCefStringMultimap; const key: PCefString): NativeUInt; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_enumerate : function(map: TCefStringMultimap; const key: PCefString; value_index: NativeUInt; var value: TCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_key : function(map: TCefStringMultimap; index: NativeUInt; var key: TCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_value : function(map: TCefStringMultimap; index: NativeUInt; var value: TCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_append : function(map: TCefStringMultimap; const key, value: PCefString): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_clear : procedure(map: TCefStringMultimap); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_multimap_free : procedure(map: TCefStringMultimap); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_string_multimap_alloc : function : TCefStringMultimap; cdecl; + cef_string_multimap_size : function(map: TCefStringMultimap): NativeUInt; cdecl; + cef_string_multimap_find_count : function(map: TCefStringMultimap; const key: PCefString): NativeUInt; cdecl; + cef_string_multimap_enumerate : function(map: TCefStringMultimap; const key: PCefString; value_index: NativeUInt; var value: TCefString): Integer; cdecl; + cef_string_multimap_key : function(map: TCefStringMultimap; index: NativeUInt; var key: TCefString): Integer; cdecl; + cef_string_multimap_value : function(map: TCefStringMultimap; index: NativeUInt; var value: TCefString): Integer; cdecl; + cef_string_multimap_append : function(map: TCefStringMultimap; const key, value: PCefString): Integer; cdecl; + cef_string_multimap_clear : procedure(map: TCefStringMultimap); cdecl; + cef_string_multimap_free : procedure(map: TCefStringMultimap); cdecl; // /include/internal/cef_string_types.h - cef_string_wide_set : function(const src: PWideChar; src_len: NativeUInt; output: PCefStringWide; copy: Integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf8_set : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringUtf8; copy: Integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_set : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16; copy: Integer): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_wide_clear : procedure(str: PCefStringWide); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf8_clear : procedure(str: PCefStringUtf8); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_clear : procedure(str: PCefStringUtf16); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_wide_cmp : function(const str1, str2: PCefStringWide): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf8_cmp : function(const str1, str2: PCefStringUtf8): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_cmp : function(const str1, str2: PCefStringUtf16): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_wide_to_utf8 : function(const src: PWideChar; src_len: NativeUInt; output: PCefStringUtf8): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf8_to_wide : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringWide): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_wide_to_utf16 : function(const src: PWideChar; src_len: NativeUInt; output: PCefStringUtf16): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_to_wide : function(const src: PChar16; src_len: NativeUInt; output: PCefStringWide): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf8_to_utf16 : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringUtf16): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_to_utf8 : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf8): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_ascii_to_wide : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringWide): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_ascii_to_utf16 : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringUtf16): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_userfree_wide_alloc : function : PCefStringUserFreeWide; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_userfree_utf8_alloc : function : PCefStringUserFreeUtf8; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_userfree_utf16_alloc : function : PCefStringUserFreeUtf16; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_userfree_wide_free : procedure(str: PCefStringUserFreeWide); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_userfree_utf8_free : procedure(str: PCefStringUserFreeUtf8); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_userfree_utf16_free : procedure(str: PCefStringUserFreeUtf16); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_to_lower : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_string_utf16_to_upper : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16): Integer; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_string_wide_set : function(const src: PWideChar; src_len: NativeUInt; output: PCefStringWide; copy: Integer): Integer; cdecl; + cef_string_utf8_set : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringUtf8; copy: Integer): Integer; cdecl; + cef_string_utf16_set : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16; copy: Integer): Integer; cdecl; + cef_string_wide_clear : procedure(str: PCefStringWide); cdecl; + cef_string_utf8_clear : procedure(str: PCefStringUtf8); cdecl; + cef_string_utf16_clear : procedure(str: PCefStringUtf16); cdecl; + cef_string_wide_cmp : function(const str1, str2: PCefStringWide): Integer; cdecl; + cef_string_utf8_cmp : function(const str1, str2: PCefStringUtf8): Integer; cdecl; + cef_string_utf16_cmp : function(const str1, str2: PCefStringUtf16): Integer; cdecl; + cef_string_wide_to_utf8 : function(const src: PWideChar; src_len: NativeUInt; output: PCefStringUtf8): Integer; cdecl; + cef_string_utf8_to_wide : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringWide): Integer; cdecl; + cef_string_wide_to_utf16 : function(const src: PWideChar; src_len: NativeUInt; output: PCefStringUtf16): Integer; cdecl; + cef_string_utf16_to_wide : function(const src: PChar16; src_len: NativeUInt; output: PCefStringWide): Integer; cdecl; + cef_string_utf8_to_utf16 : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringUtf16): Integer; cdecl; + cef_string_utf16_to_utf8 : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf8): Integer; cdecl; + cef_string_ascii_to_wide : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringWide): Integer; cdecl; + cef_string_ascii_to_utf16 : function(const src: PAnsiChar; src_len: NativeUInt; output: PCefStringUtf16): Integer; cdecl; + cef_string_userfree_wide_alloc : function : PCefStringUserFreeWide; cdecl; + cef_string_userfree_utf8_alloc : function : PCefStringUserFreeUtf8; cdecl; + cef_string_userfree_utf16_alloc : function : PCefStringUserFreeUtf16; cdecl; + cef_string_userfree_wide_free : procedure(str: PCefStringUserFreeWide); cdecl; + cef_string_userfree_utf8_free : procedure(str: PCefStringUserFreeUtf8); cdecl; + cef_string_userfree_utf16_free : procedure(str: PCefStringUserFreeUtf16); cdecl; + cef_string_utf16_to_lower : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16): Integer; cdecl; + cef_string_utf16_to_upper : function(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16): Integer; cdecl; // /include/internal/cef_thread_internal.h - cef_get_current_platform_thread_id : function : TCefPlatformThreadId; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_get_current_platform_thread_handle : function : TCefPlatformThreadHandle; {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_get_current_platform_thread_id : function : TCefPlatformThreadId; cdecl; + cef_get_current_platform_thread_handle : function : TCefPlatformThreadHandle; cdecl; // /include/internal/cef_trace_event_internal.h - cef_trace_event_instant : procedure(const category, name, arg1_name: PAnsiChar; arg1_val: uint64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_event_begin : procedure(const category, name, arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_event_end : procedure(const category, name, arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_counter : procedure(const category, name, value1_name: PAnsiChar; value1_val: UInt64; const value2_name: PAnsiChar; value2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_counter_id : procedure(const category, name: PAnsiChar; id: UInt64; const value1_name: PAnsiChar; value1_val: UInt64; const value2_name: PAnsiChar; value2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_event_async_begin : procedure(const category, name: PAnsiChar; id: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_event_async_step_into : procedure(const category, name: PAnsiChar; id, step: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_event_async_step_past : procedure(const category, name: PAnsiChar; id, step: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; - cef_trace_event_async_end : procedure(const category, name: PAnsiChar; id: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); {$IFDEF CPUX64}stdcall{$ELSE}cdecl{$ENDIF}; + cef_trace_event_instant : procedure(const category, name, arg1_name: PAnsiChar; arg1_val: uint64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); cdecl; + cef_trace_event_begin : procedure(const category, name, arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); cdecl; + cef_trace_event_end : procedure(const category, name, arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); cdecl; + cef_trace_counter : procedure(const category, name, value1_name: PAnsiChar; value1_val: UInt64; const value2_name: PAnsiChar; value2_val: UInt64; copy: Integer); cdecl; + cef_trace_counter_id : procedure(const category, name: PAnsiChar; id: UInt64; const value1_name: PAnsiChar; value1_val: UInt64; const value2_name: PAnsiChar; value2_val: UInt64; copy: Integer); cdecl; + cef_trace_event_async_begin : procedure(const category, name: PAnsiChar; id: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); cdecl; + cef_trace_event_async_step_into : procedure(const category, name: PAnsiChar; id, step: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; copy: Integer); cdecl; + cef_trace_event_async_step_past : procedure(const category, name: PAnsiChar; id, step: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; copy: Integer); cdecl; + cef_trace_event_async_end : procedure(const category, name: PAnsiChar; id: UInt64; const arg1_name: PAnsiChar; arg1_val: UInt64; const arg2_name: PAnsiChar; arg2_val: UInt64; copy: Integer); cdecl; implementation diff --git a/source/uCEFLifeSpanHandler.pas b/source/uCEFLifeSpanHandler.pas index 6fec2bdf..441d4c28 100644 --- a/source/uCEFLifeSpanHandler.pas +++ b/source/uCEFLifeSpanHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFLifeSpanHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -179,10 +183,10 @@ begin with PCefLifeSpanHandler(FData)^ do begin - on_before_popup := cef_life_span_handler_on_before_popup; - on_after_created := cef_life_span_handler_on_after_created; - do_close := cef_life_span_handler_do_close; - on_before_close := cef_life_span_handler_on_before_close; + on_before_popup := {$IFDEF FPC}@{$ENDIF}cef_life_span_handler_on_before_popup; + on_after_created := {$IFDEF FPC}@{$ENDIF}cef_life_span_handler_on_after_created; + do_close := {$IFDEF FPC}@{$ENDIF}cef_life_span_handler_do_close; + on_before_close := {$IFDEF FPC}@{$ENDIF}cef_life_span_handler_on_before_close; end; end; diff --git a/source/uCEFListValue.pas b/source/uCEFListValue.pas index f1b6c2e5..39781c67 100644 --- a/source/uCEFListValue.pas +++ b/source/uCEFListValue.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFListValue; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -93,156 +97,157 @@ uses function TCefListValueRef.Clear: Boolean; begin - Result := PCefListValue(FData).clear(PCefListValue(FData)) <> 0; + Result := PCefListValue(FData)^.clear(PCefListValue(FData)) <> 0; end; function TCefListValueRef.Copy: ICefListValue; begin - Result := UnWrap(PCefListValue(FData).copy(PCefListValue(FData))); + Result := UnWrap(PCefListValue(FData)^.copy(PCefListValue(FData))); end; class function TCefListValueRef.New: ICefListValue; begin - Result := UnWrap(cef_list_value_create); + Result := UnWrap(cef_list_value_create()); end; function TCefListValueRef.GetBinary(index: NativeUInt): ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefListValue(FData).get_binary(PCefListValue(FData), index)); + Result := TCefBinaryValueRef.UnWrap(PCefListValue(FData)^.get_binary(PCefListValue(FData), index)); end; function TCefListValueRef.GetBool(index: NativeUInt): Boolean; begin - Result := PCefListValue(FData).get_bool(PCefListValue(FData), index) <> 0; + Result := PCefListValue(FData)^.get_bool(PCefListValue(FData), index) <> 0; end; function TCefListValueRef.GetDictionary(index: NativeUInt): ICefDictionaryValue; begin - Result := TCefDictionaryValueRef.UnWrap(PCefListValue(FData).get_dictionary(PCefListValue(FData), index)); + Result := TCefDictionaryValueRef.UnWrap(PCefListValue(FData)^.get_dictionary(PCefListValue(FData), index)); end; function TCefListValueRef.GetDouble(index: NativeUInt): Double; begin - Result := PCefListValue(FData).get_double(PCefListValue(FData), index); + Result := PCefListValue(FData)^.get_double(PCefListValue(FData), index); end; function TCefListValueRef.GetInt(index: NativeUInt): Integer; begin - Result := PCefListValue(FData).get_int(PCefListValue(FData), index); + Result := PCefListValue(FData)^.get_int(PCefListValue(FData), index); end; function TCefListValueRef.GetList(index: NativeUInt): ICefListValue; begin - Result := UnWrap(PCefListValue(FData).get_list(PCefListValue(FData), index)); + Result := UnWrap(PCefListValue(FData)^.get_list(PCefListValue(FData), index)); end; function TCefListValueRef.GetSize: NativeUInt; begin - Result := PCefListValue(FData).get_size(PCefListValue(FData)); + Result := PCefListValue(FData)^.get_size(PCefListValue(FData)); end; function TCefListValueRef.GetString(index: NativeUInt): ustring; begin - Result := CefStringFreeAndGet(PCefListValue(FData).get_string(PCefListValue(FData), index)); + Result := CefStringFreeAndGet(PCefListValue(FData)^.get_string(PCefListValue(FData), index)); end; function TCefListValueRef.GetType(index: NativeUInt): TCefValueType; begin - Result := PCefListValue(FData).get_type(PCefListValue(FData), index); + Result := PCefListValue(FData)^.get_type(PCefListValue(FData), index); end; function TCefListValueRef.GetValue(index: NativeUInt): ICefValue; begin - Result := TCefValueRef.UnWrap(PCefListValue(FData).get_value(PCefListValue(FData), index)); + Result := TCefValueRef.UnWrap(PCefListValue(FData)^.get_value(PCefListValue(FData), index)); end; function TCefListValueRef.IsEqual(const that: ICefListValue): Boolean; begin - Result := PCefListValue(FData).is_equal(PCefListValue(FData), CefGetData(that)) <> 0; + Result := PCefListValue(FData)^.is_equal(PCefListValue(FData), CefGetData(that)) <> 0; end; function TCefListValueRef.IsOwned: Boolean; begin - Result := PCefListValue(FData).is_owned(PCefListValue(FData)) <> 0; + Result := PCefListValue(FData)^.is_owned(PCefListValue(FData)) <> 0; end; function TCefListValueRef.IsReadOnly: Boolean; begin - Result := PCefListValue(FData).is_read_only(PCefListValue(FData)) <> 0; + Result := PCefListValue(FData)^.is_read_only(PCefListValue(FData)) <> 0; end; function TCefListValueRef.IsSame(const that: ICefListValue): Boolean; begin - Result := PCefListValue(FData).is_same(PCefListValue(FData), CefGetData(that)) <> 0; + Result := PCefListValue(FData)^.is_same(PCefListValue(FData), CefGetData(that)) <> 0; end; function TCefListValueRef.IsValid: Boolean; begin - Result := PCefListValue(FData).is_valid(PCefListValue(FData)) <> 0; + Result := PCefListValue(FData)^.is_valid(PCefListValue(FData)) <> 0; end; function TCefListValueRef.Remove(index: NativeUInt): Boolean; begin - Result := PCefListValue(FData).remove(PCefListValue(FData), index) <> 0; + Result := PCefListValue(FData)^.remove(PCefListValue(FData), index) <> 0; end; function TCefListValueRef.SetBinary(index: NativeUInt; const value: ICefBinaryValue): Boolean; begin - Result := PCefListValue(FData).set_binary(PCefListValue(FData), index, CefGetData(value)) <> 0; + Result := PCefListValue(FData)^.set_binary(PCefListValue(FData), index, CefGetData(value)) <> 0; end; function TCefListValueRef.SetBool(index: NativeUInt; value: Boolean): Boolean; begin - Result := PCefListValue(FData).set_bool(PCefListValue(FData), index, Ord(value)) <> 0; + Result := PCefListValue(FData)^.set_bool(PCefListValue(FData), index, Ord(value)) <> 0; end; function TCefListValueRef.SetDictionary(index: NativeUInt; const value: ICefDictionaryValue): Boolean; begin - Result := PCefListValue(FData).set_dictionary(PCefListValue(FData), index, CefGetData(value)) <> 0; + Result := PCefListValue(FData)^.set_dictionary(PCefListValue(FData), index, CefGetData(value)) <> 0; end; function TCefListValueRef.SetDouble(index: NativeUInt; value: Double): Boolean; begin - Result := PCefListValue(FData).set_double(PCefListValue(FData), index, value) <> 0; + Result := PCefListValue(FData)^.set_double(PCefListValue(FData), index, value) <> 0; end; function TCefListValueRef.SetInt(index: NativeUInt; value: Integer): Boolean; begin - Result := PCefListValue(FData).set_int(PCefListValue(FData), index, value) <> 0; + Result := PCefListValue(FData)^.set_int(PCefListValue(FData), index, value) <> 0; end; function TCefListValueRef.SetList(index: NativeUInt; const value: ICefListValue): Boolean; begin - Result := PCefListValue(FData).set_list(PCefListValue(FData), index, CefGetData(value)) <> 0; + Result := PCefListValue(FData)^.set_list(PCefListValue(FData), index, CefGetData(value)) <> 0; end; function TCefListValueRef.SetNull(index: NativeUInt): Boolean; begin - Result := PCefListValue(FData).set_null(PCefListValue(FData), index) <> 0; + Result := PCefListValue(FData)^.set_null(PCefListValue(FData), index) <> 0; end; function TCefListValueRef.SetSize(size: NativeUInt): Boolean; begin - Result := PCefListValue(FData).set_size(PCefListValue(FData), size) <> 0; + Result := PCefListValue(FData)^.set_size(PCefListValue(FData), size) <> 0; end; function TCefListValueRef.SetString(index: NativeUInt; const value: ustring): Boolean; var - v: TCefString; + TempValue : TCefString; begin - v := CefString(value); - Result := PCefListValue(FData).set_string(PCefListValue(FData), index, @v) <> 0; + TempValue := CefString(value); + Result := PCefListValue(FData)^.set_string(PCefListValue(FData), index, @TempValue) <> 0; end; function TCefListValueRef.SetValue(index: NativeUInt; const value: ICefValue): Boolean; begin - Result := PCefListValue(FData).set_value(PCefListValue(FData), index, CefGetData(value)) <> 0; + Result := PCefListValue(FData)^.set_value(PCefListValue(FData), index, CefGetData(value)) <> 0; end; class function TCefListValueRef.UnWrap(data: Pointer): ICefListValue; begin - if data <> nil then - Result := Create(data) as ICefListValue else + if (data <> nil) then + Result := Create(data) as ICefListValue + else Result := nil; end; diff --git a/source/uCEFLoadHandler.pas b/source/uCEFLoadHandler.pas index 4fd7d481..07633f6c 100644 --- a/source/uCEFLoadHandler.pas +++ b/source/uCEFLoadHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFLoadHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -161,10 +165,10 @@ begin with PCefLoadHandler(FData)^ do begin - on_loading_state_change := cef_load_handler_on_loading_state_change; - on_load_start := cef_load_handler_on_load_start; - on_load_end := cef_load_handler_on_load_end; - on_load_error := cef_load_handler_on_load_error; + on_loading_state_change := {$IFDEF FPC}@{$ENDIF}cef_load_handler_on_loading_state_change; + on_load_start := {$IFDEF FPC}@{$ENDIF}cef_load_handler_on_load_start; + on_load_end := {$IFDEF FPC}@{$ENDIF}cef_load_handler_on_load_end; + on_load_error := {$IFDEF FPC}@{$ENDIF}cef_load_handler_on_load_error; end; end; diff --git a/source/uCEFMenuModel.pas b/source/uCEFMenuModel.pas index d1ba8d43..90655408 100644 --- a/source/uCEFMenuModel.pas +++ b/source/uCEFMenuModel.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFMenuModel; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -119,370 +123,344 @@ uses uCEFMiscFunctions, uCEFLibFunctions; -function TCefMenuModelRef.AddCheckItem(commandId: Integer; - const text: ustring): Boolean; +function TCefMenuModelRef.AddCheckItem(commandId: Integer; const text: ustring): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).add_check_item(PCefMenuModel(FData), commandId, @t) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.add_check_item(PCefMenuModel(FData), commandId, @TempText) <> 0; end; -function TCefMenuModelRef.AddItem(commandId: Integer; - const text: ustring): Boolean; +function TCefMenuModelRef.AddItem(commandId: Integer; const text: ustring): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).add_item(PCefMenuModel(FData), commandId, @t) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.add_item(PCefMenuModel(FData), commandId, @TempText) <> 0; end; -function TCefMenuModelRef.AddRadioItem(commandId: Integer; const text: ustring; - groupId: Integer): Boolean; +function TCefMenuModelRef.AddRadioItem(commandId: Integer; const text: ustring; groupId: Integer): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).add_radio_item(PCefMenuModel(FData), commandId, @t, groupId) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.add_radio_item(PCefMenuModel(FData), commandId, @TempText, groupId) <> 0; end; function TCefMenuModelRef.AddSeparator: Boolean; begin - Result := PCefMenuModel(FData).add_separator(PCefMenuModel(FData)) <> 0; + Result := PCefMenuModel(FData)^.add_separator(PCefMenuModel(FData)) <> 0; end; -function TCefMenuModelRef.AddSubMenu(commandId: Integer; - const text: ustring): ICefMenuModel; +function TCefMenuModelRef.AddSubMenu(commandId: Integer; const text: ustring): ICefMenuModel; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData).add_sub_menu(PCefMenuModel(FData), commandId, @t)); + TempText := CefString(text); + Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData)^.add_sub_menu(PCefMenuModel(FData), commandId, @TempText)); end; function TCefMenuModelRef.IsSubMenu: Boolean; begin - Result := PCefMenuModel(FData).is_sub_menu(PCefMenuModel(FData)) <> 0; + Result := PCefMenuModel(FData)^.is_sub_menu(PCefMenuModel(FData)) <> 0; end; function TCefMenuModelRef.Clear: Boolean; begin - Result := PCefMenuModel(FData).clear(PCefMenuModel(FData)) <> 0; + Result := PCefMenuModel(FData)^.clear(PCefMenuModel(FData)) <> 0; end; -function TCefMenuModelRef.GetAccelerator(commandId: Integer; - out keyCode: Integer; out shiftPressed, ctrlPressed, - altPressed: Boolean): Boolean; +function TCefMenuModelRef.GetAccelerator(commandId: Integer; out keyCode: Integer; out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; var - sp, cp, ap: Integer; + TempShift, TempCtrl, TempAlt : Integer; begin - Result := PCefMenuModel(FData).get_accelerator(PCefMenuModel(FData), - commandId, @keyCode, @sp, @cp, @ap) <> 0; - shiftPressed := sp <> 0; - ctrlPressed := cp <> 0; - altPressed := ap <> 0; + Result := PCefMenuModel(FData)^.get_accelerator(PCefMenuModel(FData), commandId, @keyCode, @TempShift, @TempCtrl, @TempAlt) <> 0; + shiftPressed := TempShift <> 0; + ctrlPressed := TempCtrl <> 0; + altPressed := TempAlt <> 0; end; -function TCefMenuModelRef.GetAcceleratorAt(index: Integer; out keyCode: Integer; - out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; +function TCefMenuModelRef.GetAcceleratorAt(index: Integer; out keyCode: Integer; out shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; var - sp, cp, ap: Integer; + TempShift, TempCtrl, TempAlt : Integer; begin - Result := PCefMenuModel(FData).get_accelerator_at(PCefMenuModel(FData), - index, @keyCode, @sp, @cp, @ap) <> 0; - shiftPressed := sp <> 0; - ctrlPressed := cp <> 0; - altPressed := ap <> 0; + Result := PCefMenuModel(FData)^.get_accelerator_at(PCefMenuModel(FData), index, @keyCode, @TempShift, @TempCtrl, @TempAlt) <> 0; + shiftPressed := TempShift <> 0; + ctrlPressed := TempCtrl <> 0; + altPressed := TempAlt <> 0; end; function TCefMenuModelRef.SetColor(commandId: Integer; colorType: TCefMenuColorType; color: TCefColor): Boolean; begin - Result := PCefMenuModel(FData).set_color(PCefMenuModel(FData), commandId, colorType, color) <> 0; + Result := PCefMenuModel(FData)^.set_color(PCefMenuModel(FData), commandId, colorType, color) <> 0; end; function TCefMenuModelRef.SetColorAt(index: Integer; colorType: TCefMenuColorType; color: TCefColor): Boolean; begin - Result := PCefMenuModel(FData).set_color_at(PCefMenuModel(FData), index, colorType, color) <> 0; + Result := PCefMenuModel(FData)^.set_color_at(PCefMenuModel(FData), index, colorType, color) <> 0; end; function TCefMenuModelRef.GetColor(commandId: Integer; colorType: TCefMenuColorType; out color: TCefColor): Boolean; begin - Result := PCefMenuModel(FData).get_color(PCefMenuModel(FData), commandId, colorType, @color) <> 0; + Result := PCefMenuModel(FData)^.get_color(PCefMenuModel(FData), commandId, colorType, @color) <> 0; end; function TCefMenuModelRef.GetColorAt(index: Integer; colorType: TCefMenuColorType; out color: TCefColor): Boolean; begin - Result := PCefMenuModel(FData).get_color_at(PCefMenuModel(FData), index, colorType, @color) <> 0; + Result := PCefMenuModel(FData)^.get_color_at(PCefMenuModel(FData), index, colorType, @color) <> 0; end; function TCefMenuModelRef.SetFontList(commandId: Integer; const fontList: ustring): Boolean; var - TempString : TCefString; + TempList : TCefString; begin - TempString := CefString(fontList); - Result := PCefMenuModel(FData).set_font_list(PCefMenuModel(FData), commandId, @TempString) <> 0; + TempList := CefString(fontList); + Result := PCefMenuModel(FData)^.set_font_list(PCefMenuModel(FData), commandId, @TempList) <> 0; end; function TCefMenuModelRef.SetFontListAt(index: Integer; const fontList: ustring): Boolean; var - TempString : TCefString; + TempList : TCefString; begin - TempString := CefString(fontList); - Result := PCefMenuModel(FData).set_font_list_at(PCefMenuModel(FData), index, @TempString) <> 0; + TempList := CefString(fontList); + Result := PCefMenuModel(FData)^.set_font_list_at(PCefMenuModel(FData), index, @TempList) <> 0; end; function TCefMenuModelRef.GetCommandIdAt(index: Integer): Integer; begin - Result := PCefMenuModel(FData).get_command_id_at(PCefMenuModel(FData), index); + Result := PCefMenuModel(FData)^.get_command_id_at(PCefMenuModel(FData), index); end; function TCefMenuModelRef.GetCount: Integer; begin - Result := PCefMenuModel(FData).get_count(PCefMenuModel(FData)); + Result := PCefMenuModel(FData)^.get_count(PCefMenuModel(FData)); end; function TCefMenuModelRef.GetGroupId(commandId: Integer): Integer; begin - Result := PCefMenuModel(FData).get_group_id(PCefMenuModel(FData), commandId); + Result := PCefMenuModel(FData)^.get_group_id(PCefMenuModel(FData), commandId); end; function TCefMenuModelRef.GetGroupIdAt(index: Integer): Integer; begin - Result := PCefMenuModel(FData).get_group_id(PCefMenuModel(FData), index); + Result := PCefMenuModel(FData)^.get_group_id(PCefMenuModel(FData), index); end; function TCefMenuModelRef.GetIndexOf(commandId: Integer): Integer; begin - Result := PCefMenuModel(FData).get_index_of(PCefMenuModel(FData), commandId); + Result := PCefMenuModel(FData)^.get_index_of(PCefMenuModel(FData), commandId); end; function TCefMenuModelRef.GetLabel(commandId: Integer): ustring; begin - Result := CefStringFreeAndGet(PCefMenuModel(FData).get_label(PCefMenuModel(FData), commandId)); + Result := CefStringFreeAndGet(PCefMenuModel(FData)^.get_label(PCefMenuModel(FData), commandId)); end; function TCefMenuModelRef.GetLabelAt(index: Integer): ustring; begin - Result := CefStringFreeAndGet(PCefMenuModel(FData).get_label_at(PCefMenuModel(FData), index)); + Result := CefStringFreeAndGet(PCefMenuModel(FData)^.get_label_at(PCefMenuModel(FData), index)); end; function TCefMenuModelRef.GetSubMenu(commandId: Integer): ICefMenuModel; begin - Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData).get_sub_menu(PCefMenuModel(FData), commandId)); + Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData)^.get_sub_menu(PCefMenuModel(FData), commandId)); end; function TCefMenuModelRef.GetSubMenuAt(index: Integer): ICefMenuModel; begin - Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData).get_sub_menu_at(PCefMenuModel(FData), index)); + Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData)^.get_sub_menu_at(PCefMenuModel(FData), index)); end; function TCefMenuModelRef.GetType(commandId: Integer): TCefMenuItemType; begin - Result := PCefMenuModel(FData).get_type(PCefMenuModel(FData), commandId); + Result := PCefMenuModel(FData)^.get_type(PCefMenuModel(FData), commandId); end; function TCefMenuModelRef.GetTypeAt(index: Integer): TCefMenuItemType; begin - Result := PCefMenuModel(FData).get_type_at(PCefMenuModel(FData), index); + Result := PCefMenuModel(FData)^.get_type_at(PCefMenuModel(FData), index); end; function TCefMenuModelRef.HasAccelerator(commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).has_accelerator(PCefMenuModel(FData), commandId) <> 0; + Result := PCefMenuModel(FData)^.has_accelerator(PCefMenuModel(FData), commandId) <> 0; end; function TCefMenuModelRef.HasAcceleratorAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).has_accelerator_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.has_accelerator_at(PCefMenuModel(FData), index) <> 0; end; -function TCefMenuModelRef.InsertCheckItemAt(index, commandId: Integer; - const text: ustring): Boolean; +function TCefMenuModelRef.InsertCheckItemAt(index, commandId: Integer; const text: ustring): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).insert_check_item_at(PCefMenuModel(FData), index, commandId, @t) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.insert_check_item_at(PCefMenuModel(FData), index, commandId, @TempText) <> 0; end; -function TCefMenuModelRef.InsertItemAt(index, commandId: Integer; - const text: ustring): Boolean; +function TCefMenuModelRef.InsertItemAt(index, commandId: Integer; const text: ustring): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).insert_item_at(PCefMenuModel(FData), index, commandId, @t) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.insert_item_at(PCefMenuModel(FData), index, commandId, @TempText) <> 0; end; -function TCefMenuModelRef.InsertRadioItemAt(index, commandId: Integer; - const text: ustring; groupId: Integer): Boolean; +function TCefMenuModelRef.InsertRadioItemAt(index, commandId: Integer; const text: ustring; groupId: Integer): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).insert_radio_item_at(PCefMenuModel(FData), - index, commandId, @t, groupId) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.insert_radio_item_at(PCefMenuModel(FData), index, commandId, @TempText, groupId) <> 0; end; function TCefMenuModelRef.InsertSeparatorAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).insert_separator_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.insert_separator_at(PCefMenuModel(FData), index) <> 0; end; -function TCefMenuModelRef.InsertSubMenuAt(index, commandId: Integer; - const text: ustring): ICefMenuModel; +function TCefMenuModelRef.InsertSubMenuAt(index, commandId: Integer; const text: ustring): ICefMenuModel; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData).insert_sub_menu_at( - PCefMenuModel(FData), index, commandId, @t)); + TempText := CefString(text); + Result := TCefMenuModelRef.UnWrap(PCefMenuModel(FData)^.insert_sub_menu_at( PCefMenuModel(FData), index, commandId, @TempText)); end; function TCefMenuModelRef.IsChecked(commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).is_checked(PCefMenuModel(FData), commandId) <> 0; + Result := PCefMenuModel(FData)^.is_checked(PCefMenuModel(FData), commandId) <> 0; end; function TCefMenuModelRef.IsCheckedAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).is_checked_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.is_checked_at(PCefMenuModel(FData), index) <> 0; end; function TCefMenuModelRef.IsEnabled(commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).is_enabled(PCefMenuModel(FData), commandId) <> 0; + Result := PCefMenuModel(FData)^.is_enabled(PCefMenuModel(FData), commandId) <> 0; end; function TCefMenuModelRef.IsEnabledAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).is_enabled_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.is_enabled_at(PCefMenuModel(FData), index) <> 0; end; function TCefMenuModelRef.IsVisible(commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).is_visible(PCefMenuModel(FData), commandId) <> 0; + Result := PCefMenuModel(FData)^.is_visible(PCefMenuModel(FData), commandId) <> 0; end; function TCefMenuModelRef.isVisibleAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).is_visible_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.is_visible_at(PCefMenuModel(FData), index) <> 0; end; -class function TCefMenuModelRef.New( - const delegate: ICefMenuModelDelegate): ICefMenuModel; +class function TCefMenuModelRef.New(const delegate: ICefMenuModelDelegate): ICefMenuModel; begin Result := UnWrap(cef_menu_model_create(CefGetData(delegate))); end; function TCefMenuModelRef.Remove(commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).remove(PCefMenuModel(FData), commandId) <> 0; + Result := PCefMenuModel(FData)^.remove(PCefMenuModel(FData), commandId) <> 0; end; function TCefMenuModelRef.RemoveAccelerator(commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).remove_accelerator(PCefMenuModel(FData), commandId) <> 0; + Result := PCefMenuModel(FData)^.remove_accelerator(PCefMenuModel(FData), commandId) <> 0; end; function TCefMenuModelRef.RemoveAcceleratorAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).remove_accelerator_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.remove_accelerator_at(PCefMenuModel(FData), index) <> 0; end; function TCefMenuModelRef.RemoveAt(index: Integer): Boolean; begin - Result := PCefMenuModel(FData).remove_at(PCefMenuModel(FData), index) <> 0; + Result := PCefMenuModel(FData)^.remove_at(PCefMenuModel(FData), index) <> 0; end; -function TCefMenuModelRef.SetAccelerator(commandId, keyCode: Integer; - shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; +function TCefMenuModelRef.SetAccelerator(commandId, keyCode: Integer; shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_accelerator(PCefMenuModel(FData), - commandId, keyCode, Ord(shiftPressed), Ord(ctrlPressed), Ord(altPressed)) <> 0; + Result := PCefMenuModel(FData)^.set_accelerator(PCefMenuModel(FData), commandId, keyCode, + Ord(shiftPressed), Ord(ctrlPressed), Ord(altPressed)) <> 0; end; -function TCefMenuModelRef.SetAcceleratorAt(index, keyCode: Integer; - shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; +function TCefMenuModelRef.SetAcceleratorAt(index, keyCode: Integer; shiftPressed, ctrlPressed, altPressed: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_accelerator_at(PCefMenuModel(FData), - index, keyCode, Ord(shiftPressed), Ord(ctrlPressed), Ord(altPressed)) <> 0; + Result := PCefMenuModel(FData)^.set_accelerator_at(PCefMenuModel(FData), index, keyCode, + Ord(shiftPressed), Ord(ctrlPressed), Ord(altPressed)) <> 0; end; -function TCefMenuModelRef.setChecked(commandId: Integer; - checked: Boolean): Boolean; +function TCefMenuModelRef.setChecked(commandId: Integer; checked: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_checked(PCefMenuModel(FData), - commandId, Ord(checked)) <> 0; + Result := PCefMenuModel(FData)^.set_checked(PCefMenuModel(FData), commandId, Ord(checked)) <> 0; end; -function TCefMenuModelRef.setCheckedAt(index: Integer; - checked: Boolean): Boolean; +function TCefMenuModelRef.setCheckedAt(index: Integer; checked: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_checked_at(PCefMenuModel(FData), index, Ord(checked)) <> 0; + Result := PCefMenuModel(FData)^.set_checked_at(PCefMenuModel(FData), index, Ord(checked)) <> 0; end; function TCefMenuModelRef.SetCommandIdAt(index, commandId: Integer): Boolean; begin - Result := PCefMenuModel(FData).set_command_id_at(PCefMenuModel(FData), index, commandId) <> 0; + Result := PCefMenuModel(FData)^.set_command_id_at(PCefMenuModel(FData), index, commandId) <> 0; end; -function TCefMenuModelRef.SetEnabled(commandId: Integer; - enabled: Boolean): Boolean; +function TCefMenuModelRef.SetEnabled(commandId: Integer; enabled: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_enabled(PCefMenuModel(FData), commandId, Ord(enabled)) <> 0; + Result := PCefMenuModel(FData)^.set_enabled(PCefMenuModel(FData), commandId, Ord(enabled)) <> 0; end; -function TCefMenuModelRef.SetEnabledAt(index: Integer; - enabled: Boolean): Boolean; +function TCefMenuModelRef.SetEnabledAt(index: Integer; enabled: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_enabled_at(PCefMenuModel(FData), index, Ord(enabled)) <> 0; + Result := PCefMenuModel(FData)^.set_enabled_at(PCefMenuModel(FData), index, Ord(enabled)) <> 0; end; function TCefMenuModelRef.SetGroupId(commandId, groupId: Integer): Boolean; begin - Result := PCefMenuModel(FData).set_group_id(PCefMenuModel(FData), commandId, groupId) <> 0; + Result := PCefMenuModel(FData)^.set_group_id(PCefMenuModel(FData), commandId, groupId) <> 0; end; function TCefMenuModelRef.SetGroupIdAt(index, groupId: Integer): Boolean; begin - Result := PCefMenuModel(FData).set_group_id_at(PCefMenuModel(FData), index, groupId) <> 0; + Result := PCefMenuModel(FData)^.set_group_id_at(PCefMenuModel(FData), index, groupId) <> 0; end; -function TCefMenuModelRef.SetLabel(commandId: Integer; - const text: ustring): Boolean; +function TCefMenuModelRef.SetLabel(commandId: Integer; const text: ustring): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).set_label(PCefMenuModel(FData), commandId, @t) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.set_label(PCefMenuModel(FData), commandId, @TempText) <> 0; end; -function TCefMenuModelRef.SetLabelAt(index: Integer; - const text: ustring): Boolean; +function TCefMenuModelRef.SetLabelAt(index: Integer; const text: ustring): Boolean; var - t: TCefString; + TempText : TCefString; begin - t := CefString(text); - Result := PCefMenuModel(FData).set_label_at(PCefMenuModel(FData), index, @t) <> 0; + TempText := CefString(text); + Result := PCefMenuModel(FData)^.set_label_at(PCefMenuModel(FData), index, @TempText) <> 0; end; -function TCefMenuModelRef.SetVisible(commandId: Integer; - visible: Boolean): Boolean; +function TCefMenuModelRef.SetVisible(commandId: Integer; visible: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_visible(PCefMenuModel(FData), commandId, Ord(visible)) <> 0; + Result := PCefMenuModel(FData)^.set_visible(PCefMenuModel(FData), commandId, Ord(visible)) <> 0; end; -function TCefMenuModelRef.SetVisibleAt(index: Integer; - visible: Boolean): Boolean; +function TCefMenuModelRef.SetVisibleAt(index: Integer; visible: Boolean): Boolean; begin - Result := PCefMenuModel(FData).set_visible_at(PCefMenuModel(FData), index, Ord(visible)) <> 0; + Result := PCefMenuModel(FData)^.set_visible_at(PCefMenuModel(FData), index, Ord(visible)) <> 0; end; class function TCefMenuModelRef.UnWrap(data: Pointer): ICefMenuModel; begin - if data <> nil then - Result := Create(data) as ICefMenuModel else + if (data <> nil) then + Result := Create(data) as ICefMenuModel + else Result := nil; end; diff --git a/source/uCEFMenuModelDelegate.pas b/source/uCEFMenuModelDelegate.pas index 1ac391db..b21bf29f 100644 --- a/source/uCEFMenuModelDelegate.pas +++ b/source/uCEFMenuModelDelegate.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFMenuModelDelegate; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -163,13 +167,13 @@ begin with PCefMenuModelDelegate(FData)^ do begin - execute_command := cef_menu_model_delegate_execute_command; - mouse_outside_menu := cef_menu_model_delegate_mouse_outside_menu; - unhandled_open_submenu := cef_menu_model_delegate_unhandled_open_submenu; - unhandled_close_submenu := cef_menu_model_delegate_unhandled_close_submenu; - menu_will_show := cef_menu_model_delegate_menu_will_show; - menu_closed := cef_menu_model_delegate_menu_closed; - format_label := cef_menu_model_delegate_format_label; + execute_command := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_execute_command; + mouse_outside_menu := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_mouse_outside_menu; + unhandled_open_submenu := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_unhandled_open_submenu; + unhandled_close_submenu := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_unhandled_close_submenu; + menu_will_show := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_menu_will_show; + menu_closed := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_menu_closed; + format_label := {$IFDEF FPC}@{$ENDIF}cef_menu_model_delegate_format_label; end; end; @@ -177,32 +181,32 @@ procedure TCefMenuModelDelegateOwn.ExecuteCommand(const menuModel : ICefMenuMod commandId : Integer; eventFlags : TCefEventFlags); begin - + // end; procedure TCefMenuModelDelegateOwn.MouseOutsideMenu(const menuModel: ICefMenuModel; const screenPoint: PCefPoint); begin - + // end; procedure TCefMenuModelDelegateOwn.UnhandledOpenSubmenu(const menuModel: ICefMenuModel; isRTL: boolean); begin - + // end; procedure TCefMenuModelDelegateOwn.UnhandledCloseSubmenu(const menuModel: ICefMenuModel; isRTL: boolean); begin - + // end; procedure TCefMenuModelDelegateOwn.MenuWillShow(const menuModel: ICefMenuModel); begin - + // end; procedure TCefMenuModelDelegateOwn.MenuClosed(const menuModel: ICefMenuModel); begin - + // end; function TCefMenuModelDelegateOwn.FormatLabel(const menuModel: ICefMenuModel; const label_ : uString) : boolean; diff --git a/source/uCEFMiscFunctions.pas b/source/uCEFMiscFunctions.pas index 7c0a6feb..0197f7db 100644 --- a/source/uCEFMiscFunctions.pas +++ b/source/uCEFMiscFunctions.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFMiscFunctions; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -51,7 +55,7 @@ uses {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.ActiveX,{$ENDIF} System.Classes, System.SysUtils, System.UITypes, System.Math, {$ELSE} - Windows, Classes, SysUtils, Controls, ActiveX, Math, + Windows, Classes, SysUtils, Controls, Graphics, ActiveX, Math, {$ENDIF} uCEFTypes, uCEFInterfaces, uCEFLibFunctions, uCEFResourceHandler, uCEFRegisterCDMCallback; @@ -85,7 +89,6 @@ procedure CefStringFree(const str: PCefString); function CefStringFreeAndGet(const str: PCefStringUserFree): ustring; procedure CefStringSet(const str: PCefString; const value: ustring); -function CefExecuteProcess(var app : ICefApp; aWindowsSandboxInfo : Pointer = nil) : integer; function CefRegisterExtension(const name, code: ustring; const Handler: ICefv8Handler): Boolean; procedure CefPostTask(ThreadId: TCefThreadId; const task: ICefTask); procedure CefPostDelayedTask(ThreadId: TCefThreadId; const task: ICefTask; delayMs: Int64); @@ -100,9 +103,9 @@ function cef_string_utf8_copy(const src: PAnsiChar; src_len: NativeUInt; output: function cef_string_utf16_copy(const src: PChar16; src_len: NativeUInt; output: PCefStringUtf16): Integer; function cef_string_copy(const src: PCefChar; src_len: NativeUInt; output: PCefString): Integer; -procedure WindowInfoAsChild(var aWindowInfo : TCefWindowInfo; aParent : THandle; aRect : TRect; const aWindowName : string = ''); -procedure WindowInfoAsPopUp(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : string = ''); -procedure WindowInfoAsWindowless(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : string = ''); +procedure WindowInfoAsChild(var aWindowInfo : TCefWindowInfo; aParent : THandle; aRect : TRect; const aWindowName : ustring = ''); +procedure WindowInfoAsPopUp(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : ustring = ''); +procedure WindowInfoAsWindowless(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : ustring = ''); function TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation: PTimeZoneInformation; lpLocalTime, lpUniversalTime: PSystemTime): BOOL; stdcall; external Kernel32DLL; function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation: PTimeZoneInformation; lpUniversalTime, lpLocalTime: PSystemTime): BOOL; stdcall; external Kernel32DLL; @@ -111,11 +114,10 @@ function PathIsRelativeAnsi(pszPath: LPCSTR): BOOL; stdcall; external SHLWAPIDLL function PathIsRelativeUnicode(pszPath: LPCWSTR): BOOL; stdcall; external SHLWAPIDLL name 'PathIsRelativeW'; {$IFNDEF DELPHI12_UP} -function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; stdcall; {$IFDEF WIN64} -function SetWindowLongPtr; external user32 name 'SetWindowLongPtrW'; -{$ELSE} -function SetWindowLongPtr; external user32 name 'SetWindowLongW'; +function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: int64): int64; stdcall; external user32 name 'SetWindowLongPtrW'; +{$ELSE} +function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: LongInt): LongInt; stdcall; external user32 name 'SetWindowLongW'; {$ENDIF} {$ENDIF} @@ -274,7 +276,7 @@ end; function CefString(const str: PCefString): ustring; begin if (str <> nil) then - SetString(Result, str.str, str.length) + SetString(Result, str^.str, str^.length) else Result := ''; end; @@ -320,16 +322,11 @@ end; function CefUserFreeString(const str: ustring): PCefStringUserFree; begin - Result := cef_string_userfree_utf16_alloc; - Result.length := Length(str); - GetMem(Result.str, Result.length * SizeOf(TCefChar)); - Move(PCefChar(str)^, Result.str^, Result.length * SizeOf(TCefChar)); - Result.dtor := @_free_string; -end; - -function CefExecuteProcess(var app : ICefApp; aWindowsSandboxInfo : Pointer) : integer; -begin - Result := cef_execute_process(@HInstance, CefGetData(app), aWindowsSandboxInfo); + Result := cef_string_userfree_utf16_alloc(); + Result^.length := Length(str); + GetMem(Result^.str, Result^.length * SizeOf(TCefChar)); + Move(PCefChar(str)^, Result^.str^, Result^.length * SizeOf(TCefChar)); + Result^.dtor := @_free_string; end; function CefRegisterExtension(const name, code: ustring; const Handler: ICefv8Handler): Boolean; @@ -413,7 +410,7 @@ begin Result := cef_string_utf16_set(src, src_len, output, ord(True)); end; -procedure WindowInfoAsChild(var aWindowInfo : TCefWindowInfo; aParent : THandle; aRect : TRect; const aWindowName : string); +procedure WindowInfoAsChild(var aWindowInfo : TCefWindowInfo; aParent : THandle; aRect : TRect; const aWindowName : ustring); begin aWindowInfo.ex_style := 0; aWindowInfo.window_name := CefString(aWindowName); @@ -428,7 +425,7 @@ begin aWindowInfo.window := 0; end; -procedure WindowInfoAsPopUp(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : string); +procedure WindowInfoAsPopUp(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : ustring); begin aWindowInfo.ex_style := 0; aWindowInfo.window_name := CefString(aWindowName); @@ -443,7 +440,7 @@ begin aWindowInfo.window := 0; end; -procedure WindowInfoAsWindowless(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : string); +procedure WindowInfoAsWindowless(var aWindowInfo : TCefWindowInfo; aParent : THandle; const aWindowName : ustring); begin aWindowInfo.ex_style := 0; aWindowInfo.window_name := CefString(aWindowName); @@ -470,7 +467,7 @@ end; function CefCrashReportingEnabled : boolean; begin - Result := (cef_crash_reporting_enabled <> 0); + Result := (cef_crash_reporting_enabled() <> 0); end; procedure CefSetCrashKeyValue(const aKey, aValue : ustring); @@ -551,7 +548,7 @@ end; function CefClearSchemeHandlerFactories : boolean; begin - Result := cef_clear_scheme_handler_factories <> 0; + Result := cef_clear_scheme_handler_factories() <> 0; end; function CefAddCrossOriginWhitelistEntry(const SourceOrigin : ustring; @@ -588,7 +585,7 @@ end; function CefClearCrossOriginWhitelist: Boolean; begin - Result := cef_clear_cross_origin_whitelist <> 0; + Result := cef_clear_cross_origin_whitelist() <> 0; end; function SplitLongString(aSrcString : string) : string; @@ -857,9 +854,9 @@ begin if GetFileVersionInfo(PChar(aFileName), TempHandle, TempSize, TempBuffer) and VerQueryValue(TempBuffer, '\', Pointer(TempInfo), TempLen) then begin - Result := TempInfo.dwFileVersionMS; + Result := TempInfo^.dwFileVersionMS; Result := Result shl 32; - Result := Result or TempInfo.dwFileVersionLS; + Result := Result or TempInfo^.dwFileVersionLS; end; end; except @@ -912,8 +909,8 @@ begin while (i < j) do begin - TempArray[i].wLanguage := TempLang.wLanguage; - TempArray[i].wCodePage := TempLang.wCodePage; + TempArray[i].wLanguage := TempLang^.wLanguage; + TempArray[i].wCodePage := TempLang^.wCodePage; inc(TempLang); inc(i); end; diff --git a/source/uCEFNavigationEntry.pas b/source/uCEFNavigationEntry.pas index 08d6b184..1efe39ac 100644 --- a/source/uCEFNavigationEntry.pas +++ b/source/uCEFNavigationEntry.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFNavigationEntry; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -74,52 +78,52 @@ uses function TCefNavigationEntryRef.IsValid: Boolean; begin - Result := PCefNavigationEntry(FData).is_valid(FData) <> 0; + Result := PCefNavigationEntry(FData)^.is_valid(FData) <> 0; end; function TCefNavigationEntryRef.GetUrl: ustring; begin - Result := CefStringFreeAndGet(PCefNavigationEntry(FData).get_url(FData)); + Result := CefStringFreeAndGet(PCefNavigationEntry(FData)^.get_url(FData)); end; function TCefNavigationEntryRef.GetDisplayUrl: ustring; begin - Result := CefStringFreeAndGet(PCefNavigationEntry(FData).get_display_url(FData)); + Result := CefStringFreeAndGet(PCefNavigationEntry(FData)^.get_display_url(FData)); end; function TCefNavigationEntryRef.GetOriginalUrl: ustring; begin - Result := CefStringFreeAndGet(PCefNavigationEntry(FData).get_original_url(FData)); + Result := CefStringFreeAndGet(PCefNavigationEntry(FData)^.get_original_url(FData)); end; function TCefNavigationEntryRef.GetTitle: ustring; begin - Result := CefStringFreeAndGet(PCefNavigationEntry(FData).get_title(FData)); + Result := CefStringFreeAndGet(PCefNavigationEntry(FData)^.get_title(FData)); end; function TCefNavigationEntryRef.GetTransitionType: TCefTransitionType; begin - Result := PCefNavigationEntry(FData).get_transition_type(FData); + Result := PCefNavigationEntry(FData)^.get_transition_type(FData); end; function TCefNavigationEntryRef.HasPostData: Boolean; begin - Result := PCefNavigationEntry(FData).has_post_data(FData) <> 0; + Result := PCefNavigationEntry(FData)^.has_post_data(FData) <> 0; end; function TCefNavigationEntryRef.GetCompletionTime: TDateTime; begin - Result := CefTimeToDateTime(PCefNavigationEntry(FData).get_completion_time(FData)); + Result := CefTimeToDateTime(PCefNavigationEntry(FData)^.get_completion_time(FData)); end; function TCefNavigationEntryRef.GetHttpStatusCode: Integer; begin - Result := PCefNavigationEntry(FData).get_http_status_code(FData); + Result := PCefNavigationEntry(FData)^.get_http_status_code(FData); end; function TCefNavigationEntryRef.GetSSLStatus: ICefSSLStatus; begin - Result := TCefSSLStatusRef.UnWrap(PCefNavigationEntry(FData).get_sslstatus(FData)); + Result := TCefSSLStatusRef.UnWrap(PCefNavigationEntry(FData)^.get_sslstatus(FData)); end; class function TCefNavigationEntryRef.UnWrap(data: Pointer): ICefNavigationEntry; diff --git a/source/uCEFNavigationEntryVisitor.pas b/source/uCEFNavigationEntryVisitor.pas index c60e3c02..9317b459 100644 --- a/source/uCEFNavigationEntryVisitor.pas +++ b/source/uCEFNavigationEntryVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFNavigationEntryVisitor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -97,8 +101,7 @@ constructor TCefNavigationEntryVisitorOwn.Create; begin inherited CreateData(SizeOf(TCefNavigationEntryVisitor)); - with PCefNavigationEntryVisitor(FData)^ do - visit := cef_navigation_entry_visitor_visit; + PCefNavigationEntryVisitor(FData)^.visit := {$IFDEF FPC}@{$ENDIF}cef_navigation_entry_visitor_visit; end; function TCefNavigationEntryVisitorOwn.Visit(const entry : ICefNavigationEntry; diff --git a/source/uCEFPDFPrintCallback.pas b/source/uCEFPDFPrintCallback.pas index f1776975..f48a7842 100644 --- a/source/uCEFPDFPrintCallback.pas +++ b/source/uCEFPDFPrintCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFPDFPrintCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -107,7 +111,8 @@ constructor TCefPdfPrintCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefPdfPrintCallback)); - PCefPdfPrintCallback(FData).on_pdf_print_finished := cef_pdf_print_callback_on_pdf_print_finished; + with PCefPdfPrintCallback(FData)^ do + on_pdf_print_finished := {$IFDEF FPC}@{$ENDIF}cef_pdf_print_callback_on_pdf_print_finished; end; // TCefFastPdfPrintCallback diff --git a/source/uCEFPDFPrintOptions.pas b/source/uCEFPDFPrintOptions.pas index f822e5c5..3e2652e9 100644 --- a/source/uCEFPDFPrintOptions.pas +++ b/source/uCEFPDFPrintOptions.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFPDFPrintOptions; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFPostData.pas b/source/uCEFPostData.pas index 71634d7c..bdca8127 100644 --- a/source/uCEFPostData.pas +++ b/source/uCEFPostData.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFPostData; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -116,7 +120,7 @@ begin while (i < Count) do begin - Result.Add(TCefPostDataElementRef.UnWrap(items[i])); + Result.Add(TCefPostDataElementRef.UnWrap(items^[i])); inc(i); end; except @@ -130,11 +134,10 @@ end; class function TCefPostDataRef.New: ICefPostData; begin - Result := UnWrap(cef_post_data_create); + Result := UnWrap(cef_post_data_create()); end; -function TCefPostDataRef.RemoveElement( - const element: ICefPostDataElement): Integer; +function TCefPostDataRef.RemoveElement(const element: ICefPostDataElement): Integer; begin Result := PCefPostData(FData)^.remove_element(PCefPostData(FData), CefGetData(element)); end; @@ -146,8 +149,9 @@ end; class function TCefPostDataRef.UnWrap(data: Pointer): ICefPostData; begin - if data <> nil then - Result := Create(data) as ICefPostData else + if (data <> nil) then + Result := Create(data) as ICefPostData + else Result := nil; end; diff --git a/source/uCEFPostDataElement.pas b/source/uCEFPostDataElement.pas index 369b0203..c4bf18c7 100644 --- a/source/uCEFPostDataElement.pas +++ b/source/uCEFPostDataElement.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFPostDataElement; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -126,7 +130,7 @@ end; class function TCefPostDataElementRef.New: ICefPostDataElement; begin - Result := UnWrap(cef_post_data_element_create); + Result := UnWrap(cef_post_data_element_create()); end; procedure TCefPostDataElementRef.SetToBytes(size: NativeUInt; const bytes: Pointer); @@ -278,14 +282,14 @@ begin with PCefPostDataElement(FData)^ do begin - is_read_only := cef_post_data_element_is_read_only; - set_to_empty := cef_post_data_element_set_to_empty; - set_to_file := cef_post_data_element_set_to_file; - set_to_bytes := cef_post_data_element_set_to_bytes; - get_type := cef_post_data_element_get_type; - get_file := cef_post_data_element_get_file; - get_bytes_count := cef_post_data_element_get_bytes_count; - get_bytes := cef_post_data_element_get_bytes; + is_read_only := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_is_read_only; + set_to_empty := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_set_to_empty; + set_to_file := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_set_to_file; + set_to_bytes := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_set_to_bytes; + get_type := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_get_type; + get_file := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_get_file; + get_bytes_count := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_get_bytes_count; + get_bytes := {$IFDEF FPC}@{$ENDIF}cef_post_data_element_get_bytes; end; end; diff --git a/source/uCEFPrintSettings.pas b/source/uCEFPrintSettings.pas index 12cd116c..8df5de0c 100644 --- a/source/uCEFPrintSettings.pas +++ b/source/uCEFPrintSettings.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFPrintSettings; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -88,148 +92,150 @@ uses function TCefPrintSettingsRef.Copy: ICefPrintSettings; begin - Result := UnWrap(PCefPrintSettings(FData).copy(FData)) + Result := UnWrap(PCefPrintSettings(FData)^.copy(FData)) end; function TCefPrintSettingsRef.GetColorModel: TCefColorModel; begin - Result := PCefPrintSettings(FData).get_color_model(FData); + Result := PCefPrintSettings(FData)^.get_color_model(FData); end; function TCefPrintSettingsRef.GetCopies: Integer; begin - Result := PCefPrintSettings(FData).get_copies(FData); + Result := PCefPrintSettings(FData)^.get_copies(FData); end; function TCefPrintSettingsRef.GetDeviceName: ustring; begin - Result := CefStringFreeAndGet(PCefPrintSettings(FData).get_device_name(FData)); + Result := CefStringFreeAndGet(PCefPrintSettings(FData)^.get_device_name(FData)); end; function TCefPrintSettingsRef.GetDpi: Integer; begin - Result := PCefPrintSettings(FData).get_dpi(FData); + Result := PCefPrintSettings(FData)^.get_dpi(FData); end; function TCefPrintSettingsRef.GetDuplexMode: TCefDuplexMode; begin - Result := PCefPrintSettings(FData).get_duplex_mode(FData); + Result := PCefPrintSettings(FData)^.get_duplex_mode(FData); end; -procedure TCefPrintSettingsRef.GetPageRanges( - out ranges: TCefRangeArray); +procedure TCefPrintSettingsRef.GetPageRanges(out ranges: TCefRangeArray); var - len: NativeUInt; + TempLen : NativeUInt; begin - len := GetPageRangesCount; - SetLength(ranges, len); - if len > 0 then - PCefPrintSettings(FData).get_page_ranges(FData, @len, @ranges[0]); + TempLen := GetPageRangesCount; + SetLength(ranges, TempLen); + + if (TempLen > 0) then PCefPrintSettings(FData)^.get_page_ranges(FData, @TempLen, @ranges[0]); end; function TCefPrintSettingsRef.GetPageRangesCount: NativeUInt; begin - Result := PCefPrintSettings(FData).get_page_ranges_count(FData); + Result := PCefPrintSettings(FData)^.get_page_ranges_count(FData); end; function TCefPrintSettingsRef.IsLandscape: Boolean; begin - Result := PCefPrintSettings(FData).is_landscape(FData) <> 0; + Result := PCefPrintSettings(FData)^.is_landscape(FData) <> 0; end; function TCefPrintSettingsRef.IsReadOnly: Boolean; begin - Result := PCefPrintSettings(FData).is_read_only(FData) <> 0; + Result := PCefPrintSettings(FData)^.is_read_only(FData) <> 0; end; function TCefPrintSettingsRef.IsSelectionOnly: Boolean; begin - Result := PCefPrintSettings(FData).is_selection_only(FData) <> 0; + Result := PCefPrintSettings(FData)^.is_selection_only(FData) <> 0; end; function TCefPrintSettingsRef.IsValid: Boolean; begin - Result := PCefPrintSettings(FData).is_valid(FData) <> 0; + Result := PCefPrintSettings(FData)^.is_valid(FData) <> 0; end; class function TCefPrintSettingsRef.New: ICefPrintSettings; begin - Result := UnWrap(cef_print_settings_create); + Result := UnWrap(cef_print_settings_create()); end; procedure TCefPrintSettingsRef.SetCollate(collate: Boolean); begin - PCefPrintSettings(FData).set_collate(FData, Ord(collate)); + PCefPrintSettings(FData)^.set_collate(FData, Ord(collate)); end; procedure TCefPrintSettingsRef.SetColorModel(model: TCefColorModel); begin - PCefPrintSettings(FData).set_color_model(FData, model); + PCefPrintSettings(FData)^.set_color_model(FData, model); end; procedure TCefPrintSettingsRef.SetCopies(copies: Integer); begin - PCefPrintSettings(FData).set_copies(FData, copies); + PCefPrintSettings(FData)^.set_copies(FData, copies); end; procedure TCefPrintSettingsRef.SetDeviceName(const name: ustring); var - s: TCefString; + TempName : TCefString; begin - s := CefString(name); - PCefPrintSettings(FData).set_device_name(FData, @s); + TempName := CefString(name); + PCefPrintSettings(FData)^.set_device_name(FData, @TempName); end; procedure TCefPrintSettingsRef.SetDpi(dpi: Integer); begin - PCefPrintSettings(FData).set_dpi(FData, dpi); + PCefPrintSettings(FData)^.set_dpi(FData, dpi); end; procedure TCefPrintSettingsRef.SetDuplexMode(mode: TCefDuplexMode); begin - PCefPrintSettings(FData).set_duplex_mode(FData, mode); + PCefPrintSettings(FData)^.set_duplex_mode(FData, mode); end; procedure TCefPrintSettingsRef.SetOrientation(landscape: Boolean); begin - PCefPrintSettings(FData).set_orientation(FData, Ord(landscape)); + PCefPrintSettings(FData)^.set_orientation(FData, Ord(landscape)); end; -procedure TCefPrintSettingsRef.SetPageRanges( - const ranges: TCefRangeArray); +procedure TCefPrintSettingsRef.SetPageRanges(const ranges: TCefRangeArray); var - len: NativeUInt; + TempLen : NativeUInt; begin - len := Length(ranges); - if len > 0 then - PCefPrintSettings(FData).set_page_ranges(FData, len, @ranges[0]) else - PCefPrintSettings(FData).set_page_ranges(FData, 0, nil); + TempLen := Length(ranges); + + if (TempLen > 0) then + PCefPrintSettings(FData)^.set_page_ranges(FData, TempLen, @ranges[0]) + else + PCefPrintSettings(FData)^.set_page_ranges(FData, 0, nil); end; -procedure TCefPrintSettingsRef.SetPrinterPrintableArea( - const physicalSizeDeviceUnits: PCefSize; - const printableAreaDeviceUnits: PCefRect; landscapeNeedsFlip: Boolean); +procedure TCefPrintSettingsRef.SetPrinterPrintableArea(const physicalSizeDeviceUnits : PCefSize; + const printableAreaDeviceUnits : PCefRect; + landscapeNeedsFlip : Boolean); begin - PCefPrintSettings(FData).set_printer_printable_area(FData, physicalSizeDeviceUnits, - printableAreaDeviceUnits, Ord(landscapeNeedsFlip)); + PCefPrintSettings(FData)^.set_printer_printable_area(FData, + physicalSizeDeviceUnits, + printableAreaDeviceUnits, + Ord(landscapeNeedsFlip)); end; procedure TCefPrintSettingsRef.SetSelectionOnly(selectionOnly: Boolean); begin - PCefPrintSettings(FData).set_selection_only(FData, Ord(selectionOnly)); + PCefPrintSettings(FData)^.set_selection_only(FData, Ord(selectionOnly)); end; -class function TCefPrintSettingsRef.UnWrap( - data: Pointer): ICefPrintSettings; +class function TCefPrintSettingsRef.UnWrap(data: Pointer): ICefPrintSettings; begin - if data <> nil then - Result := Create(data) as ICefPrintSettings else + if (data <> nil) then + Result := Create(data) as ICefPrintSettings + else Result := nil; end; function TCefPrintSettingsRef.WillCollate: Boolean; begin - Result := PCefPrintSettings(FData).will_collate(FData) <> 0; + Result := PCefPrintSettings(FData)^.will_collate(FData) <> 0; end; end. diff --git a/source/uCEFProcessMessage.pas b/source/uCEFProcessMessage.pas index 5f8b76f4..5b6bb0d2 100644 --- a/source/uCEFProcessMessage.pas +++ b/source/uCEFProcessMessage.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFProcessMessage; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFRegisterCDMCallback.pas b/source/uCEFRegisterCDMCallback.pas index a30adb25..0f1011d1 100644 --- a/source/uCEFRegisterCDMCallback.pas +++ b/source/uCEFRegisterCDMCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRegisterCDMCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,8 +54,6 @@ uses uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFApplication; type - TCefRegisterCDMProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(result: TCefCDMRegistrationError; const error_message: ustring); - TCefRegisterCDMCallbackOwn = class(TCefBaseRefCountedOwn, ICefRegisterCDMCallback) protected procedure OnCDMRegistrationComplete(result: TCefCDMRegistrationError; const error_message: ustring); virtual; @@ -114,7 +116,8 @@ constructor TCefRegisterCDMCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefRegisterCDMCallback)); - PCefRegisterCDMCallback(FData).on_cdm_registration_complete := cef_register_cdm_callback_on_cdm_registration_complete; + with PCefRegisterCDMCallback(FData)^ do + on_cdm_registration_complete := {$IFDEF FPC}@{$ENDIF}cef_register_cdm_callback_on_cdm_registration_complete; end; procedure TCefRegisterCDMCallbackOwn.OnCDMRegistrationComplete(result: TCefCDMRegistrationError; diff --git a/source/uCEFRenderHandler.pas b/source/uCEFRenderHandler.pas index c85f3f39..46e40521 100644 --- a/source/uCEFRenderHandler.pas +++ b/source/uCEFRenderHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRenderHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -338,20 +342,20 @@ begin with PCefRenderHandler(FData)^ do begin - get_accessibility_handler := cef_render_handler_get_accessibility_handler; - get_root_screen_rect := cef_render_handler_get_root_screen_rect; - get_view_rect := cef_render_handler_get_view_rect; - get_screen_point := cef_render_handler_get_screen_point; - get_screen_info := cef_render_handler_get_screen_info; - on_popup_show := cef_render_handler_on_popup_show; - on_popup_size := cef_render_handler_on_popup_size; - on_paint := cef_render_handler_on_paint; - on_cursor_change := cef_render_handler_on_cursor_change; - start_dragging := cef_render_handler_start_dragging; - update_drag_cursor := cef_render_handler_update_drag_cursor; - on_scroll_offset_changed := cef_render_handler_on_scroll_offset_changed; - on_ime_composition_range_changed := cef_render_handler_on_ime_composition_range_changed; - on_text_selection_changed := cef_render_handler_on_text_selection_changed; + get_accessibility_handler := {$IFDEF FPC}@{$ENDIF}cef_render_handler_get_accessibility_handler; + get_root_screen_rect := {$IFDEF FPC}@{$ENDIF}cef_render_handler_get_root_screen_rect; + get_view_rect := {$IFDEF FPC}@{$ENDIF}cef_render_handler_get_view_rect; + get_screen_point := {$IFDEF FPC}@{$ENDIF}cef_render_handler_get_screen_point; + get_screen_info := {$IFDEF FPC}@{$ENDIF}cef_render_handler_get_screen_info; + on_popup_show := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_popup_show; + on_popup_size := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_popup_size; + on_paint := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_paint; + on_cursor_change := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_cursor_change; + start_dragging := {$IFDEF FPC}@{$ENDIF}cef_render_handler_start_dragging; + update_drag_cursor := {$IFDEF FPC}@{$ENDIF}cef_render_handler_update_drag_cursor; + on_scroll_offset_changed := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_scroll_offset_changed; + on_ime_composition_range_changed := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_ime_composition_range_changed; + on_text_selection_changed := {$IFDEF FPC}@{$ENDIF}cef_render_handler_on_text_selection_changed; end; end; diff --git a/source/uCEFRenderProcessHandler.pas b/source/uCEFRenderProcessHandler.pas index 5e902681..b7a57325 100644 --- a/source/uCEFRenderProcessHandler.pas +++ b/source/uCEFRenderProcessHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRenderProcessHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -246,16 +250,16 @@ begin with PCefRenderProcessHandler(FData)^ do begin - on_render_thread_created := cef_render_process_handler_on_render_thread_created; - on_web_kit_initialized := cef_render_process_handler_on_web_kit_initialized; - on_browser_created := cef_render_process_handler_on_browser_created; - on_browser_destroyed := cef_render_process_handler_on_browser_destroyed; - get_load_handler := cef_render_process_handler_get_load_handler; - on_context_created := cef_render_process_handler_on_context_created; - on_context_released := cef_render_process_handler_on_context_released; - on_uncaught_exception := cef_render_process_handler_on_uncaught_exception; - on_focused_node_changed := cef_render_process_handler_on_focused_node_changed; - on_process_message_received := cef_render_process_handler_on_process_message_received; + on_render_thread_created := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_render_thread_created; + on_web_kit_initialized := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_web_kit_initialized; + on_browser_created := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_browser_created; + on_browser_destroyed := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_browser_destroyed; + get_load_handler := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_get_load_handler; + on_context_created := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_context_created; + on_context_released := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_context_released; + on_uncaught_exception := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_uncaught_exception; + on_focused_node_changed := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_focused_node_changed; + on_process_message_received := {$IFDEF FPC}@{$ENDIF}cef_render_process_handler_on_process_message_received; end; end; diff --git a/source/uCEFRequest.pas b/source/uCEFRequest.pas index 2fe443da..ae05318a 100644 --- a/source/uCEFRequest.pas +++ b/source/uCEFRequest.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRequest; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -52,26 +56,26 @@ uses type TCefRequestRef = class(TCefBaseRefCountedRef, ICefRequest) protected - function IsReadOnly: Boolean; - function GetUrl: ustring; - function GetMethod: ustring; - function GetPostData: ICefPostData; + function IsReadOnly: Boolean; + function GetUrl: ustring; + function GetMethod: ustring; + function GetPostData: ICefPostData; procedure GetHeaderMap(const HeaderMap: ICefStringMultimap); procedure SetUrl(const value: ustring); procedure SetMethod(const value: ustring); procedure SetReferrer(const referrerUrl: ustring; policy: TCefReferrerPolicy); - function GetReferrerUrl: ustring; - function GetReferrerPolicy: TCefReferrerPolicy; + function GetReferrerUrl: ustring; + function GetReferrerPolicy: TCefReferrerPolicy; procedure SetPostData(const value: ICefPostData); procedure SetHeaderMap(const HeaderMap: ICefStringMultimap); - function GetFlags: TCefUrlRequestFlags; + function GetFlags: TCefUrlRequestFlags; procedure SetFlags(flags: TCefUrlRequestFlags); - function GetFirstPartyForCookies: ustring; + function GetFirstPartyForCookies: ustring; procedure SetFirstPartyForCookies(const url: ustring); procedure Assign(const url, method: ustring; const postData: ICefPostData; const headerMap: ICefStringMultimap); - function GetResourceType: TCefResourceType; - function GetTransitionType: TCefTransitionType; - function GetIdentifier: UInt64; + function GetResourceType: TCefResourceType; + function GetTransitionType: TCefTransitionType; + function GetIdentifier: UInt64; public class function UnWrap(data: Pointer): ICefRequest; class function New: ICefRequest; @@ -84,21 +88,21 @@ uses function TCefRequestRef.IsReadOnly: Boolean; begin - Result := PCefRequest(FData).is_read_only(PCefRequest(FData)) <> 0; + Result := PCefRequest(FData)^.is_read_only(PCefRequest(FData)) <> 0; end; procedure TCefRequestRef.Assign(const url, method: ustring; const postData: ICefPostData; const headerMap: ICefStringMultimap); var - u, m: TCefString; + TempURL, TempMethod : TCefString; begin - u := cefstring(url); - m := cefstring(method); - PCefRequest(FData).set_(PCefRequest(FData), @u, @m, CefGetData(postData), headerMap.Handle); + TempURL := cefstring(url); + TempMethod := cefstring(method); + PCefRequest(FData)^.set_(PCefRequest(FData), @TempURL, @TempMethod, CefGetData(postData), headerMap.Handle); end; function TCefRequestRef.GetFirstPartyForCookies: ustring; begin - Result := CefStringFreeAndGet(PCefRequest(FData).get_first_party_for_cookies(PCefRequest(FData))); + Result := CefStringFreeAndGet(PCefRequest(FData)^.get_first_party_for_cookies(PCefRequest(FData))); end; function TCefRequestRef.GetFlags: TCefUrlRequestFlags; @@ -128,12 +132,12 @@ end; function TCefRequestRef.GetResourceType: TCefResourceType; begin - Result := PCefRequest(FData).get_resource_type(FData); + Result := PCefRequest(FData)^.get_resource_type(FData); end; function TCefRequestRef.GetTransitionType: TCefTransitionType; begin - Result := PCefRequest(FData).get_transition_type(FData); + Result := PCefRequest(FData)^.get_transition_type(FData); end; function TCefRequestRef.GetUrl: ustring; @@ -143,15 +147,15 @@ end; class function TCefRequestRef.New: ICefRequest; begin - Result := UnWrap(cef_request_create); + Result := UnWrap(cef_request_create()); end; procedure TCefRequestRef.SetFirstPartyForCookies(const url: ustring); var - str: TCefString; + TempURL : TCefString; begin - str := CefString(url); - PCefRequest(FData).set_first_party_for_cookies(PCefRequest(FData), @str); + TempURL := CefString(url); + PCefRequest(FData)^.set_first_party_for_cookies(PCefRequest(FData), @TempURL); end; procedure TCefRequestRef.SetFlags(flags: TCefUrlRequestFlags); @@ -166,18 +170,18 @@ end; procedure TCefRequestRef.SetMethod(const value: ustring); var - v: TCefString; + TempValue : TCefString; begin - v := CefString(value); - PCefRequest(FData)^.set_method(PCefRequest(FData), @v); + TempValue := CefString(value); + PCefRequest(FData)^.set_method(PCefRequest(FData), @TempValue); end; procedure TCefRequestRef.SetReferrer(const referrerUrl: ustring; policy: TCefReferrerPolicy); var - u: TCefString; + TempURL : TCefString; begin - u := CefString(referrerUrl); - PCefRequest(FData)^.set_referrer(PCefRequest(FData), @u, policy); + TempURL := CefString(referrerUrl); + PCefRequest(FData)^.set_referrer(PCefRequest(FData), @TempURL, policy); end; function TCefRequestRef.GetReferrerUrl: ustring; @@ -192,22 +196,23 @@ end; procedure TCefRequestRef.SetPostData(const value: ICefPostData); begin - if value <> nil then + if (value <> nil) then PCefRequest(FData)^.set_post_data(PCefRequest(FData), CefGetData(value)); end; procedure TCefRequestRef.SetUrl(const value: ustring); var - v: TCefString; + TempURL : TCefString; begin - v := CefString(value); - PCefRequest(FData)^.set_url(PCefRequest(FData), @v); + TempURL := CefString(value); + PCefRequest(FData)^.set_url(PCefRequest(FData), @TempURL); end; class function TCefRequestRef.UnWrap(data: Pointer): ICefRequest; begin - if data <> nil then - Result := Create(data) as ICefRequest else + if (data <> nil) then + Result := Create(data) as ICefRequest + else Result := nil; end; diff --git a/source/uCEFRequestCallback.pas b/source/uCEFRequestCallback.pas index 1bbcd225..e9c843a3 100644 --- a/source/uCEFRequestCallback.pas +++ b/source/uCEFRequestCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRequestCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -66,12 +70,12 @@ uses procedure TCefRequestCallbackRef.Cont(allow: Boolean); begin - PCefRequestCallback(FData).cont(FData, Ord(allow)); + PCefRequestCallback(FData)^.cont(PCefRequestCallback(FData), Ord(allow)); end; procedure TCefRequestCallbackRef.Cancel; begin - PCefRequestCallback(FData).cancel(FData); + PCefRequestCallback(FData)^.cancel(PCefRequestCallback(FData)); end; class function TCefRequestCallbackRef.UnWrap(data: Pointer): ICefRequestCallback; diff --git a/source/uCEFRequestContext.pas b/source/uCEFRequestContext.pas index 943ae7c5..f3e21fdf 100644 --- a/source/uCEFRequestContext.pas +++ b/source/uCEFRequestContext.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRequestContext; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -98,17 +102,17 @@ uses function TCefRequestContextRef.ClearSchemeHandlerFactories: Boolean; begin - Result := PCefRequestContext(FData).clear_scheme_handler_factories(FData) <> 0; + Result := PCefRequestContext(FData)^.clear_scheme_handler_factories(PCefRequestContext(FData)) <> 0; end; function TCefRequestContextRef.GetCachePath: ustring; begin - Result := CefStringFreeAndGet(PCefRequestContext(FData).get_cache_path(FData)); + Result := CefStringFreeAndGet(PCefRequestContext(FData)^.get_cache_path(PCefRequestContext(FData))); end; function TCefRequestContextRef.GetDefaultCookieManager(const callback: ICefCompletionCallback): ICefCookieManager; begin - Result := TCefCookieManagerRef.UnWrap(PCefRequestContext(FData).get_default_cookie_manager(FData, CefGetData(callback))); + Result := TCefCookieManagerRef.UnWrap(PCefRequestContext(FData)^.get_default_cookie_manager(PCefRequestContext(FData), CefGetData(callback))); end; function TCefRequestContextRef.GetDefaultCookieManagerProc(const callback: TCefCompletionCallbackProc): ICefCookieManager; @@ -118,7 +122,7 @@ end; function TCefRequestContextRef.GetHandler: ICefRequestContextHandler; begin - Result := TCefRequestContextHandlerRef.UnWrap(PCefRequestContext(FData).get_handler(FData)); + Result := TCefRequestContextHandlerRef.UnWrap(PCefRequestContext(FData)^.get_handler(PCefRequestContext(FData))); end; class function TCefRequestContextRef.Global: ICefRequestContext; @@ -128,17 +132,17 @@ end; function TCefRequestContextRef.IsGlobal: Boolean; begin - Result := PCefRequestContext(FData).is_global(FData) <> 0; + Result := PCefRequestContext(FData)^.is_global(PCefRequestContext(FData)) <> 0; end; function TCefRequestContextRef.IsSame(const other: ICefRequestContext): Boolean; begin - Result := PCefRequestContext(FData).is_same(FData, CefGetData(other)) <> 0; + Result := PCefRequestContext(FData)^.is_same(PCefRequestContext(FData), CefGetData(other)) <> 0; end; function TCefRequestContextRef.IsSharingWith(const other: ICefRequestContext): Boolean; begin - Result := PCefRequestContext(FData).is_sharing_with(FData, CefGetData(other)) <> 0; + Result := PCefRequestContext(FData)^.is_sharing_with(PCefRequestContext(FData), CefGetData(other)) <> 0; end; class function TCefRequestContextRef.New(const settings: PCefRequestContextSettings; @@ -170,67 +174,67 @@ end; procedure TCefRequestContextRef.PurgePluginListCache(reloadPages: Boolean); begin - PCefRequestContext(FData).purge_plugin_list_cache(FData, Ord(reloadPages)); + PCefRequestContext(FData)^.purge_plugin_list_cache(PCefRequestContext(FData), Ord(reloadPages)); end; function TCefRequestContextRef.HasPreference(const name: ustring): Boolean; var - n : TCefString; + TempName : TCefString; begin - n := CefString(name); - Result := PCefRequestContext(FData).has_preference(FData, @n) <> 0; + TempName := CefString(name); + Result := PCefRequestContext(FData)^.has_preference(PCefRequestContext(FData), @TempName) <> 0; end; function TCefRequestContextRef.GetPreference(const name: ustring): ICefValue; var - n : TCefString; + TempName : TCefString; begin - n := CefString(name); - Result := TCefValueRef.UnWrap(PCefRequestContext(FData).get_preference(FData, @n)); + TempName := CefString(name); + Result := TCefValueRef.UnWrap(PCefRequestContext(FData)^.get_preference(PCefRequestContext(FData), @TempName)); end; function TCefRequestContextRef.GetAllPreferences(includeDefaults: Boolean): ICefDictionaryValue; begin - Result := TCefDictionaryValueRef.UnWrap(PCefRequestContext(FData).get_all_preferences(FData, Ord(includeDefaults))); + Result := TCefDictionaryValueRef.UnWrap(PCefRequestContext(FData)^.get_all_preferences(PCefRequestContext(FData), Ord(includeDefaults))); end; function TCefRequestContextRef.CanSetPreference(const name: ustring): Boolean; var - n: TCefString; + TempName : TCefString; begin - n := CefString(name); - Result := PCefRequestContext(FData).can_set_preference(FData, @n) <> 0; + TempName := CefString(name); + Result := PCefRequestContext(FData)^.can_set_preference(PCefRequestContext(FData), @TempName) <> 0; end; function TCefRequestContextRef.SetPreference(const name : ustring; const value : ICefValue; out error : ustring): Boolean; var - n, e: TCefString; + TempName, TempError : TCefString; begin - n := CefString(name); - FillChar(e, SizeOf(e), 0); - Result := PCefRequestContext(FData).set_preference(FData, @n, CefGetData(value), @e) <> 0; - error := CefString(@e); + TempName := CefString(name); + FillChar(TempError, SizeOf(TempError), 0); + Result := PCefRequestContext(FData)^.set_preference(PCefRequestContext(FData), @TempName, CefGetData(value), @TempError) <> 0; + error := CefString(@TempError); end; procedure TCefRequestContextRef.ClearCertificateExceptions(const callback: ICefCompletionCallback); begin - PCefRequestContext(FData).clear_certificate_exceptions(FData, CefGetData(callback)); + PCefRequestContext(FData)^.clear_certificate_exceptions(PCefRequestContext(FData), CefGetData(callback)); end; procedure TCefRequestContextRef.CloseAllConnections(const callback: ICefCompletionCallback); begin - PCefRequestContext(FData).close_all_connections(FData, CefGetData(callback)); + PCefRequestContext(FData)^.close_all_connections(PCefRequestContext(FData), CefGetData(callback)); end; procedure TCefRequestContextRef.ResolveHost(const origin : ustring; const callback : ICefResolveCallback); var - o: TCefString; + TempOrigin : TCefString; begin - o := CefString(origin); - PCefRequestContext(FData).resolve_host(FData, @o, CefGetData(callback)); + TempOrigin := CefString(origin); + PCefRequestContext(FData)^.resolve_host(PCefRequestContext(FData), @TempOrigin, CefGetData(callback)); end; function TCefRequestContextRef.ResolveHostCached(const origin : ustring; @@ -241,7 +245,7 @@ var begin TempSL := TCefStringListOwn.Create; TempOrigin := CefString(origin); - Result := PCefRequestContext(FData).resolve_host_cached(FData, @TempOrigin, TempSL.Handle); + Result := PCefRequestContext(FData)^.resolve_host_cached(PCefRequestContext(FData), @TempOrigin, TempSL.Handle); TempSL.CopyToStrings(resolvedIps); end; @@ -250,7 +254,7 @@ var TempDir : TCefString; begin TempDir := CefString(root_directory); - PCefRequestContext(FData).load_extension(FData, @TempDir, CefGetData(manifest), CefGetData(handler)); + PCefRequestContext(FData)^.load_extension(PCefRequestContext(FData), @TempDir, CefGetData(manifest), CefGetData(handler)); end; function TCefRequestContextRef.DidLoadExtension(const extension_id: ustring): boolean; @@ -258,7 +262,7 @@ var TempID : TCefString; begin TempID := CefString(extension_id); - Result := PCefRequestContext(FData).did_load_extension(FData, @TempID) <> 0; + Result := PCefRequestContext(FData)^.did_load_extension(PCefRequestContext(FData), @TempID) <> 0; end; function TCefRequestContextRef.HasExtension(const extension_id: ustring): boolean; @@ -266,7 +270,7 @@ var TempID : TCefString; begin TempID := CefString(extension_id); - Result := PCefRequestContext(FData).has_extension(FData, @TempID) <> 0; + Result := PCefRequestContext(FData)^.has_extension(PCefRequestContext(FData), @TempID) <> 0; end; function TCefRequestContextRef.GetExtensions(const extension_ids: TStringList): boolean; @@ -276,7 +280,7 @@ begin Result := False; TempSL := TCefStringListOwn.Create; - if (PCefRequestContext(FData).get_extensions(PCefRequestContext(FData), TempSL.Handle) <> 0) then + if (PCefRequestContext(FData)^.get_extensions(PCefRequestContext(FData), TempSL.Handle) <> 0) then begin TempSL.CopyToStrings(extension_ids); Result := True; @@ -288,18 +292,21 @@ var TempID : TCefString; begin TempID := CefString(extension_id); - Result := TCefExtensionRef.UnWrap(PCefRequestContext(FData).get_extension(FData, @TempID)); + Result := TCefExtensionRef.UnWrap(PCefRequestContext(FData)^.get_extension(PCefRequestContext(FData), @TempID)); end; function TCefRequestContextRef.RegisterSchemeHandlerFactory(const schemeName : ustring; const domainName : ustring; const factory : ICefSchemeHandlerFactory): Boolean; var - s, d: TCefString; + TempScheme, TempDomain : TCefString; begin - s := CefString(schemeName); - d := CefString(domainName); - Result := PCefRequestContext(FData).register_scheme_handler_factory(FData, @s, @d, CefGetData(factory)) <> 0; + TempScheme := CefString(schemeName); + TempDomain := CefString(domainName); + Result := PCefRequestContext(FData)^.register_scheme_handler_factory(PCefRequestContext(FData), + @TempScheme, + @TempDomain, + CefGetData(factory)) <> 0; end; class function TCefRequestContextRef.Shared(const other : ICefRequestContext; diff --git a/source/uCEFRequestContextHandler.pas b/source/uCEFRequestContextHandler.pas index 86e7cb76..49c596ff 100644 --- a/source/uCEFRequestContextHandler.pas +++ b/source/uCEFRequestContextHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -36,6 +36,10 @@ *) unit uCEFRequestContextHandler; + +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} {$IFNDEF CPUX64} {$ALIGN ON} @@ -50,8 +54,6 @@ uses uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type - TCefRequestContextHandlerProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function: ICefCookieManager; - TCefRequestContextHandlerRef = class(TCefBaseRefCountedRef, ICefRequestContextHandler) protected procedure OnRequestContextInitialized(const request_context: ICefRequestContext); @@ -139,15 +141,15 @@ begin with PCefRequestContextHandler(FData)^ do begin - on_request_context_initialized := cef_request_context_handler_on_request_context_initialized; - get_cookie_manager := cef_request_context_handler_get_cookie_manager; - on_before_plugin_load := cef_request_context_handler_on_before_plugin_load; + on_request_context_initialized := {$IFDEF FPC}@{$ENDIF}cef_request_context_handler_on_request_context_initialized; + get_cookie_manager := {$IFDEF FPC}@{$ENDIF}cef_request_context_handler_get_cookie_manager; + on_before_plugin_load := {$IFDEF FPC}@{$ENDIF}cef_request_context_handler_on_before_plugin_load; end; end; procedure TCefRequestContextHandlerOwn.OnRequestContextInitialized(const request_context: ICefRequestContext); begin - + // end; function TCefRequestContextHandlerOwn.GetCookieManager: ICefCookieManager; @@ -155,11 +157,12 @@ begin Result:= nil; end; -function TCefRequestContextHandlerOwn.OnBeforePluginLoad(const mimeType, pluginUrl : ustring; - isMainFrame : boolean; - const topOriginUrl: ustring; - const pluginInfo: ICefWebPluginInfo; - pluginPolicy: PCefPluginPolicy): Boolean; +function TCefRequestContextHandlerOwn.OnBeforePluginLoad(const mimeType : ustring; + const pluginUrl : ustring; + isMainFrame : boolean; + const topOriginUrl : ustring; + const pluginInfo : ICefWebPluginInfo; + pluginPolicy : PCefPluginPolicy): Boolean; begin Result := False; end; @@ -168,27 +171,34 @@ end; procedure TCefRequestContextHandlerRef.OnRequestContextInitialized(const request_context: ICefRequestContext); begin - PCefRequestContextHandler(FData).on_request_context_initialized(FData, CefGetData(request_context)); + PCefRequestContextHandler(FData)^.on_request_context_initialized(PCefRequestContextHandler(FData), CefGetData(request_context)); end; function TCefRequestContextHandlerRef.GetCookieManager: ICefCookieManager; begin - Result := TCefCookieManagerRef.UnWrap(PCefRequestContextHandler(FData).get_cookie_manager(FData)); + Result := TCefCookieManagerRef.UnWrap(PCefRequestContextHandler(FData)^.get_cookie_manager(PCefRequestContextHandler(FData))); end; -function TCefRequestContextHandlerRef.OnBeforePluginLoad(const mimeType, pluginUrl : ustring; - isMainFrame : boolean; - const topOriginUrl: ustring; - const pluginInfo: ICefWebPluginInfo; - pluginPolicy: PCefPluginPolicy): Boolean; +function TCefRequestContextHandlerRef.OnBeforePluginLoad(const mimeType : ustring; + const pluginUrl : ustring; + isMainFrame : boolean; + const topOriginUrl : ustring; + const pluginInfo : ICefWebPluginInfo; + pluginPolicy : PCefPluginPolicy): Boolean; var - mt, pu, ou: TCefString; + TempType, TempPluginURL, TempOriginURL : TCefString; begin - mt := CefString(mimeType); - pu := CefString(pluginUrl); - ou := CefString(topOriginUrl); + TempType := CefString(mimeType); + TempPluginURL := CefString(pluginUrl); + TempOriginURL := CefString(topOriginUrl); - Result := PCefRequestContextHandler(FData).on_before_plugin_load(FData, @mt, @pu, ord(isMainFrame), @ou, CefGetData(pluginInfo), pluginPolicy) <> 0; + Result := PCefRequestContextHandler(FData)^.on_before_plugin_load(PCefRequestContextHandler(FData), + @TempType, + @TempPluginURL, + ord(isMainFrame), + @TempOriginURL, + CefGetData(pluginInfo), + pluginPolicy) <> 0; end; class function TCefRequestContextHandlerRef.UnWrap(data: Pointer): ICefRequestContextHandler; diff --git a/source/uCEFRequestHandler.pas b/source/uCEFRequestHandler.pas index 1e9bf6b3..69cfd1fd 100644 --- a/source/uCEFRequestHandler.pas +++ b/source/uCEFRequestHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRequestHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -453,7 +457,7 @@ begin i := 0; while (i < certificatesCount) do begin - TempCertArray[i] := TCEFX509CertificateRef.UnWrap(PPointerArray(certificates)[i]); + TempCertArray[i] := TCEFX509CertificateRef.UnWrap(PPointerArray(certificates)^[i]); inc(i); end; @@ -494,24 +498,24 @@ begin with PCefRequestHandler(FData)^ do begin - on_before_browse := cef_request_handler_on_before_browse; - on_open_urlfrom_tab := cef_request_handler_on_open_urlfrom_tab; - on_before_resource_load := cef_request_handler_on_before_resource_load; - get_resource_handler := cef_request_handler_get_resource_handler; - on_resource_redirect := cef_request_handler_on_resource_redirect; - on_resource_response := cef_request_handler_on_resource_response; - get_resource_response_filter := cef_request_handler_get_resource_response_filter; - on_resource_load_complete := cef_request_handler_on_resource_load_complete; - get_auth_credentials := cef_request_handler_get_auth_credentials; - can_get_cookies := cef_request_handler_can_get_cookies; - can_set_cookie := cef_request_handler_can_set_cookie; - on_quota_request := cef_request_handler_on_quota_request; - on_protocol_execution := cef_request_handler_on_protocol_execution; - on_certificate_error := cef_request_handler_on_certificate_error; - on_select_client_certificate := cef_request_handler_on_select_client_certificate; - on_plugin_crashed := cef_request_handler_on_plugin_crashed; - on_render_view_ready := cef_request_handler_on_render_view_ready; - on_render_process_terminated := cef_request_handler_on_render_process_terminated; + on_before_browse := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_before_browse; + on_open_urlfrom_tab := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_open_urlfrom_tab; + on_before_resource_load := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_before_resource_load; + get_resource_handler := {$IFDEF FPC}@{$ENDIF}cef_request_handler_get_resource_handler; + on_resource_redirect := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_resource_redirect; + on_resource_response := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_resource_response; + get_resource_response_filter := {$IFDEF FPC}@{$ENDIF}cef_request_handler_get_resource_response_filter; + on_resource_load_complete := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_resource_load_complete; + get_auth_credentials := {$IFDEF FPC}@{$ENDIF}cef_request_handler_get_auth_credentials; + can_get_cookies := {$IFDEF FPC}@{$ENDIF}cef_request_handler_can_get_cookies; + can_set_cookie := {$IFDEF FPC}@{$ENDIF}cef_request_handler_can_set_cookie; + on_quota_request := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_quota_request; + on_protocol_execution := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_protocol_execution; + on_certificate_error := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_certificate_error; + on_select_client_certificate := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_select_client_certificate; + on_plugin_crashed := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_plugin_crashed; + on_render_view_ready := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_render_view_ready; + on_render_process_terminated := {$IFDEF FPC}@{$ENDIF}cef_request_handler_on_render_process_terminated; end; end; diff --git a/source/uCEFResolveCallback.pas b/source/uCEFResolveCallback.pas index 668cd5e2..d0c76e57 100644 --- a/source/uCEFResolveCallback.pas +++ b/source/uCEFResolveCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFResolveCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -116,7 +120,8 @@ constructor TCefResolveCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefResolveCallback)); - PCefResolveCallback(FData).on_resolve_completed := cef_resolve_callback_on_resolve_completed; + with PCefResolveCallback(FData)^ do + on_resolve_completed := {$IFDEF FPC}@{$ENDIF}cef_resolve_callback_on_resolve_completed; end; // TCefCustomResolveCallback diff --git a/source/uCEFResourceBundle.pas b/source/uCEFResourceBundle.pas index ee270ff3..d9662223 100644 --- a/source/uCEFResourceBundle.pas +++ b/source/uCEFResourceBundle.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFResourceBundle; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -66,24 +70,31 @@ uses uCEFMiscFunctions, uCEFLibFunctions; -function TCefResourceBundleRef.GetDataResource(resourceId : Integer; - var data : Pointer; - var dataSize : NativeUInt): Boolean; +function TCefResourceBundleRef.GetDataResource( resourceId : Integer; + var data : Pointer; + var dataSize : NativeUInt): Boolean; begin - Result := PCefResourceBundle(FData).get_data_resource(FData, resourceId, data, dataSize) <> 0; + Result := PCefResourceBundle(FData)^.get_data_resource(PCefResourceBundle(FData), + resourceId, + data, + dataSize) <> 0; end; -function TCefResourceBundleRef.GetDataResourceForScale(resourceId : Integer; +function TCefResourceBundleRef.GetDataResourceForScale( resourceId : Integer; scaleFactor : TCefScaleFactor; var data : Pointer; var dataSize : NativeUInt): Boolean; begin - Result := PCefResourceBundle(FData).get_data_resource_for_scale(FData, resourceId, scaleFactor, data, dataSize) <> 0; + Result := PCefResourceBundle(FData)^.get_data_resource_for_scale(PCefResourceBundle(FData), + resourceId, + scaleFactor, + data, + dataSize) <> 0; end; function TCefResourceBundleRef.GetLocalizedString(stringId: Integer): ustring; begin - Result := CefStringFreeAndGet(PCefResourceBundle(FData).get_localized_string(FData, stringId)); + Result := CefStringFreeAndGet(PCefResourceBundle(FData)^.get_localized_string(PCefResourceBundle(FData), stringId)); end; class function TCefResourceBundleRef.Global: ICefResourceBundle; diff --git a/source/uCEFResourceBundleHandler.pas b/source/uCEFResourceBundleHandler.pas index 8031b8be..c1a5401b 100644 --- a/source/uCEFResourceBundleHandler.pas +++ b/source/uCEFResourceBundleHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFResourceBundleHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -137,9 +141,9 @@ begin with PCefResourceBundleHandler(FData)^ do begin - get_localized_string := cef_resource_bundle_handler_get_localized_string; - get_data_resource := cef_resource_bundle_handler_get_data_resource; - get_data_resource_for_scale := cef_resource_bundle_handler_get_data_resource_for_scale; + get_localized_string := {$IFDEF FPC}@{$ENDIF}cef_resource_bundle_handler_get_localized_string; + get_data_resource := {$IFDEF FPC}@{$ENDIF}cef_resource_bundle_handler_get_data_resource; + get_data_resource_for_scale := {$IFDEF FPC}@{$ENDIF}cef_resource_bundle_handler_get_data_resource_for_scale; end; end; diff --git a/source/uCEFResourceHandler.pas b/source/uCEFResourceHandler.pas index 3d5263f6..8a36ade9 100644 --- a/source/uCEFResourceHandler.pas +++ b/source/uCEFResourceHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFResourceHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -157,7 +161,7 @@ end; procedure TCefResourceHandlerOwn.Cancel; begin - + // end; function TCefResourceHandlerOwn.CanGetCookie(const cookie: PCefCookie): Boolean; @@ -179,12 +183,12 @@ begin with PCefResourceHandler(FData)^ do begin - process_request := cef_resource_handler_process_request; - get_response_headers := cef_resource_handler_get_response_headers; - read_response := cef_resource_handler_read_response; - can_get_cookie := cef_resource_handler_can_get_cookie; - can_set_cookie := cef_resource_handler_can_set_cookie; - cancel := cef_resource_handler_cancel; + process_request := {$IFDEF FPC}@{$ENDIF}cef_resource_handler_process_request; + get_response_headers := {$IFDEF FPC}@{$ENDIF}cef_resource_handler_get_response_headers; + read_response := {$IFDEF FPC}@{$ENDIF}cef_resource_handler_read_response; + can_get_cookie := {$IFDEF FPC}@{$ENDIF}cef_resource_handler_can_get_cookie; + can_set_cookie := {$IFDEF FPC}@{$ENDIF}cef_resource_handler_can_set_cookie; + cancel := {$IFDEF FPC}@{$ENDIF}cef_resource_handler_cancel; end; end; @@ -192,7 +196,7 @@ procedure TCefResourceHandlerOwn.GetResponseHeaders(const response : ICefR out responseLength : Int64; out redirectUrl : ustring); begin - + // end; function TCefResourceHandlerOwn.ProcessRequest(const request : ICefRequest; diff --git a/source/uCEFResponse.pas b/source/uCEFResponse.pas index 36cb44ec..64764268 100644 --- a/source/uCEFResponse.pas +++ b/source/uCEFResponse.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFResponse; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -80,7 +84,7 @@ uses class function TCefResponseRef.New: ICefResponse; begin - Result := UnWrap(cef_response_create); + Result := UnWrap(cef_response_create()); end; function TCefResponseRef.GetError: TCefErrorCode; diff --git a/source/uCEFResponseFilter.pas b/source/uCEFResponseFilter.pas index b2133a65..acff1217 100644 --- a/source/uCEFResponseFilter.pas +++ b/source/uCEFResponseFilter.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFResponseFilter; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -120,8 +124,8 @@ begin with PCefResponseFilter(FData)^ do begin - init_filter := cef_response_filter_init_filter; - filter := cef_response_filter_filter; + init_filter := {$IFDEF FPC}@{$ENDIF}cef_response_filter_init_filter; + filter := {$IFDEF FPC}@{$ENDIF}cef_response_filter_filter; end; end; diff --git a/source/uCEFRunContextMenuCallback.pas b/source/uCEFRunContextMenuCallback.pas index e58cc85b..c20341dc 100644 --- a/source/uCEFRunContextMenuCallback.pas +++ b/source/uCEFRunContextMenuCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRunContextMenuCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -65,20 +69,19 @@ uses procedure TCefRunContextMenuCallbackRef.Cancel; begin - PCefRunContextMenuCallback(FData).cancel(FData); + PCefRunContextMenuCallback(FData)^.cancel(PCefRunContextMenuCallback(FData)); end; -procedure TCefRunContextMenuCallbackRef.Cont(commandId: Integer; - eventFlags: TCefEventFlags); +procedure TCefRunContextMenuCallbackRef.Cont(commandId: Integer; eventFlags: TCefEventFlags); begin - PCefRunContextMenuCallback(FData).cont(FData, commandId, eventFlags); + PCefRunContextMenuCallback(FData)^.cont(PCefRunContextMenuCallback(FData), commandId, eventFlags); end; -class function TCefRunContextMenuCallbackRef.UnWrap( - data: Pointer): ICefRunContextMenuCallback; +class function TCefRunContextMenuCallbackRef.UnWrap(data: Pointer): ICefRunContextMenuCallback; begin - if data <> nil then - Result := Create(data) as ICefRunContextMenuCallback else + if (data <> nil) then + Result := Create(data) as ICefRunContextMenuCallback + else Result := nil; end; diff --git a/source/uCEFRunFileDialogCallback.pas b/source/uCEFRunFileDialogCallback.pas index 0af064ce..241553c6 100644 --- a/source/uCEFRunFileDialogCallback.pas +++ b/source/uCEFRunFileDialogCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFRunFileDialogCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -114,7 +118,8 @@ constructor TCefRunFileDialogCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefRunFileDialogCallback)); - PCefRunFileDialogCallback(FData).on_file_dialog_dismissed := cef_run_file_dialog_callback_on_file_dialog_dismissed; + with PCefRunFileDialogCallback(FData)^ do + on_file_dialog_dismissed := {$IFDEF FPC}@{$ENDIF}cef_run_file_dialog_callback_on_file_dialog_dismissed; end; procedure TCefRunFileDialogCallbackOwn.OnFileDialogDismissed(selectedAcceptFilter: Integer; const filePaths: TStrings); diff --git a/source/uCEFSSLStatus.pas b/source/uCEFSSLStatus.pas index 7f11eec1..74f5a551 100644 --- a/source/uCEFSSLStatus.pas +++ b/source/uCEFSSLStatus.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFSSLStatus; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -74,27 +78,27 @@ uses function TCefSSLStatusRef.IsSecureConnection: boolean; begin - Result := (PCefSSLStatus(FData).is_secure_connection(FData) <> 0); + Result := (PCefSSLStatus(FData)^.is_secure_connection(PCefSSLStatus(FData)) <> 0); end; function TCefSSLStatusRef.GetCertStatus: TCefCertStatus; begin - Result := PCefSSLStatus(FData).get_cert_status(FData); + Result := PCefSSLStatus(FData)^.get_cert_status(PCefSSLStatus(FData)); end; function TCefSSLStatusRef.GetSSLVersion: TCefSSLVersion; begin - Result := PCefSSLStatus(FData).get_sslversion(FData); + Result := PCefSSLStatus(FData)^.get_sslversion(PCefSSLStatus(FData)); end; function TCefSSLStatusRef.GetContentStatus: TCefSSLContentStatus; begin - Result := PCefSSLStatus(FData).get_content_status(FData); + Result := PCefSSLStatus(FData)^.get_content_status(PCefSSLStatus(FData)); end; function TCefSSLStatusRef.GetX509Certificate: ICefX509Certificate; begin - Result := TCEFX509CertificateRef.UnWrap(PCefSSLStatus(FData).get_x509certificate(FData)); + Result := TCEFX509CertificateRef.UnWrap(PCefSSLStatus(FData)^.get_x509certificate(PCefSSLStatus(FData))); end; class function TCefSSLStatusRef.UnWrap(data: Pointer): ICefSSLStatus; diff --git a/source/uCEFSchemeHandlerFactory.pas b/source/uCEFSchemeHandlerFactory.pas index 61c42cfc..141f0435 100644 --- a/source/uCEFSchemeHandlerFactory.pas +++ b/source/uCEFSchemeHandlerFactory.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFSchemeHandlerFactory; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -89,7 +93,7 @@ begin FClass := AClass; - PCefSchemeHandlerFactory(FData).create := cef_scheme_handler_factory_create; + PCefSchemeHandlerFactory(FData)^.create := {$IFDEF FPC}@{$ENDIF}cef_scheme_handler_factory_create; end; function TCefSchemeHandlerFactoryOwn.New(const browser : ICefBrowser; diff --git a/source/uCEFSchemeRegistrar.pas b/source/uCEFSchemeRegistrar.pas index dea51258..185c5771 100644 --- a/source/uCEFSchemeRegistrar.pas +++ b/source/uCEFSchemeRegistrar.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFSchemeRegistrar; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -52,7 +56,7 @@ uses type TCefSchemeRegistrarRef = class(TCEFBaseScopedWrapperRef) public - function AddCustomScheme(const schemeName: ustring; IsStandard, IsLocal, IsDisplayIsolated, IsSecure, IsCorsEnabled, IsCSPBypassing: Boolean): Boolean; stdcall; + function AddCustomScheme(const schemeName: ustring; IsStandard, IsLocal, IsDisplayIsolated, IsSecure, IsCorsEnabled, IsCSPBypassing: Boolean): Boolean; end; implementation @@ -60,19 +64,25 @@ implementation uses uCEFMiscFunctions; -function TCefSchemeRegistrarRef.AddCustomScheme(const schemeName: ustring; IsStandard, IsLocal, IsDisplayIsolated, IsSecure, IsCorsEnabled, IsCSPBypassing: Boolean): Boolean; +function TCefSchemeRegistrarRef.AddCustomScheme(const schemeName : ustring; + IsStandard : Boolean; + IsLocal : Boolean; + IsDisplayIsolated : Boolean; + IsSecure : Boolean; + IsCorsEnabled : Boolean; + IsCSPBypassing : Boolean): Boolean; var - sn: TCefString; + TempName : TCefString; begin - sn := CefString(schemeName); - Result := PCefSchemeRegistrar(FData).add_custom_scheme(PCefSchemeRegistrar(FData), - @sn, - Ord(IsStandard), - Ord(IsLocal), - Ord(IsDisplayIsolated), - Ord(isSecure), - Ord(IsCorsEnabled), - Ord(IsCSPBypassing)) <> 0; + TempName := CefString(schemeName); + Result := PCefSchemeRegistrar(FData)^.add_custom_scheme(PCefSchemeRegistrar(FData), + @TempName, + Ord(IsStandard), + Ord(IsLocal), + Ord(IsDisplayIsolated), + Ord(isSecure), + Ord(IsCorsEnabled), + Ord(IsCSPBypassing)) <> 0; end; end. diff --git a/source/uCEFSelectClientCertificateCallback.pas b/source/uCEFSelectClientCertificateCallback.pas index 52adea2f..965f1bad 100644 --- a/source/uCEFSelectClientCertificateCallback.pas +++ b/source/uCEFSelectClientCertificateCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFSelectClientCertificateCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -67,7 +71,7 @@ uses procedure TCefSelectClientCertificateCallbackRef.Select(const cert: ICefX509Certificate); begin - PCefSelectClientCertificateCallback(FData).select(PCefSelectClientCertificateCallback(FData), CefGetData(cert)); + PCefSelectClientCertificateCallback(FData)^.select(PCefSelectClientCertificateCallback(FData), CefGetData(cert)); end; class function TCefSelectClientCertificateCallbackRef.UnWrap(data: Pointer): ICefSelectClientCertificateCallback; diff --git a/source/uCEFServer.pas b/source/uCEFServer.pas index a5a4d4fc..8e244630 100644 --- a/source/uCEFServer.pas +++ b/source/uCEFServer.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFServer; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -89,32 +93,32 @@ end; function TCEFServerRef.GetTaskRunner : ICefTaskRunner; begin - Result := TCefTaskRunnerRef.UnWrap(PCefServer(FData).get_task_runner(PCefServer(FData))); + Result := TCefTaskRunnerRef.UnWrap(PCefServer(FData)^.get_task_runner(PCefServer(FData))); end; procedure TCEFServerRef.Shutdown; begin - PCefServer(FData).shutdown(PCefServer(FData)); + PCefServer(FData)^.shutdown(PCefServer(FData)); end; function TCEFServerRef.IsRunning : boolean; begin - Result := PCefServer(FData).is_running(PCefServer(FData)) <> 0; + Result := PCefServer(FData)^.is_running(PCefServer(FData)) <> 0; end; function TCEFServerRef.GetAddress : ustring; begin - Result := CefStringFreeAndGet(PCefServer(FData).get_address(PCefServer(FData))); + Result := CefStringFreeAndGet(PCefServer(FData)^.get_address(PCefServer(FData))); end; function TCEFServerRef.HasConnection : boolean; begin - Result := PCefServer(FData).has_connection(PCefServer(FData)) <> 0; + Result := PCefServer(FData)^.has_connection(PCefServer(FData)) <> 0; end; function TCEFServerRef.IsValidConnection(connection_id: Integer) : boolean; begin - Result := PCefServer(FData).is_valid_connection(PCefServer(FData), connection_id) <> 0; + Result := PCefServer(FData)^.is_valid_connection(PCefServer(FData), connection_id) <> 0; end; procedure TCEFServerRef.SendHttp200response(connection_id: Integer; const content_type: ustring; const data: Pointer; data_size: NativeUInt); @@ -122,12 +126,12 @@ var TempContentType : TCefString; begin TempContentType := CefString(content_type); - PCefServer(FData).send_http200response(PCefServer(FData), connection_id, @TempContentType, data, data_size); + PCefServer(FData)^.send_http200response(PCefServer(FData), connection_id, @TempContentType, data, data_size); end; procedure TCEFServerRef.SendHttp404response(connection_id: Integer); begin - PCefServer(FData).send_http404response(PCefServer(FData), connection_id); + PCefServer(FData)^.send_http404response(PCefServer(FData), connection_id); end; procedure TCEFServerRef.SendHttp500response(connection_id: Integer; const error_message: ustring); @@ -135,7 +139,7 @@ var TempError : TCefString; begin TempError := CefString(error_message); - PCefServer(FData).send_http500response(PCefServer(FData), connection_id, @TempError); + PCefServer(FData)^.send_http500response(PCefServer(FData), connection_id, @TempError); end; procedure TCEFServerRef.SendHttpResponse(connection_id, response_code: Integer; const content_type: ustring; content_length: int64; const extra_headers: ICefStringMultimap); @@ -143,22 +147,22 @@ var TempContentType : TCefString; begin TempContentType := CefString(content_type); - PCefServer(FData).send_http_response(PCefServer(FData), connection_id, response_code, @TempContentType, content_length, extra_headers.Handle); + PCefServer(FData)^.send_http_response(PCefServer(FData), connection_id, response_code, @TempContentType, content_length, extra_headers.Handle); end; procedure TCEFServerRef.SendRawData(connection_id: Integer; const data: Pointer; data_size: NativeUInt); begin - PCefServer(FData).send_raw_data(PCefServer(FData), connection_id, data, data_size); + PCefServer(FData)^.send_raw_data(PCefServer(FData), connection_id, data, data_size); end; procedure TCEFServerRef.CloseConnection(connection_id: Integer); begin - PCefServer(FData).close_connection(PCefServer(FData), connection_id); + PCefServer(FData)^.close_connection(PCefServer(FData), connection_id); end; procedure TCEFServerRef.SendWebSocketMessage(connection_id: Integer; const data: Pointer; data_size: NativeUInt); begin - PCefServer(FData).send_web_socket_message(PCefServer(FData), connection_id, data, data_size); + PCefServer(FData)^.send_web_socket_message(PCefServer(FData), connection_id, data, data_size); end; end. diff --git a/source/uCEFServerComponent.pas b/source/uCEFServerComponent.pas index 99c342f8..9ec43e42 100644 --- a/source/uCEFServerComponent.pas +++ b/source/uCEFServerComponent.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFServerComponent; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -51,7 +55,12 @@ uses {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, Vcl.Controls, Vcl.Graphics, Vcl.Forms, WinApi.ActiveX,{$ENDIF} System.Classes, System.Math, {$ELSE} - Windows, Messages, Classes, Controls, Graphics, Forms, ActiveX, Math, + Windows, Classes, Forms, Controls, Graphics, ActiveX, Math, + {$IFDEF FPC} + LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase, + {$ELSE} + Messages, + {$ENDIF} {$ENDIF} uCEFTypes, uCEFInterfaces, uCEFServer, uCEFServerEvents, uCEFServerHandler; @@ -125,6 +134,10 @@ type property OnWebSocketMessage : TOnWebSocketMessage read FOnWebSocketMessage write FOnWebSocketMessage; end; +{$IFDEF FPC} +procedure Register; +{$ENDIF} + implementation uses @@ -323,4 +336,12 @@ begin if Initialized then FServer.SendWebSocketMessage(connection_id, data, data_size); end; +{$IFDEF FPC} +procedure Register; +begin + {$I tcefservercomponent.lrs} + RegisterComponents('Chromium', [TCEFServerComponent]); +end; +{$ENDIF} + end. diff --git a/source/uCEFServerEvents.pas b/source/uCEFServerEvents.pas index 6370eb24..8af17726 100644 --- a/source/uCEFServerEvents.pas +++ b/source/uCEFServerEvents.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFServerEvents; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} diff --git a/source/uCEFServerHandler.pas b/source/uCEFServerHandler.pas index 8c171a3d..e4528664 100644 --- a/source/uCEFServerHandler.pas +++ b/source/uCEFServerHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFServerHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -217,14 +221,14 @@ begin with PCEFServerHandler(FData)^ do begin - on_server_created := cef_server_handler_on_server_created; - on_server_destroyed := cef_server_handler_on_server_destroyed; - on_client_connected := cef_server_handler_on_client_connected; - on_client_disconnected := cef_server_handler_on_client_disconnected; - on_http_request := cef_server_handler_on_http_request; - on_web_socket_request := cef_server_handler_on_web_socket_request; - on_web_socket_connected := cef_server_handler_on_web_socket_connected; - on_web_socket_message := cef_server_handler_on_web_socket_message; + on_server_created := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_server_created; + on_server_destroyed := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_server_destroyed; + on_client_connected := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_client_connected; + on_client_disconnected := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_client_disconnected; + on_http_request := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_http_request; + on_web_socket_request := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_web_socket_request; + on_web_socket_connected := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_web_socket_connected; + on_web_socket_message := {$IFDEF FPC}@{$ENDIF}cef_server_handler_on_web_socket_message; end; end; diff --git a/source/uCEFSetCookieCallback.pas b/source/uCEFSetCookieCallback.pas index 38baa3c7..d3c8a4a9 100644 --- a/source/uCEFSetCookieCallback.pas +++ b/source/uCEFSetCookieCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFSetCookieCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -88,7 +92,8 @@ constructor TCefSetCookieCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefSetCookieCallback)); - PCefSetCookieCallback(FData).on_complete := cef_set_cookie_callback_on_complete; + with PCefSetCookieCallback(FData)^ do + on_complete := {$IFDEF FPC}@{$ENDIF}cef_set_cookie_callback_on_complete; end; // TCefFastSetCookieCallback diff --git a/source/uCEFSslInfo.pas b/source/uCEFSslInfo.pas index 951e39ca..b0cf0019 100644 --- a/source/uCEFSslInfo.pas +++ b/source/uCEFSslInfo.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFSslInfo; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -72,12 +76,12 @@ uses function TCefSslInfoRef.GetCertStatus: TCefCertStatus; begin - Result := PCefSslInfo(FData).get_cert_status(FData); + Result := PCefSslInfo(FData)^.get_cert_status(PCefSslInfo(FData)); end; function TCefSslInfoRef.GetX509Certificate: ICefX509Certificate; begin - Result := TCEFX509CertificateRef.UnWrap(PCefSslInfo(FData).get_x509certificate(FData)); + Result := TCEFX509CertificateRef.UnWrap(PCefSslInfo(FData)^.get_x509certificate(PCefSslInfo(FData))); end; class function TCefSslInfoRef.UnWrap(data: Pointer): ICefSslInfo; diff --git a/source/uCEFStreamReader.pas b/source/uCEFStreamReader.pas index 847489ff..52b887f1 100644 --- a/source/uCEFStreamReader.pas +++ b/source/uCEFStreamReader.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFStreamReader; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -75,8 +79,7 @@ implementation uses uCEFMiscFunctions, uCEFLibFunctions, uCEFCustomStreamReader; -class function TCefStreamReaderRef.CreateForCustomStream( - const stream: ICefCustomStreamReader): ICefStreamReader; +class function TCefStreamReaderRef.CreateForCustomStream(const stream: ICefCustomStreamReader): ICefStreamReader; begin Result := UnWrap(cef_stream_reader_create_for_handler(CefGetData(stream))) end; @@ -88,14 +91,13 @@ end; class function TCefStreamReaderRef.CreateForFile(const filename: ustring): ICefStreamReader; var - f: TCefString; + TempFileName : TCefString; begin - f := CefString(filename); - Result := UnWrap(cef_stream_reader_create_for_file(@f)) + TempFileName := CefString(filename); + Result := UnWrap(cef_stream_reader_create_for_file(@TempFileName)) end; -class function TCefStreamReaderRef.CreateForStream(const stream: TSTream; - owned: Boolean): ICefStreamReader; +class function TCefStreamReaderRef.CreateForStream(const stream: TSTream; owned: Boolean): ICefStreamReader; begin Result := CreateForCustomStream(TCefCustomStreamReader.Create(stream, owned) as ICefCustomStreamReader); end; @@ -107,7 +109,7 @@ end; function TCefStreamReaderRef.MayBlock: Boolean; begin - Result := PCefStreamReader(FData)^.may_block(FData) <> 0; + Result := PCefStreamReader(FData)^.may_block(PCefStreamReader(FData)) <> 0; end; function TCefStreamReaderRef.Read(ptr: Pointer; size, n: NativeUInt): NativeUInt; @@ -127,8 +129,9 @@ end; class function TCefStreamReaderRef.UnWrap(data: Pointer): ICefStreamReader; begin - if data <> nil then - Result := Create(data) as ICefStreamReader else + if (data <> nil) then + Result := Create(data) as ICefStreamReader + else Result := nil; end; diff --git a/source/uCEFStreamWriter.pas b/source/uCEFStreamWriter.pas index 50b7f8c1..54ca59b5 100644 --- a/source/uCEFStreamWriter.pas +++ b/source/uCEFStreamWriter.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFStreamWriter; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -71,10 +75,10 @@ uses class function TCefStreamWriterRef.CreateForFile(const fileName: ustring): ICefStreamWriter; var - s: TCefString; + TempFileName : TCefString; begin - s := CefString(fileName); - Result := UnWrap(cef_stream_writer_create_for_file(@s)); + TempFileName := CefString(fileName); + Result := UnWrap(cef_stream_writer_create_for_file(@TempFileName)); end; class function TCefStreamWriterRef.CreateForHandler(const handler: ICefWriteHandler): ICefStreamWriter; @@ -84,34 +88,35 @@ end; function TCefStreamWriterRef.Flush: Integer; begin - Result := PCefStreamWriter(FData).flush(FData); + Result := PCefStreamWriter(FData)^.flush(PCefStreamWriter(FData)); end; function TCefStreamWriterRef.MayBlock: Boolean; begin - Result := PCefStreamWriter(FData).may_block(FData) <> 0; + Result := PCefStreamWriter(FData)^.may_block(PCefStreamWriter(FData)) <> 0; end; function TCefStreamWriterRef.Seek(offset: Int64; whence: Integer): Integer; begin - Result := PCefStreamWriter(FData).seek(FData, offset, whence); + Result := PCefStreamWriter(FData)^.seek(PCefStreamWriter(FData), offset, whence); end; function TCefStreamWriterRef.Tell: Int64; begin - Result := PCefStreamWriter(FData).tell(FData); + Result := PCefStreamWriter(FData)^.tell(PCefStreamWriter(FData)); end; class function TCefStreamWriterRef.UnWrap(data: Pointer): ICefStreamWriter; begin if data <> nil then - Result := Create(data) as ICefStreamWriter else + Result := Create(data) as ICefStreamWriter + else Result := nil; end; function TCefStreamWriterRef.write(const ptr: Pointer; size, n: NativeUInt): NativeUInt; begin - Result := PCefStreamWriter(FData).write(FData, ptr, size, n); + Result := PCefStreamWriter(FData)^.write(PCefStreamWriter(FData), ptr, size, n); end; end. diff --git a/source/uCEFStringList.pas b/source/uCEFStringList.pas index 9192d0fa..80060003 100644 --- a/source/uCEFStringList.pas +++ b/source/uCEFStringList.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFStringList; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -194,7 +198,7 @@ constructor TCefStringListOwn.Create; begin inherited Create; - FHandle := cef_string_list_alloc; + FHandle := cef_string_list_alloc(); end; destructor TCefStringListOwn.Destroy; diff --git a/source/uCEFStringMap.pas b/source/uCEFStringMap.pas index 22aed3a4..0e2b01cd 100644 --- a/source/uCEFStringMap.pas +++ b/source/uCEFStringMap.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFStringMap; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -183,7 +187,7 @@ constructor TCefStringMapOwn.Create; begin inherited Create; - FHandle := cef_string_map_alloc; + FHandle := cef_string_map_alloc(); end; destructor TCefStringMapOwn.Destroy; diff --git a/source/uCEFStringMultimap.pas b/source/uCEFStringMultimap.pas index 0c210483..08f20711 100644 --- a/source/uCEFStringMultimap.pas +++ b/source/uCEFStringMultimap.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFStringMultimap; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -197,7 +201,7 @@ constructor TCefStringMultimapOwn.Create; begin inherited Create; - FHandle := cef_string_multimap_alloc; + FHandle := cef_string_multimap_alloc(); end; destructor TCefStringMultimapOwn.Destroy; diff --git a/source/uCEFStringVisitor.pas b/source/uCEFStringVisitor.pas index c31bf5ea..0d04c935 100644 --- a/source/uCEFStringVisitor.pas +++ b/source/uCEFStringVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFStringVisitor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -106,7 +110,7 @@ constructor TCefStringVisitorOwn.Create; begin inherited CreateData(SizeOf(TCefStringVisitor)); - with PCefStringVisitor(FData)^ do visit := cef_string_visitor_visit; + PCefStringVisitor(FData)^.visit := {$IFDEF FPC}@{$ENDIF}cef_string_visitor_visit; end; procedure TCefStringVisitorOwn.Visit(const str: ustring); diff --git a/source/uCEFTask.pas b/source/uCEFTask.pas index 87aac29f..9d36f9e4 100644 --- a/source/uCEFTask.pas +++ b/source/uCEFTask.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFTask; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -66,8 +70,6 @@ type class function UnWrap(data: Pointer): ICefTask; end; - TCefFastTaskProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure; - TCefFastTask = class(TCefTaskOwn) protected FMethod: TCefFastTaskProc; @@ -114,9 +116,9 @@ uses procedure cef_task_execute(self: PCefTask); stdcall; var - TempObject : TObject; + TempObject : TObject; begin - TempObject := CefGetObject(self); + TempObject := CefGetObject(self); if (TempObject <> nil) and (TempObject is TCefTaskOwn) then TCefTaskOwn(TempObject).Execute; @@ -126,7 +128,7 @@ constructor TCefTaskOwn.Create; begin inherited CreateData(SizeOf(TCefTask)); - PCefTask(FData).execute := cef_task_execute; + PCefTask(FData)^.execute := {$IFDEF FPC}@{$ENDIF}cef_task_execute; end; procedure TCefTaskOwn.Execute; @@ -140,7 +142,7 @@ end; procedure TCefTaskRef.Execute; begin - PCefTask(FData).execute(FData); + PCefTask(FData)^.execute(PCefTask(FData)); end; class function TCefTaskRef.UnWrap(data: Pointer): ICefTask; diff --git a/source/uCEFTaskRunner.pas b/source/uCEFTaskRunner.pas index 5c70fe6c..83aaecbb 100644 --- a/source/uCEFTaskRunner.pas +++ b/source/uCEFTaskRunner.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFTaskRunner; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -71,12 +75,12 @@ uses function TCefTaskRunnerRef.BelongsToCurrentThread: Boolean; begin - Result := PCefTaskRunner(FData).belongs_to_current_thread(FData) <> 0; + Result := PCefTaskRunner(FData)^.belongs_to_current_thread(PCefTaskRunner(FData)) <> 0; end; function TCefTaskRunnerRef.BelongsToThread(threadId: TCefThreadId): Boolean; begin - Result := PCefTaskRunner(FData).belongs_to_thread(FData, threadId) <> 0; + Result := PCefTaskRunner(FData)^.belongs_to_thread(PCefTaskRunner(FData), threadId) <> 0; end; class function TCefTaskRunnerRef.GetForCurrentThread: ICefTaskRunner; @@ -91,17 +95,17 @@ end; function TCefTaskRunnerRef.IsSame(const that: ICefTaskRunner): Boolean; begin - Result := PCefTaskRunner(FData).is_same(FData, CefGetData(that)) <> 0; + Result := PCefTaskRunner(FData)^.is_same(PCefTaskRunner(FData), CefGetData(that)) <> 0; end; function TCefTaskRunnerRef.PostDelayedTask(const task: ICefTask; delayMs: Int64): Boolean; begin - Result := PCefTaskRunner(FData).post_delayed_task(FData, CefGetData(task), delayMs) <> 0; + Result := PCefTaskRunner(FData)^.post_delayed_task(PCefTaskRunner(FData), CefGetData(task), delayMs) <> 0; end; function TCefTaskRunnerRef.PostTask(const task: ICefTask): Boolean; begin - Result := PCefTaskRunner(FData).post_task(FData, CefGetData(task)) <> 0; + Result := PCefTaskRunner(FData)^.post_task(PCefTaskRunner(FData), CefGetData(task)) <> 0; end; class function TCefTaskRunnerRef.UnWrap(data: Pointer): ICefTaskRunner; diff --git a/source/uCEFThread.pas b/source/uCEFThread.pas index cc14d22b..c8434f4d 100644 --- a/source/uCEFThread.pas +++ b/source/uCEFThread.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFThread; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -68,22 +72,22 @@ uses function TCefThreadRef.GetTaskRunner : ICefTaskRunner; begin - Result := TCefTaskRunnerRef.UnWrap(PCefThread(FData).get_task_runner(FData)); + Result := TCefTaskRunnerRef.UnWrap(PCefThread(FData)^.get_task_runner(PCefThread(FData))); end; function TCefThreadRef.GetPlatformThreadID : TCefPlatformThreadId; begin - Result := PCefThread(FData).get_platform_thread_id(FData); + Result := PCefThread(FData)^.get_platform_thread_id(PCefThread(FData)); end; procedure TCefThreadRef.Stop; begin - PCefThread(FData).stop(FData); + PCefThread(FData)^.stop(PCefThread(FData)); end; function TCefThreadRef.IsRunning: Boolean; begin - Result := (PCefThread(FData).is_running(FData) <> 0); + Result := (PCefThread(FData)^.is_running(PCefThread(FData)) <> 0); end; class function TCefThreadRef.UnWrap(data: Pointer): ICefThread; diff --git a/source/uCEFTypes.pas b/source/uCEFTypes.pas index 29043293..7fa35c6b 100644 --- a/source/uCEFTypes.pas +++ b/source/uCEFTypes.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFTypes; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -235,11 +239,15 @@ type PNativeUInt = ^NativeUInt; NativeInt = Integer; uint16 = Word; + {$IFDEF FPC} + ustring = type UnicodeString; + {$ELSE} ustring = type WideString; + {$ENDIF} rbstring = type AnsiString; {$ELSE} - ustring = type string; - rbstring = type RawByteString; + ustring = type string; + rbstring = type RawByteString; {$IFNDEF DELPHI15_UP} NativeUInt = Cardinal; PNativeUInt = ^NativeUInt; @@ -1289,7 +1297,6 @@ type // /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t) TCefExtensionHandler = record base : TCefBaseRefCounted; - on_extension_load_failed : procedure(self: PCefExtensionHandler; result: TCefErrorcode); stdcall; on_extension_loaded : procedure(self: PCefExtensionHandler; extension: PCefExtension); stdcall; on_extension_unloaded : procedure(self: PCefExtensionHandler; extension: PCefExtension); stdcall; diff --git a/source/uCEFUrlRequest.pas b/source/uCEFUrlRequest.pas index f4457e13..f0a35af8 100644 --- a/source/uCEFUrlRequest.pas +++ b/source/uCEFUrlRequest.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFUrlRequest; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -71,7 +75,7 @@ uses procedure TCefUrlRequestRef.Cancel; begin - PCefUrlRequest(FData).cancel(PCefUrlRequest(FData)); + PCefUrlRequest(FData)^.cancel(PCefUrlRequest(FData)); end; class function TCefUrlRequestRef.New(const request : ICefRequest; @@ -83,27 +87,27 @@ end; function TCefUrlRequestRef.GetRequest: ICefRequest; begin - Result := TCefRequestRef.UnWrap(PCefUrlRequest(FData).get_request(PCefUrlRequest(FData))); + Result := TCefRequestRef.UnWrap(PCefUrlRequest(FData)^.get_request(PCefUrlRequest(FData))); end; function TCefUrlRequestRef.GetRequestError: Integer; begin - Result := PCefUrlRequest(FData).get_request_error(PCefUrlRequest(FData)); + Result := PCefUrlRequest(FData)^.get_request_error(PCefUrlRequest(FData)); end; function TCefUrlRequestRef.GetRequestStatus: TCefUrlRequestStatus; begin - Result := PCefUrlRequest(FData).get_request_status(PCefUrlRequest(FData)); + Result := PCefUrlRequest(FData)^.get_request_status(PCefUrlRequest(FData)); end; function TCefUrlRequestRef.GetResponseWasCached: boolean; begin - Result := PCefUrlRequest(FData).response_was_cached(PCefUrlRequest(FData)) <> 0; + Result := PCefUrlRequest(FData)^.response_was_cached(PCefUrlRequest(FData)) <> 0; end; function TCefUrlRequestRef.GetResponse: ICefResponse; begin - Result := TCefResponseRef.UnWrap(PCefUrlRequest(FData).get_response(PCefUrlRequest(FData))); + Result := TCefResponseRef.UnWrap(PCefUrlRequest(FData)^.get_response(PCefUrlRequest(FData))); end; class function TCefUrlRequestRef.UnWrap(data: Pointer): ICefUrlRequest; diff --git a/source/uCEFUrlrequestClient.pas b/source/uCEFUrlrequestClient.pas index 37a36d58..217a72af 100644 --- a/source/uCEFUrlrequestClient.pas +++ b/source/uCEFUrlrequestClient.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFUrlrequestClient; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -152,11 +156,11 @@ begin with PCefUrlrequestClient(FData)^ do begin - on_request_complete := cef_url_request_client_on_request_complete; - on_upload_progress := cef_url_request_client_on_upload_progress; - on_download_progress := cef_url_request_client_on_download_progress; - on_download_data := cef_url_request_client_on_download_data; - get_auth_credentials := cef_url_request_client_get_auth_credentials; + on_request_complete := {$IFDEF FPC}@{$ENDIF}cef_url_request_client_on_request_complete; + on_upload_progress := {$IFDEF FPC}@{$ENDIF}cef_url_request_client_on_upload_progress; + on_download_progress := {$IFDEF FPC}@{$ENDIF}cef_url_request_client_on_download_progress; + on_download_data := {$IFDEF FPC}@{$ENDIF}cef_url_request_client_on_download_data; + get_auth_credentials := {$IFDEF FPC}@{$ENDIF}cef_url_request_client_get_auth_credentials; end; end; diff --git a/source/uCEFV8Exception.pas b/source/uCEFV8Exception.pas index a9539280..bbb374dc 100644 --- a/source/uCEFV8Exception.pas +++ b/source/uCEFV8Exception.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFV8Exception; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -73,42 +77,42 @@ uses function TCefV8ExceptionRef.GetEndColumn: Integer; begin - Result := PCefV8Exception(FData)^.get_end_column(FData); + Result := PCefV8Exception(FData)^.get_end_column(PCefV8Exception(FData)); end; function TCefV8ExceptionRef.GetEndPosition: Integer; begin - Result := PCefV8Exception(FData)^.get_end_position(FData); + Result := PCefV8Exception(FData)^.get_end_position(PCefV8Exception(FData)); end; function TCefV8ExceptionRef.GetLineNumber: Integer; begin - Result := PCefV8Exception(FData)^.get_line_number(FData); + Result := PCefV8Exception(FData)^.get_line_number(PCefV8Exception(FData)); end; function TCefV8ExceptionRef.GetMessage: ustring; begin - Result := CefStringFreeAndGet(PCefV8Exception(FData)^.get_message(FData)); + Result := CefStringFreeAndGet(PCefV8Exception(FData)^.get_message(PCefV8Exception(FData))); end; function TCefV8ExceptionRef.GetScriptResourceName: ustring; begin - Result := CefStringFreeAndGet(PCefV8Exception(FData)^.get_script_resource_name(FData)); + Result := CefStringFreeAndGet(PCefV8Exception(FData)^.get_script_resource_name(PCefV8Exception(FData))); end; function TCefV8ExceptionRef.GetSourceLine: ustring; begin - Result := CefStringFreeAndGet(PCefV8Exception(FData)^.get_source_line(FData)); + Result := CefStringFreeAndGet(PCefV8Exception(FData)^.get_source_line(PCefV8Exception(FData))); end; function TCefV8ExceptionRef.GetStartColumn: Integer; begin - Result := PCefV8Exception(FData)^.get_start_column(FData); + Result := PCefV8Exception(FData)^.get_start_column(PCefV8Exception(FData)); end; function TCefV8ExceptionRef.GetStartPosition: Integer; begin - Result := PCefV8Exception(FData)^.get_start_position(FData); + Result := PCefV8Exception(FData)^.get_start_position(PCefV8Exception(FData)); end; class function TCefV8ExceptionRef.UnWrap(data: Pointer): ICefV8Exception; diff --git a/source/uCEFValue.pas b/source/uCEFValue.pas index ee402bca..5856996e 100644 --- a/source/uCEFValue.pas +++ b/source/uCEFValue.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFValue; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -87,112 +91,112 @@ uses function TCefValueRef.Copy: ICefValue; begin - Result := UnWrap(PCefValue(FData).copy(PCefValue(FData))); + Result := UnWrap(PCefValue(FData)^.copy(PCefValue(FData))); end; function TCefValueRef.GetBinary: ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefValue(FData).get_binary(PCefValue(FData))); + Result := TCefBinaryValueRef.UnWrap(PCefValue(FData)^.get_binary(PCefValue(FData))); end; function TCefValueRef.GetBool: Boolean; begin - Result := PCefValue(FData).get_bool(PCefValue(FData)) <> 0; + Result := PCefValue(FData)^.get_bool(PCefValue(FData)) <> 0; end; function TCefValueRef.GetDictionary: ICefDictionaryValue; begin - Result := TCefDictionaryValueRef.UnWrap(PCefValue(FData).get_dictionary(PCefValue(FData))); + Result := TCefDictionaryValueRef.UnWrap(PCefValue(FData)^.get_dictionary(PCefValue(FData))); end; function TCefValueRef.GetDouble: Double; begin - Result := PCefValue(FData).get_double(PCefValue(FData)); + Result := PCefValue(FData)^.get_double(PCefValue(FData)); end; function TCefValueRef.GetInt: Integer; begin - Result := PCefValue(FData).get_int(PCefValue(FData)); + Result := PCefValue(FData)^.get_int(PCefValue(FData)); end; function TCefValueRef.GetList: ICefListValue; begin - Result := TCefListValueRef.UnWrap(PCefValue(FData).get_list(PCefValue(FData))); + Result := TCefListValueRef.UnWrap(PCefValue(FData)^.get_list(PCefValue(FData))); end; function TCefValueRef.GetString: ustring; begin - Result := CefStringFreeAndGet(PCefValue(FData).get_string(PCefValue(FData))); + Result := CefStringFreeAndGet(PCefValue(FData)^.get_string(PCefValue(FData))); end; function TCefValueRef.GetType: TCefValueType; begin - Result := PCefValue(FData).get_type(PCefValue(FData)); + Result := PCefValue(FData)^.get_type(PCefValue(FData)); end; function TCefValueRef.IsEqual(const that: ICefValue): Boolean; begin - Result := PCefValue(FData).is_equal(PCefValue(FData), CefGetData(that)) <> 0; + Result := PCefValue(FData)^.is_equal(PCefValue(FData), CefGetData(that)) <> 0; end; function TCefValueRef.IsOwned: Boolean; begin - Result := PCefValue(FData).is_owned(PCefValue(FData)) <> 0; + Result := PCefValue(FData)^.is_owned(PCefValue(FData)) <> 0; end; function TCefValueRef.IsReadOnly: Boolean; begin - Result := PCefValue(FData).is_read_only(PCefValue(FData)) <> 0; + Result := PCefValue(FData)^.is_read_only(PCefValue(FData)) <> 0; end; function TCefValueRef.IsSame(const that: ICefValue): Boolean; begin - Result := PCefValue(FData).is_same(PCefValue(FData), CefGetData(that)) <> 0; + Result := PCefValue(FData)^.is_same(PCefValue(FData), CefGetData(that)) <> 0; end; function TCefValueRef.IsValid: Boolean; begin - Result := PCefValue(FData).is_valid(PCefValue(FData)) <> 0; + Result := PCefValue(FData)^.is_valid(PCefValue(FData)) <> 0; end; class function TCefValueRef.New: ICefValue; begin - Result := UnWrap(cef_value_create); + Result := UnWrap(cef_value_create()); end; function TCefValueRef.SetBinary(const value: ICefBinaryValue): Boolean; begin - Result := PCefValue(FData).set_binary(PCefValue(FData), CefGetData(value)) <> 0; + Result := PCefValue(FData)^.set_binary(PCefValue(FData), CefGetData(value)) <> 0; end; function TCefValueRef.SetBool(value: Integer): Boolean; begin - Result := PCefValue(FData).set_bool(PCefValue(FData), value) <> 0; + Result := PCefValue(FData)^.set_bool(PCefValue(FData), value) <> 0; end; function TCefValueRef.SetDictionary(const value: ICefDictionaryValue): Boolean; begin - Result := PCefValue(FData).set_dictionary(PCefValue(FData), CefGetData(value)) <> 0; + Result := PCefValue(FData)^.set_dictionary(PCefValue(FData), CefGetData(value)) <> 0; end; function TCefValueRef.SetDouble(value: Double): Boolean; begin - Result := PCefValue(FData).set_double(PCefValue(FData), value) <> 0; + Result := PCefValue(FData)^.set_double(PCefValue(FData), value) <> 0; end; function TCefValueRef.SetInt(value: Integer): Boolean; begin - Result := PCefValue(FData).set_int(PCefValue(FData), value) <> 0; + Result := PCefValue(FData)^.set_int(PCefValue(FData), value) <> 0; end; function TCefValueRef.SetList(const value: ICefListValue): Boolean; begin - Result := PCefValue(FData).set_list(PCefValue(FData), CefGetData(value)) <> 0; + Result := PCefValue(FData)^.set_list(PCefValue(FData), CefGetData(value)) <> 0; end; function TCefValueRef.SetNull: Boolean; begin - Result := PCefValue(FData).set_null(PCefValue(FData)) <> 0; + Result := PCefValue(FData)^.set_null(PCefValue(FData)) <> 0; end; function TCefValueRef.SetString(const value: ustring): Boolean; @@ -200,7 +204,7 @@ var TempValue : TCefString; begin TempValue := CefString(value); - Result := PCefValue(FData).set_string(PCefValue(FData), @TempValue) <> 0; + Result := PCefValue(FData)^.set_string(PCefValue(FData), @TempValue) <> 0; end; class function TCefValueRef.UnWrap(data: Pointer): ICefValue; diff --git a/source/uCEFWaitableEvent.pas b/source/uCEFWaitableEvent.pas index 1680ac74..c5d5fa9f 100644 --- a/source/uCEFWaitableEvent.pas +++ b/source/uCEFWaitableEvent.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWaitableEvent; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -70,27 +74,27 @@ uses procedure TCefWaitableEventRef.Reset; begin - PCefWaitableEvent(FData).reset(FData); + PCefWaitableEvent(FData)^.reset(PCefWaitableEvent(FData)); end; procedure TCefWaitableEventRef.Signal; begin - PCefWaitableEvent(FData).signal(FData); + PCefWaitableEvent(FData)^.signal(PCefWaitableEvent(FData)); end; function TCefWaitableEventRef.IsSignaled : boolean; begin - Result := (PCefWaitableEvent(FData).is_signaled(FData) <> 0); + Result := (PCefWaitableEvent(FData)^.is_signaled(PCefWaitableEvent(FData)) <> 0); end; procedure TCefWaitableEventRef.Wait; begin - PCefWaitableEvent(FData).wait(FData); + PCefWaitableEvent(FData)^.wait(PCefWaitableEvent(FData)); end; function TCefWaitableEventRef.TimedWait(max_ms: int64): boolean; begin - Result := (PCefWaitableEvent(FData).timed_wait(FData, max_ms) <> 0); + Result := (PCefWaitableEvent(FData)^.timed_wait(PCefWaitableEvent(FData), max_ms) <> 0); end; class function TCefWaitableEventRef.UnWrap(data: Pointer): ICefWaitableEvent; diff --git a/source/uCEFWebPluginInfo.pas b/source/uCEFWebPluginInfo.pas index 28a1c2a8..709c1d64 100644 --- a/source/uCEFWebPluginInfo.pas +++ b/source/uCEFWebPluginInfo.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWebPluginInfo; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -88,8 +92,9 @@ end; class function TCefWebPluginInfoRef.UnWrap(data: Pointer): ICefWebPluginInfo; begin - if data <> nil then - Result := Create(data) as ICefWebPluginInfo else + if (data <> nil) then + Result := Create(data) as ICefWebPluginInfo + else Result := nil; end; diff --git a/source/uCEFWebPluginInfoVisitor.pas b/source/uCEFWebPluginInfoVisitor.pas index bd1faffd..65d9be73 100644 --- a/source/uCEFWebPluginInfoVisitor.pas +++ b/source/uCEFWebPluginInfoVisitor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWebPluginInfoVisitor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -58,8 +62,6 @@ type constructor Create; virtual; end; - TCefWebPluginInfoVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const info: ICefWebPluginInfo; count, total: Integer): Boolean; - TCefFastWebPluginInfoVisitor = class(TCefWebPluginInfoVisitorOwn) protected FProc: TCefWebPluginInfoVisitorProc; @@ -94,7 +96,7 @@ constructor TCefWebPluginInfoVisitorOwn.Create; begin inherited CreateData(SizeOf(TCefWebPluginInfoVisitor)); - PCefWebPluginInfoVisitor(FData).visit := cef_web_plugin_info_visitor_visit; + PCefWebPluginInfoVisitor(FData)^.visit := {$IFDEF FPC}@{$ENDIF}cef_web_plugin_info_visitor_visit; end; function TCefWebPluginInfoVisitorOwn.Visit(const info: ICefWebPluginInfo; count, total: Integer): Boolean; @@ -104,15 +106,14 @@ end; // TCefFastWebPluginInfoVisitor -constructor TCefFastWebPluginInfoVisitor.Create( - const proc: TCefWebPluginInfoVisitorProc); +constructor TCefFastWebPluginInfoVisitor.Create(const proc: TCefWebPluginInfoVisitorProc); begin inherited Create; + FProc := proc; end; -function TCefFastWebPluginInfoVisitor.Visit(const info: ICefWebPluginInfo; - count, total: Integer): Boolean; +function TCefFastWebPluginInfoVisitor.Visit(const info: ICefWebPluginInfo; count, total: Integer): Boolean; begin Result := FProc(info, count, total); end; diff --git a/source/uCEFWebPluginUnstableCallback.pas b/source/uCEFWebPluginUnstableCallback.pas index 9c6ce9bc..6eb99857 100644 --- a/source/uCEFWebPluginUnstableCallback.pas +++ b/source/uCEFWebPluginUnstableCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWebPluginUnstableCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,8 +54,6 @@ uses uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type - TCefWebPluginIsUnstableProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const path: ustring; unstable: Boolean); - TCefWebPluginUnstableCallbackOwn = class(TCefBaseRefCountedOwn, ICefWebPluginUnstableCallback) protected procedure IsUnstable(const path: ustring; unstable: Boolean); virtual; @@ -93,7 +95,7 @@ constructor TCefWebPluginUnstableCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefWebPluginUnstableCallback)); - PCefWebPluginUnstableCallback(FData).is_unstable := cef_web_plugin_unstable_callback_is_unstable; + PCefWebPluginUnstableCallback(FData)^.is_unstable := {$IFDEF FPC}@{$ENDIF}cef_web_plugin_unstable_callback_is_unstable; end; procedure TCefWebPluginUnstableCallbackOwn.IsUnstable(const path: ustring; unstable: Boolean); diff --git a/source/uCEFWindowParent.pas b/source/uCEFWindowParent.pas index a06f73f6..45f38fa8 100644 --- a/source/uCEFWindowParent.pas +++ b/source/uCEFWindowParent.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWindowParent; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,7 +54,12 @@ uses {$IFDEF DELPHI16_UP} {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, Vcl.Controls, Vcl.Graphics,{$ENDIF} System.Classes, {$ELSE} - Windows, Messages, Classes, Controls, Graphics, + Windows, Classes, Forms, Controls, Graphics, + {$IFDEF FPC} + LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase, + {$ELSE} + Messages, + {$ENDIF} {$ENDIF} uCEFTypes, uCEFInterfaces; @@ -82,6 +91,10 @@ type property Hint; end; +{$IFDEF FPC} +procedure Register; +{$ENDIF} + implementation uses @@ -89,7 +102,10 @@ uses function TCEFWindowParent.GetChildWindowHandle : THandle; begin - Result := GetWindow(Handle, GW_CHILD); + if not(csDesigning in ComponentState) and HandleAllocated then + Result := GetWindow(Handle, GW_CHILD) + else + Result := 0; end; procedure TCEFWindowParent.Resize; @@ -140,7 +156,7 @@ begin WM_ERASEBKGND: begin TempHandle := ChildWindowHandle; - if (csDesigning in ComponentState) or (TempHandle = 0) then inherited WndProc(aMessage); + if (TempHandle = 0) then inherited WndProc(aMessage); end; CM_WANTSPECIALKEY: @@ -192,4 +208,12 @@ begin Result := (TempHWND <> 0) and DestroyWindow(TempHWND); end; +{$IFDEF FPC} +procedure Register; +begin + {$I tcefwindowparent.lrs} + RegisterComponents('Chromium', [TCEFWindowParent]); +end; +{$ENDIF} + end. diff --git a/source/uCEFWorkScheduler.pas b/source/uCEFWorkScheduler.pas index 7abd9f7b..4ba6f509 100644 --- a/source/uCEFWorkScheduler.pas +++ b/source/uCEFWorkScheduler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWorkScheduler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,7 +54,12 @@ uses {$IFDEF DELPHI16_UP} {$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, Vcl.Controls, Vcl.Graphics, Vcl.Forms,{$ENDIF} System.Classes, {$ELSE} - Windows, Messages, Classes, Controls, Graphics, Forms, + Windows, Classes, Forms, Controls, Graphics, + {$IFDEF FPC} + LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase, + {$ELSE} + Messages, + {$ENDIF} {$ENDIF} uCEFConstants, uCEFWorkSchedulerThread; @@ -109,6 +118,10 @@ type var GlobalCEFWorkScheduler : TCEFWorkScheduler = nil; +{$IFDEF FPC} +procedure Register; +{$ENDIF} + implementation uses @@ -146,12 +159,22 @@ begin end; procedure TCEFWorkScheduler.AfterConstruction; +{$IFDEF FPC} +var + TempWndMethod : TWndMethod; +{$ENDIF} begin inherited AfterConstruction; if not(csDesigning in ComponentState) then begin - FCompHandle := AllocateHWnd(WndProc); + {$IFDEF FPC} + TempWndMethod := @WndProc; + FCompHandle := AllocateHWnd(TempWndMethod); + {$ELSE} + FCompHandle := AllocateHWnd(WndProc); + {$ENDIF} + CreateThread; end; end; @@ -163,7 +186,7 @@ begin FThread.Priority := FPriority; {$ENDIF} FThread.DefaultInterval := FDefaultInterval; - FThread.OnPulse := Thread_OnPulse; + FThread.OnPulse := {$IFDEF FPC}@{$ENDIF}Thread_OnPulse; {$IFDEF DELPHI14_UP} FThread.Start; {$ELSE} @@ -280,4 +303,12 @@ begin if (FThread <> nil) then FThread.NextPulse(aInterval); end; +{$IFDEF FPC} +procedure Register; +begin + {$I tcefworkscheduler.lrs} + RegisterComponents('Chromium', [TCEFWorkScheduler]); +end; +{$ENDIF} + end. diff --git a/source/uCEFWorkSchedulerThread.pas b/source/uCEFWorkSchedulerThread.pas index 819270bd..e9c24cd6 100644 --- a/source/uCEFWorkSchedulerThread.pas +++ b/source/uCEFWorkSchedulerThread.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWorkSchedulerThread; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -175,7 +179,7 @@ begin FPulsing := False; finally Unlock; - if not(Terminated) then Synchronize(DoOnPulseEvent); + if not(Terminated) then Synchronize({$IFDEF FPC}self, @{$ENDIF}DoOnPulseEvent); end; end; diff --git a/source/uCEFWriteHandler.pas b/source/uCEFWriteHandler.pas index 6c4464ef..20c6aadc 100644 --- a/source/uCEFWriteHandler.pas +++ b/source/uCEFWriteHandler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFWriteHandler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -70,10 +74,10 @@ type protected FCriticalSection : TRTLCriticalSection; - FGrow : NativeUInt; - FData : Pointer; - FDataSize : int64; - FOffset : int64; + FGrow : NativeUInt; + FBuffer : Pointer; + FBufferSize : int64; + FOffset : int64; function Grow(size : NativeUInt) : NativeUInt; @@ -170,11 +174,11 @@ begin with PCefWriteHandler(FData)^ do begin - write := cef_write_handler_write; - seek := cef_write_handler_seek; - tell := cef_write_handler_tell; - flush := cef_write_handler_flush; - may_block := cef_write_handler_may_block; + write := {$IFDEF FPC}@{$ENDIF}cef_write_handler_write; + seek := {$IFDEF FPC}@{$ENDIF}cef_write_handler_seek; + tell := {$IFDEF FPC}@{$ENDIF}cef_write_handler_tell; + flush := {$IFDEF FPC}@{$ENDIF}cef_write_handler_flush; + may_block := {$IFDEF FPC}@{$ENDIF}cef_write_handler_may_block; end; end; @@ -214,16 +218,16 @@ begin InitializeCriticalSection(FCriticalSection); - FGrow := aGrow; - FDataSize := aGrow; - FOffset := 0; + FGrow := aGrow; + FBufferSize := aGrow; + FOffset := 0; - GetMem(FData, aGrow); + GetMem(FBuffer, aGrow); end; destructor TCefBytesWriteHandler.Destroy; begin - if (FData <> nil) then FreeMem(FData); + if (FBuffer <> nil) then FreeMem(FBuffer); DeleteCriticalSection(FCriticalSection); @@ -232,7 +236,9 @@ begin FCriticalSection.RecursionCount := 0; FCriticalSection.OwningThread := 0; FCriticalSection.LockSemaphore := 0; + {$IFNDEF FPC} FCriticalSection.Reserved := 0; + {$ENDIF} inherited Destroy; end; @@ -243,11 +249,11 @@ var begin EnterCriticalSection(FCriticalSection); - if ((FOffset + (size * n)) >= FDataSize) and (Grow(size * n) = 0) then + if ((FOffset + (size * n)) >= FBufferSize) and (Grow(size * n) = 0) then Result := 0 else begin - TempPointer := Pointer(cardinal(FData) + FOffset); + TempPointer := Pointer(cardinal(FBuffer) + FOffset); CopyMemory(TempPointer, ptr, size * n); @@ -272,7 +278,7 @@ begin case whence of SEEK_CUR : - if not((FOffset + offset > FDataSize) or (FOffset + offset < 0)) then + if not((FOffset + offset > FBufferSize) or (FOffset + offset < 0)) then begin FOffset := FOffset + offset; Result := 0; @@ -282,15 +288,15 @@ begin begin TempAbsOffset := abs(offset); - if not(TempAbsOffset > FDataSize) then + if not(TempAbsOffset > FBufferSize) then begin - FOffset := FDataSize - TempAbsOffset; + FOffset := FBufferSize - TempAbsOffset; Result := 0; end; end; SEEK_SET: - if not((offset > FDataSize) or (offset < 0)) then + if not((offset > FBufferSize) or (offset < 0)) then begin FOffset := offset; Result := 0; @@ -321,12 +327,12 @@ end; function TCefBytesWriteHandler.GetData : pointer; begin - Result := FData; + Result := FBuffer; end; function TCefBytesWriteHandler.GetDataSize : int64; begin - Result := FDataSize; + Result := FBufferSize; end; function TCefBytesWriteHandler.Grow(size : NativeUInt) : NativeUInt; @@ -340,10 +346,10 @@ begin else s := FGrow; - ReallocMem(FData, FDataSize + s); + ReallocMem(FBuffer, FBufferSize + s); - FDataSize := FDataSize + s; - Result := FDataSize; + FBufferSize := FBufferSize + s; + Result := FBufferSize; LeaveCriticalSection(FCriticalSection); end; diff --git a/source/uCEFX509CertPrincipal.pas b/source/uCEFX509CertPrincipal.pas index 2d5777a6..902ea194 100644 --- a/source/uCEFX509CertPrincipal.pas +++ b/source/uCEFX509CertPrincipal.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFX509CertPrincipal; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -83,27 +87,27 @@ uses function TCefX509CertPrincipalRef.GetDisplayName: ustring; begin - Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData).get_display_name(FData)); + Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData)^.get_display_name(PCefX509CertPrincipal(FData))); end; function TCefX509CertPrincipalRef.GetCommonName: ustring; begin - Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData).get_common_name(FData)); + Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData)^.get_common_name(PCefX509CertPrincipal(FData))); end; function TCefX509CertPrincipalRef.GetLocalityName: ustring; begin - Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData).get_locality_name(FData)); + Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData)^.get_locality_name(PCefX509CertPrincipal(FData))); end; function TCefX509CertPrincipalRef.GetStateOrProvinceName: ustring; begin - Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData).get_state_or_province_name(FData)); + Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData)^.get_state_or_province_name(PCefX509CertPrincipal(FData))); end; function TCefX509CertPrincipalRef.GetCountryName: ustring; begin - Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData).get_country_name(FData)); + Result := CefStringFreeAndGet(PCefX509CertPrincipal(FData)^.get_country_name(PCefX509CertPrincipal(FData))); end; procedure TCefX509CertPrincipalRef.GetStreetAddresses(const addresses: TStrings); @@ -113,7 +117,7 @@ begin if (addresses <> nil) then begin TempSL := TCefStringListOwn.Create; - PCefX509CertPrincipal(FData).get_street_addresses(FData, TempSL.Handle); + PCefX509CertPrincipal(FData)^.get_street_addresses(PCefX509CertPrincipal(FData), TempSL.Handle); TempSL.CopyToStrings(addresses); end; end; @@ -125,7 +129,7 @@ begin if (names <> nil) then begin TempSL := TCefStringListOwn.Create; - PCefX509CertPrincipal(FData).get_organization_names(FData, TempSL.Handle); + PCefX509CertPrincipal(FData)^.get_organization_names(PCefX509CertPrincipal(FData), TempSL.Handle); TempSL.CopyToStrings(names); end; end; @@ -137,7 +141,7 @@ begin if (names <> nil) then begin TempSL := TCefStringListOwn.Create; - PCefX509CertPrincipal(FData).get_organization_unit_names(FData, TempSL.Handle); + PCefX509CertPrincipal(FData)^.get_organization_unit_names(PCefX509CertPrincipal(FData), TempSL.Handle); TempSL.CopyToStrings(names); end; end; @@ -149,7 +153,7 @@ begin if (components <> nil) then begin TempSL := TCefStringListOwn.Create; - PCefX509CertPrincipal(FData).get_domain_components(FData, TempSL.Handle); + PCefX509CertPrincipal(FData)^.get_domain_components(PCefX509CertPrincipal(FData), TempSL.Handle); TempSL.CopyToStrings(components); end; end; diff --git a/source/uCEFX509Certificate.pas b/source/uCEFX509Certificate.pas index c30a0579..ea7edc83 100644 --- a/source/uCEFX509Certificate.pas +++ b/source/uCEFX509Certificate.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFX509Certificate; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -57,14 +61,14 @@ uses type TCEFX509CertificateRef = class(TCefBaseRefCountedRef, ICefX509Certificate) protected - function GetSubject: ICefX509CertPrincipal; - function GetIssuer: ICefX509CertPrincipal; - function GetSerialNumber: ICefBinaryValue; - function GetValidStart: TCefTime; - function GetValidExpiry: TCefTime; - function GetDerEncoded: ICefBinaryValue; - function GetPemEncoded: ICefBinaryValue; - function GetIssuerChainSize: NativeUInt; + function GetSubject: ICefX509CertPrincipal; + function GetIssuer: ICefX509CertPrincipal; + function GetSerialNumber: ICefBinaryValue; + function GetValidStart: TCefTime; + function GetValidExpiry: TCefTime; + function GetDerEncoded: ICefBinaryValue; + function GetPemEncoded: ICefBinaryValue; + function GetIssuerChainSize: NativeUInt; procedure GetDEREncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); procedure GetPEMEncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); @@ -79,42 +83,42 @@ uses function TCEFX509CertificateRef.GetSubject: ICefX509CertPrincipal; begin - Result := TCefX509CertPrincipalRef.UnWrap(PCefX509Certificate(FData).get_subject(FData)); + Result := TCefX509CertPrincipalRef.UnWrap(PCefX509Certificate(FData)^.get_subject(PCefX509Certificate(FData))); end; function TCEFX509CertificateRef.GetIssuer: ICefX509CertPrincipal; begin - Result := TCefX509CertPrincipalRef.UnWrap(PCefX509Certificate(FData).get_issuer(FData)); + Result := TCefX509CertPrincipalRef.UnWrap(PCefX509Certificate(FData)^.get_issuer(PCefX509Certificate(FData))); end; function TCEFX509CertificateRef.GetSerialNumber: ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefX509Certificate(FData).get_serial_number(FData)); + Result := TCefBinaryValueRef.UnWrap(PCefX509Certificate(FData)^.get_serial_number(PCefX509Certificate(FData))); end; function TCEFX509CertificateRef.GetValidStart: TCefTime; begin - Result := PCefX509Certificate(FData).get_valid_start(FData); + Result := PCefX509Certificate(FData)^.get_valid_start(PCefX509Certificate(FData)); end; function TCEFX509CertificateRef.GetValidExpiry: TCefTime; begin - Result := PCefX509Certificate(FData).get_valid_expiry(FData); + Result := PCefX509Certificate(FData)^.get_valid_expiry(PCefX509Certificate(FData)); end; function TCEFX509CertificateRef.GetDerEncoded: ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefX509Certificate(FData).get_derencoded(FData)); + Result := TCefBinaryValueRef.UnWrap(PCefX509Certificate(FData)^.get_derencoded(PCefX509Certificate(FData))); end; function TCEFX509CertificateRef.GetPemEncoded: ICefBinaryValue; begin - Result := TCefBinaryValueRef.UnWrap(PCefX509Certificate(FData).get_pemencoded(FData)); + Result := TCefBinaryValueRef.UnWrap(PCefX509Certificate(FData)^.get_pemencoded(PCefX509Certificate(FData))); end; function TCEFX509CertificateRef.GetIssuerChainSize: NativeUInt; begin - Result := PCefX509Certificate(FData).get_issuer_chain_size(FData); + Result := PCefX509Certificate(FData)^.get_issuer_chain_size(PCefX509Certificate(FData)); end; procedure TCEFX509CertificateRef.GetDEREncodedIssuerChain(chainCount: NativeUInt; var chain : TCefBinaryValueArray); @@ -137,7 +141,7 @@ begin inc(i); end; - PCefX509Certificate(FData).get_derencoded_issuer_chain(FData, chainCount, TempArray[0]); + PCefX509Certificate(FData)^.get_derencoded_issuer_chain(PCefX509Certificate(FData), chainCount, TempArray[0]); if (chainCount > 0) then begin @@ -184,7 +188,7 @@ begin inc(i); end; - PCefX509Certificate(FData).get_pemencoded_issuer_chain(FData, chainCount, TempArray[0]); + PCefX509Certificate(FData)^.get_pemencoded_issuer_chain(PCefX509Certificate(FData), chainCount, TempArray[0]); if (chainCount > 0) then begin diff --git a/source/uCEFXmlReader.pas b/source/uCEFXmlReader.pas index 4ea6c833..795fd65a 100644 --- a/source/uCEFXmlReader.pas +++ b/source/uCEFXmlReader.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFXmlReader; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -83,8 +87,7 @@ type function MoveToCarryingElement: Boolean; public class function UnWrap(data: Pointer): ICefXmlReader; - class function New(const stream: ICefStreamReader; - encodingType: TCefXmlEncodingType; const URI: ustring): ICefXmlReader; + class function New(const stream: ICefStreamReader; encodingType: TCefXmlEncodingType; const URI: ustring): ICefXmlReader; end; implementation @@ -94,180 +97,180 @@ uses function TCefXmlReaderRef.Close: Boolean; begin - Result := PCefXmlReader(FData).close(FData) <> 0; + Result := PCefXmlReader(FData)^.close(PCefXmlReader(FData)) <> 0; end; -class function TCefXmlReaderRef.New(const stream: ICefStreamReader; - encodingType: TCefXmlEncodingType; const URI: ustring): ICefXmlReader; +class function TCefXmlReaderRef.New(const stream: ICefStreamReader; encodingType: TCefXmlEncodingType; const URI: ustring): ICefXmlReader; var - u: TCefString; + TempURI : TCefString; begin - u := CefString(URI); - Result := UnWrap(cef_xml_reader_create(CefGetData(stream), encodingType, @u)); + TempURI := CefString(URI); + Result := UnWrap(cef_xml_reader_create(CefGetData(stream), encodingType, @TempURI)); end; function TCefXmlReaderRef.GetAttributeByIndex(index: Integer): ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_attribute_byindex(FData, index)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_attribute_byindex(PCefXmlReader(FData), index)); end; -function TCefXmlReaderRef.GetAttributeByLName(const localName, - namespaceURI: ustring): ustring; +function TCefXmlReaderRef.GetAttributeByLName(const localName, namespaceURI: ustring): ustring; var - l, n: TCefString; + TempLocalname, TempNamespaceURI : TCefString; begin - l := CefString(localName); - n := CefString(namespaceURI); - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_attribute_bylname(FData, @l, @n)); + TempLocalname := CefString(localName); + TempNamespaceURI := CefString(namespaceURI); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_attribute_bylname(PCefXmlReader(FData), + @TempLocalname, + @TempNamespaceURI)); end; -function TCefXmlReaderRef.GetAttributeByQName( - const qualifiedName: ustring): ustring; +function TCefXmlReaderRef.GetAttributeByQName(const qualifiedName: ustring): ustring; var - q: TCefString; + TempName : TCefString; begin - q := CefString(qualifiedName); - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_attribute_byqname(FData, @q)); + TempName := CefString(qualifiedName); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_attribute_byqname(PCefXmlReader(FData), @TempName)); end; function TCefXmlReaderRef.GetAttributeCount: NativeUInt; begin - Result := PCefXmlReader(FData).get_attribute_count(FData); + Result := PCefXmlReader(FData)^.get_attribute_count(PCefXmlReader(FData)); end; function TCefXmlReaderRef.GetBaseUri: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_base_uri(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_base_uri(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetDepth: Integer; begin - Result := PCefXmlReader(FData).get_depth(FData); + Result := PCefXmlReader(FData)^.get_depth(PCefXmlReader(FData)); end; function TCefXmlReaderRef.GetError: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_error(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_error(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetInnerXml: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_inner_xml(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_inner_xml(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetLineNumber: Integer; begin - Result := PCefXmlReader(FData).get_line_number(FData); + Result := PCefXmlReader(FData)^.get_line_number(PCefXmlReader(FData)); end; function TCefXmlReaderRef.GetLocalName: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_local_name(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_local_name(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetNamespaceUri: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_namespace_uri(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_namespace_uri(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetOuterXml: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_outer_xml(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_outer_xml(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetPrefix: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_prefix(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_prefix(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetQualifiedName: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_qualified_name(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_qualified_name(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetType: TCefXmlNodeType; begin - Result := PCefXmlReader(FData).get_type(FData); + Result := PCefXmlReader(FData)^.get_type(PCefXmlReader(FData)); end; function TCefXmlReaderRef.GetValue: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_value(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_value(PCefXmlReader(FData))); end; function TCefXmlReaderRef.GetXmlLang: ustring; begin - Result := CefStringFreeAndGet(PCefXmlReader(FData).get_xml_lang(FData)); + Result := CefStringFreeAndGet(PCefXmlReader(FData)^.get_xml_lang(PCefXmlReader(FData))); end; function TCefXmlReaderRef.HasAttributes: Boolean; begin - Result := PCefXmlReader(FData).has_attributes(FData) <> 0; + Result := PCefXmlReader(FData)^.has_attributes(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.HasError: Boolean; begin - Result := PCefXmlReader(FData).has_error(FData) <> 0; + Result := PCefXmlReader(FData)^.has_error(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.HasValue: Boolean; begin - Result := PCefXmlReader(FData).has_value(FData) <> 0; + Result := PCefXmlReader(FData)^.has_value(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.IsEmptyElement: Boolean; begin - Result := PCefXmlReader(FData).is_empty_element(FData) <> 0; + Result := PCefXmlReader(FData)^.is_empty_element(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.MoveToAttributeByIndex(index: Integer): Boolean; begin - Result := PCefXmlReader(FData).move_to_attribute_byindex(FData, index) <> 0; + Result := PCefXmlReader(FData)^.move_to_attribute_byindex(PCefXmlReader(FData), index) <> 0; end; -function TCefXmlReaderRef.MoveToAttributeByLName(const localName, - namespaceURI: ustring): Boolean; +function TCefXmlReaderRef.MoveToAttributeByLName(const localName, namespaceURI: ustring): Boolean; var - l, n: TCefString; + TempLocalname, TempNamespaceURI : TCefString; begin - l := CefString(localName); - n := CefString(namespaceURI); - Result := PCefXmlReader(FData).move_to_attribute_bylname(FData, @l, @n) <> 0; + TempLocalname := CefString(localName); + TempNamespaceURI := CefString(namespaceURI); + Result := PCefXmlReader(FData)^.move_to_attribute_bylname(PCefXmlReader(FData), + @TempLocalname, + @TempNamespaceURI) <> 0; end; -function TCefXmlReaderRef.MoveToAttributeByQName( - const qualifiedName: ustring): Boolean; +function TCefXmlReaderRef.MoveToAttributeByQName(const qualifiedName: ustring): Boolean; var - q: TCefString; + TempName : TCefString; begin - q := CefString(qualifiedName); - Result := PCefXmlReader(FData).move_to_attribute_byqname(FData, @q) <> 0; + TempName := CefString(qualifiedName); + Result := PCefXmlReader(FData)^.move_to_attribute_byqname(PCefXmlReader(FData), @TempName) <> 0; end; function TCefXmlReaderRef.MoveToCarryingElement: Boolean; begin - Result := PCefXmlReader(FData).move_to_carrying_element(FData) <> 0; + Result := PCefXmlReader(FData)^.move_to_carrying_element(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.MoveToFirstAttribute: Boolean; begin - Result := PCefXmlReader(FData).move_to_first_attribute(FData) <> 0; + Result := PCefXmlReader(FData)^.move_to_first_attribute(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.MoveToNextAttribute: Boolean; begin - Result := PCefXmlReader(FData).move_to_next_attribute(FData) <> 0; + Result := PCefXmlReader(FData)^.move_to_next_attribute(PCefXmlReader(FData)) <> 0; end; function TCefXmlReaderRef.MoveToNextNode: Boolean; begin - Result := PCefXmlReader(FData).move_to_next_node(FData) <> 0; + Result := PCefXmlReader(FData)^.move_to_next_node(PCefXmlReader(FData)) <> 0; end; class function TCefXmlReaderRef.UnWrap(data: Pointer): ICefXmlReader; begin if data <> nil then - Result := Create(data) as ICefXmlReader else + Result := Create(data) as ICefXmlReader + else Result := nil; end; diff --git a/source/uCEFZipReader.pas b/source/uCEFZipReader.pas index 089ed19f..ad2b9391 100644 --- a/source/uCEFZipReader.pas +++ b/source/uCEFZipReader.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFZipReader; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -76,12 +80,12 @@ uses function TCefZipReaderRef.Close: Boolean; begin - Result := PCefZipReader(FData).close(FData) <> 0; + Result := PCefZipReader(FData)^.close(PCefZipReader(FData)) <> 0; end; function TCefZipReaderRef.CloseFile: Boolean; begin - Result := PCefZipReader(FData).close_file(FData) <> 0; + Result := PCefZipReader(FData)^.close_file(PCefZipReader(FData)) <> 0; end; class function TCefZipReaderRef.New(const stream: ICefStreamReader): ICefZipReader; @@ -91,66 +95,65 @@ end; function TCefZipReaderRef.Eof: Boolean; begin - Result := PCefZipReader(FData).eof(FData) <> 0; + Result := PCefZipReader(FData)^.eof(PCefZipReader(FData)) <> 0; end; function TCefZipReaderRef.GetFileLastModified: TCefTime; begin - Result := PCefZipReader(FData).get_file_last_modified(FData); + Result := PCefZipReader(FData)^.get_file_last_modified(PCefZipReader(FData)); end; function TCefZipReaderRef.GetFileName: ustring; begin - Result := CefStringFreeAndGet(PCefZipReader(FData).get_file_name(FData)); + Result := CefStringFreeAndGet(PCefZipReader(FData)^.get_file_name(PCefZipReader(FData))); end; function TCefZipReaderRef.GetFileSize: Int64; begin - Result := PCefZipReader(FData).get_file_size(FData); + Result := PCefZipReader(FData)^.get_file_size(PCefZipReader(FData)); end; -function TCefZipReaderRef.MoveToFile(const fileName: ustring; - caseSensitive: Boolean): Boolean; +function TCefZipReaderRef.MoveToFile(const fileName: ustring; caseSensitive: Boolean): Boolean; var - f: TCefString; + TempFilename : TCefString; begin - f := CefString(fileName); - Result := PCefZipReader(FData).move_to_file(FData, @f, Ord(caseSensitive)) <> 0; + TempFilename := CefString(fileName); + Result := PCefZipReader(FData)^.move_to_file(PCefZipReader(FData), @TempFilename, Ord(caseSensitive)) <> 0; end; function TCefZipReaderRef.MoveToFirstFile: Boolean; begin - Result := PCefZipReader(FData).move_to_first_file(FData) <> 0; + Result := PCefZipReader(FData)^.move_to_first_file(PCefZipReader(FData)) <> 0; end; function TCefZipReaderRef.MoveToNextFile: Boolean; begin - Result := PCefZipReader(FData).move_to_next_file(FData) <> 0; + Result := PCefZipReader(FData)^.move_to_next_file(PCefZipReader(FData)) <> 0; end; function TCefZipReaderRef.OpenFile(const password: ustring): Boolean; var - p: TCefString; + TempPassword : TCefString; begin - p := CefString(password); - Result := PCefZipReader(FData).open_file(FData, @p) <> 0; + TempPassword := CefString(password); + Result := PCefZipReader(FData)^.open_file(PCefZipReader(FData), @TempPassword) <> 0; end; -function TCefZipReaderRef.ReadFile(buffer: Pointer; - bufferSize: NativeUInt): Integer; +function TCefZipReaderRef.ReadFile(buffer: Pointer; bufferSize: NativeUInt): Integer; begin - Result := PCefZipReader(FData).read_file(FData, buffer, buffersize); + Result := PCefZipReader(FData)^.read_file(PCefZipReader(FData), buffer, buffersize); end; function TCefZipReaderRef.Tell: Int64; begin - Result := PCefZipReader(FData).tell(FData); + Result := PCefZipReader(FData)^.tell(PCefZipReader(FData)); end; class function TCefZipReaderRef.UnWrap(data: Pointer): ICefZipReader; begin - if data <> nil then - Result := Create(data) as ICefZipReader else + if (data <> nil) then + Result := Create(data) as ICefZipReader + else Result := nil; end; diff --git a/source/uCEFv8Accessor.pas b/source/uCEFv8Accessor.pas index 7f1ac751..83371dd5 100644 --- a/source/uCEFv8Accessor.pas +++ b/source/uCEFv8Accessor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8Accessor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -47,7 +51,7 @@ unit uCEFv8Accessor; interface uses - uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFv8Types; + uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type TCefV8AccessorOwn = class(TCefBaseRefCountedOwn, ICefV8Accessor) @@ -128,8 +132,11 @@ constructor TCefV8AccessorOwn.Create; begin inherited CreateData(SizeOf(TCefV8Accessor)); - PCefV8Accessor(FData)^.get := cef_v8_accessor_get; - PCefV8Accessor(FData)^.put := cef_v8_accessor_put; + with PCefV8Accessor(FData)^ do + begin + get := {$IFDEF FPC}@{$ENDIF}cef_v8_accessor_get; + put := {$IFDEF FPC}@{$ENDIF}cef_v8_accessor_put; + end; end; function TCefV8AccessorOwn.Get(const name: ustring; const obj: ICefv8Value; out retval: ICefv8Value; var exception: ustring): Boolean; diff --git a/source/uCEFv8ArrayBufferReleaseCallback.pas b/source/uCEFv8ArrayBufferReleaseCallback.pas index ffb3194d..f871f80b 100644 --- a/source/uCEFv8ArrayBufferReleaseCallback.pas +++ b/source/uCEFv8ArrayBufferReleaseCallback.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8ArrayBufferReleaseCallback; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -50,8 +54,6 @@ uses uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type - TCefv8ArrayBufferReleaseCallbackProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(buffer : Pointer); - TCefv8ArrayBufferReleaseCallbackOwn = class(TCefBaseRefCountedOwn, ICefv8ArrayBufferReleaseCallback) protected procedure ReleaseBuffer(buffer : Pointer); virtual; @@ -101,7 +103,8 @@ constructor TCefv8ArrayBufferReleaseCallbackOwn.Create; begin inherited CreateData(SizeOf(TCefv8ArrayBufferReleaseCallback)); - PCefv8ArrayBufferReleaseCallback(FData).release_buffer := cef_v8array_buffer_release_callback_release_buffer; + with PCefv8ArrayBufferReleaseCallback(FData)^ do + release_buffer := {$IFDEF FPC}@{$ENDIF}cef_v8array_buffer_release_callback_release_buffer; end; procedure TCefv8ArrayBufferReleaseCallbackOwn.ReleaseBuffer(buffer: Pointer); @@ -129,7 +132,7 @@ end; procedure TCefv8ArrayBufferReleaseCallbackRef.ReleaseBuffer(buffer : Pointer); begin - PCefv8ArrayBufferReleaseCallback(FData).release_buffer(PCefv8ArrayBufferReleaseCallback(FData), buffer); + PCefv8ArrayBufferReleaseCallback(FData)^.release_buffer(PCefv8ArrayBufferReleaseCallback(FData), buffer); end; class function TCefv8ArrayBufferReleaseCallbackRef.UnWrap(data: Pointer): ICefv8ArrayBufferReleaseCallback; diff --git a/source/uCEFv8Context.pas b/source/uCEFv8Context.pas index 75a27845..b663589e 100644 --- a/source/uCEFv8Context.pas +++ b/source/uCEFv8Context.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8Context; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -75,7 +79,7 @@ uses class function TCefv8ContextRef.Current: ICefv8Context; begin - Result := UnWrap(cef_v8context_get_current_context) + Result := UnWrap(cef_v8context_get_current_context()) end; function TCefv8ContextRef.Enter: Boolean; @@ -85,7 +89,7 @@ end; class function TCefv8ContextRef.Entered: ICefv8Context; begin - Result := UnWrap(cef_v8context_get_entered_context) + Result := UnWrap(cef_v8context_get_entered_context()) end; function TCefv8ContextRef.Exit: Boolean; @@ -120,14 +124,14 @@ end; function TCefv8ContextRef.IsValid: Boolean; begin - Result := PCefv8Context(FData)^.is_valid(FData) <> 0; + Result := PCefv8Context(FData)^.is_valid(PCefv8Context(FData)) <> 0; end; -function TCefv8ContextRef.Eval(const code: ustring; - const script_url: ustring; - start_line: integer; - var retval: ICefv8Value; - var exception: ICefV8Exception): Boolean; +function TCefv8ContextRef.Eval(const code : ustring; + const script_url : ustring; + start_line : integer; + var retval : ICefv8Value; + var exception : ICefV8Exception): Boolean; var TempCode, TempScriptURL : TCefString; TempValue : PCefv8Value; diff --git a/source/uCEFv8Handler.pas b/source/uCEFv8Handler.pas index d378de8e..11bf0aa5 100644 --- a/source/uCEFv8Handler.pas +++ b/source/uCEFv8Handler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8Handler; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -90,7 +94,7 @@ type public constructor Create(const value: TValue; SyncMainThread: Boolean = False); reintroduce; destructor Destroy; override; - class procedure Register(const name: string; const value: TValue; SyncMainThread: Boolean = False); + class procedure Register(const name: ustring; const value: TValue; SyncMainThread: Boolean = False); end; {$ENDIF} @@ -125,7 +129,7 @@ begin while (i < j) do begin - args[i] := TCefv8ValueRef.UnWrap(arguments[i]); + args[i] := TCefv8ValueRef.UnWrap(arguments^[i]); inc(i); end; @@ -162,7 +166,7 @@ begin FillChar(exc, SizeOf(exc), 0); ret := nil; n := CefString(name); - Result := PCefv8Handler(FData).execute(PCefv8Handler(FData), @n, CefGetData(obj), Length(arguments), @args, ret, exc) <> 0; + Result := PCefv8Handler(FData)^.execute(PCefv8Handler(FData), @n, CefGetData(obj), Length(arguments), @args, ret, exc) <> 0; retval := TCefv8ValueRef.UnWrap(ret); exception := CefStringClearAndGet(exc); end; @@ -181,7 +185,7 @@ constructor TCefv8HandlerOwn.Create; begin inherited CreateData(SizeOf(TCefv8Handler)); - PCefv8Handler(FData).execute := cef_v8_handler_execute; + PCefv8Handler(FData)^.execute := {$IFDEF FPC}@{$ENDIF}cef_v8_handler_execute; end; function TCefv8HandlerOwn.Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean; @@ -746,7 +750,7 @@ begin Result := True; end; -class procedure TCefRTTIExtension.Register(const name: string; const value: TValue; SyncMainThread: Boolean); +class procedure TCefRTTIExtension.Register(const name: ustring; const value: TValue; SyncMainThread: Boolean); var TempCode : ustring; TempHandler : ICefv8Handler; diff --git a/source/uCEFv8Interceptor.pas b/source/uCEFv8Interceptor.pas index 66c3b48a..f6291f31 100644 --- a/source/uCEFv8Interceptor.pas +++ b/source/uCEFv8Interceptor.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8Interceptor; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -47,7 +51,7 @@ unit uCEFv8Interceptor; interface uses - uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFv8Types; + uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type TCefV8InterceptorOwn = class(TCefBaseRefCountedOwn, ICefV8Interceptor) @@ -177,10 +181,10 @@ begin with PCefV8Interceptor(FData)^ do begin - get_byname := cef_v8_interceptor_get_byname; - get_byindex := cef_v8_interceptor_get_byindex; - set_byname := cef_v8_interceptor_set_byname; - set_byindex := cef_v8_interceptor_set_byindex; + get_byname := {$IFDEF FPC}@{$ENDIF}cef_v8_interceptor_get_byname; + get_byindex := {$IFDEF FPC}@{$ENDIF}cef_v8_interceptor_get_byindex; + set_byname := {$IFDEF FPC}@{$ENDIF}cef_v8_interceptor_set_byname; + set_byindex := {$IFDEF FPC}@{$ENDIF}cef_v8_interceptor_set_byindex; end; end; diff --git a/source/uCEFv8StackFrame.pas b/source/uCEFv8StackFrame.pas index 52feddaa..cf16df5a 100644 --- a/source/uCEFv8StackFrame.pas +++ b/source/uCEFv8StackFrame.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8StackFrame; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -71,48 +75,49 @@ uses function TCefV8StackFrameRef.GetColumn: Integer; begin - Result := PCefV8StackFrame(FData).get_column(FData); + Result := PCefV8StackFrame(FData)^.get_column(PCefV8StackFrame(FData)); end; function TCefV8StackFrameRef.GetFunctionName: ustring; begin - Result := CefStringFreeAndGet(PCefV8StackFrame(FData).get_function_name(FData)); + Result := CefStringFreeAndGet(PCefV8StackFrame(FData)^.get_function_name(PCefV8StackFrame(FData))); end; function TCefV8StackFrameRef.GetLineNumber: Integer; begin - Result := PCefV8StackFrame(FData).get_line_number(FData); + Result := PCefV8StackFrame(FData)^.get_line_number(PCefV8StackFrame(FData)); end; function TCefV8StackFrameRef.GetScriptName: ustring; begin - Result := CefStringFreeAndGet(PCefV8StackFrame(FData).get_script_name(FData)); + Result := CefStringFreeAndGet(PCefV8StackFrame(FData)^.get_script_name(PCefV8StackFrame(FData))); end; function TCefV8StackFrameRef.GetScriptNameOrSourceUrl: ustring; begin - Result := CefStringFreeAndGet(PCefV8StackFrame(FData).get_script_name_or_source_url(FData)); + Result := CefStringFreeAndGet(PCefV8StackFrame(FData)^.get_script_name_or_source_url(PCefV8StackFrame(FData))); end; function TCefV8StackFrameRef.IsConstructor: Boolean; begin - Result := PCefV8StackFrame(FData).is_constructor(FData) <> 0; + Result := PCefV8StackFrame(FData)^.is_constructor(PCefV8StackFrame(FData)) <> 0; end; function TCefV8StackFrameRef.IsEval: Boolean; begin - Result := PCefV8StackFrame(FData).is_eval(FData) <> 0; + Result := PCefV8StackFrame(FData)^.is_eval(PCefV8StackFrame(FData)) <> 0; end; function TCefV8StackFrameRef.IsValid: Boolean; begin - Result := PCefV8StackFrame(FData).is_valid(FData) <> 0; + Result := PCefV8StackFrame(FData)^.is_valid(PCefV8StackFrame(FData)) <> 0; end; class function TCefV8StackFrameRef.UnWrap(data: Pointer): ICefV8StackFrame; begin - if data <> nil then - Result := Create(data) as ICefV8StackFrame else + if (data <> nil) then + Result := Create(data) as ICefV8StackFrame + else Result := nil; end; diff --git a/source/uCEFv8StackTrace.pas b/source/uCEFv8StackTrace.pas index ac873a59..521a249c 100644 --- a/source/uCEFv8StackTrace.pas +++ b/source/uCEFv8StackTrace.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8StackTrace; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -72,23 +76,24 @@ end; function TCefV8StackTraceRef.GetFrame(index: Integer): ICefV8StackFrame; begin - Result := TCefV8StackFrameRef.UnWrap(PCefV8StackTrace(FData).get_frame(FData, index)); + Result := TCefV8StackFrameRef.UnWrap(PCefV8StackTrace(FData)^.get_frame(PCefV8StackTrace(FData), index)); end; function TCefV8StackTraceRef.GetFrameCount: Integer; begin - Result := PCefV8StackTrace(FData).get_frame_count(FData); + Result := PCefV8StackTrace(FData)^.get_frame_count(PCefV8StackTrace(FData)); end; function TCefV8StackTraceRef.IsValid: Boolean; begin - Result := PCefV8StackTrace(FData).is_valid(FData) <> 0; + Result := PCefV8StackTrace(FData)^.is_valid(PCefV8StackTrace(FData)) <> 0; end; class function TCefV8StackTraceRef.UnWrap(data: Pointer): ICefV8StackTrace; begin - if data <> nil then - Result := Create(data) as ICefV8StackTrace else + if (data <> nil) then + Result := Create(data) as ICefV8StackTrace + else Result := nil; end; diff --git a/source/uCEFv8Types.pas b/source/uCEFv8Types.pas deleted file mode 100644 index 470c534e..00000000 --- a/source/uCEFv8Types.pas +++ /dev/null @@ -1,68 +0,0 @@ -// ************************************************************************ -// ***************************** CEF4Delphi ******************************* -// ************************************************************************ -// -// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based -// browser in Delphi applications. -// -// The original license of DCEF3 still applies to CEF4Delphi. -// -// For more information about CEF4Delphi visit : -// https://www.briskbard.com/index.php?lang=en&pageid=cef -// -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. -// -// ************************************************************************ -// ************ vvvv Original license and comments below vvvv ************* -// ************************************************************************ -(* - * Delphi Chromium Embedded 3 - * - * Usage allowed under the restrictions of the Lesser GNU General Public License - * or alternatively the restrictions of the Mozilla Public License 1.1 - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for - * the specific language governing rights and limitations under the License. - * - * Unit owner : Henri Gourvest <hgourvest@gmail.com> - * Web site : http://www.progdigy.com - * Repository : http://code.google.com/p/delphichromiumembedded/ - * Group : http://groups.google.com/group/delphichromiumembedded - * - * Embarcadero Technologies, Inc is not permitted to use or redistribute - * this source code without explicit permission. - * - *) - -unit uCEFv8Types; - -{$IFNDEF CPUX64} - {$ALIGN ON} - {$MINENUMSIZE 4} -{$ENDIF} - -{$I cef.inc} - -interface - -uses - {$IFDEF DELPHI16_UP} - System.Classes, - {$ELSE} - Classes, - {$ENDIF} - uCEFInterfaces, uCEFTypes; - -type - TCefV8AccessorGetterProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj: ICefv8Value; out value: ICefv8Value; const exception: ustring): Boolean; - TCefV8AccessorSetterProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj, value: ICefv8Value; const exception: ustring): Boolean; - - TCefV8InterceptorGetterByNameProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj: ICefv8Value; out value: ICefv8Value; const exception: ustring): Boolean; - TCefV8InterceptorSetterByNameProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(const name: ustring; const obj, value: ICefv8Value; const exception: ustring): Boolean; - TCefV8InterceptorGetterByIndexProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(index: integer; const obj: ICefv8Value; out value: ICefv8Value; const exception: ustring): Boolean; - TCefV8InterceptorSetterByIndexProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} function(index: integer; const obj, value: ICefv8Value; const exception: ustring): Boolean; - -implementation - -end. diff --git a/source/uCEFv8Value.pas b/source/uCEFv8Value.pas index 8f2866d3..d1beed88 100644 --- a/source/uCEFv8Value.pas +++ b/source/uCEFv8Value.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uCEFv8Value; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$IFNDEF CPUX64} {$ALIGN ON} {$MINENUMSIZE 4} @@ -52,7 +56,7 @@ uses {$ELSE} Classes, SysUtils, {$ENDIF} - uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes, uCEFv8Types; + uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; type TCefv8ValueRef = class(TCefBaseRefCountedRef, ICefv8Value) @@ -116,8 +120,8 @@ type class function NewDate(value: TDateTime): ICefv8Value; class function NewString(const str: ustring): ICefv8Value; class function NewObject(const Accessor: ICefV8Accessor; const Interceptor: ICefV8Interceptor): ICefv8Value; - class function NewObjectProc(const getter: TCefV8AccessorGetterProc; - const setter: TCefV8AccessorSetterProc; + class function NewObjectProc(const getter : TCefV8AccessorGetterProc; + const setter : TCefV8AccessorSetterProc; const getterbyname : TCefV8InterceptorGetterByNameProc; const setterbyname : TCefV8InterceptorSetterByNameProc; const getterbyindex : TCefV8InterceptorGetterByIndexProc; @@ -157,10 +161,10 @@ end; class function TCefv8ValueRef.NewDate(value: TDateTime): ICefv8Value; var - dt: TCefTime; + TempValue : TCefTime; begin - dt := DateTimeToCefTime(value); - Result := UnWrap(cef_v8value_create_date(@dt)); + TempValue := DateTimeToCefTime(value); + Result := UnWrap(cef_v8value_create_date(@TempValue)); end; class function TCefv8ValueRef.NewDouble(value: Double): ICefv8Value; @@ -168,13 +172,12 @@ begin Result := UnWrap(cef_v8value_create_double(value)); end; -class function TCefv8ValueRef.NewFunction(const name: ustring; - const handler: ICefv8Handler): ICefv8Value; +class function TCefv8ValueRef.NewFunction(const name: ustring; const handler: ICefv8Handler): ICefv8Value; var - n: TCefString; + TempName : TCefString; begin - n := CefString(name); - Result := UnWrap(cef_v8value_create_function(@n, CefGetData(handler))); + TempName := CefString(name); + Result := UnWrap(cef_v8value_create_function(@TempName, CefGetData(handler))); end; class function TCefv8ValueRef.NewInt(value: Integer): ICefv8Value; @@ -189,7 +192,7 @@ end; class function TCefv8ValueRef.NewNull: ICefv8Value; begin - Result := UnWrap(cef_v8value_create_null); + Result := UnWrap(cef_v8value_create_null()); end; class function TCefv8ValueRef.NewObject(const Accessor: ICefV8Accessor; const Interceptor: ICefV8Interceptor): ICefv8Value; @@ -197,8 +200,8 @@ begin Result := UnWrap(cef_v8value_create_object(CefGetData(Accessor), CefGetData(Interceptor))); end; -class function TCefv8ValueRef.NewObjectProc(const getter: TCefV8AccessorGetterProc; - const setter: TCefV8AccessorSetterProc; +class function TCefv8ValueRef.NewObjectProc(const getter : TCefV8AccessorGetterProc; + const setter : TCefV8AccessorSetterProc; const getterbyname : TCefV8InterceptorGetterByNameProc; const setterbyname : TCefV8InterceptorSetterByNameProc; const getterbyindex : TCefV8InterceptorGetterByIndexProc; @@ -210,15 +213,15 @@ end; class function TCefv8ValueRef.NewString(const str: ustring): ICefv8Value; var - s: TCefString; + TempString : TCefString; begin - s := CefString(str); - Result := UnWrap(cef_v8value_create_string(@s)); + TempString := CefString(str); + Result := UnWrap(cef_v8value_create_string(@TempString)); end; class function TCefv8ValueRef.NewUndefined: ICefv8Value; begin - Result := UnWrap(cef_v8value_create_undefined); + Result := UnWrap(cef_v8value_create_undefined()); end; function TCefv8ValueRef.DeleteValueByIndex(index: Integer): Boolean; @@ -228,10 +231,10 @@ end; function TCefv8ValueRef.DeleteValueByKey(const key: ustring): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefV8Value(FData)^.delete_value_bykey(PCefV8Value(FData), @k) <> 0; + TempKey := CefString(key); + Result := PCefV8Value(FData)^.delete_value_bykey(PCefV8Value(FData), @TempKey) <> 0; end; function TCefv8ValueRef.ExecuteFunction(const obj: ICefv8Value; const arguments: TCefv8ValueArray): ICefv8Value; @@ -253,17 +256,17 @@ begin while (i < j) do begin - args[i] := CefGetData(arguments[i]); + args^[i] := CefGetData(arguments[i]); inc(i); end; end else j := 0; - Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData).execute_function(PCefV8Value(FData), - CefGetData(obj), - j, - args)); + Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.execute_function(PCefV8Value(FData), + CefGetData(obj), + j, + args)); except on e : exception do if CustomExceptionHandler('TCefv8ValueRef.ExecuteFunction', e) then raise; @@ -294,18 +297,18 @@ begin while (i < j) do begin - args[i] := CefGetData(arguments[i]); + args^[i] := CefGetData(arguments[i]); inc(i); end; end else j := 0; - Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData).execute_function_with_context(PCefV8Value(FData), - CefGetData(context), - CefGetData(obj), - j, - args)); + Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.execute_function_with_context(PCefV8Value(FData), + CefGetData(context), + CefGetData(obj), + j, + args)); except on e : exception do if CustomExceptionHandler('TCefv8ValueRef.ExecuteFunctionWithContext', e) then raise; @@ -377,7 +380,7 @@ begin Result := 0; TempSL := TCefStringListOwn.Create; - if (PCefV8Value(FData).get_keys(PCefV8Value(FData), TempSL.Handle) <> 0) then + if (PCefV8Value(FData)^.get_keys(PCefV8Value(FData), TempSL.Handle) <> 0) then begin TempSL.CopyToStrings(keys); Result := keys.Count; @@ -436,15 +439,15 @@ end; function TCefv8ValueRef.GetValueByIndex(index: Integer): ICefv8Value; begin - Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.get_value_byindex(PCefV8Value(FData), index)) + Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.get_value_byindex(PCefV8Value(FData), index)); end; function TCefv8ValueRef.GetValueByKey(const key: ustring): ICefv8Value; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.get_value_bykey(PCefV8Value(FData), @k)) + TempKey := CefString(key); + Result := TCefv8ValueRef.UnWrap(PCefV8Value(FData)^.get_value_bykey(PCefV8Value(FData), @TempKey)); end; function TCefv8ValueRef.HasValueByIndex(index: Integer): Boolean; @@ -454,10 +457,10 @@ end; function TCefv8ValueRef.HasValueByKey(const key: ustring): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefV8Value(FData)^.has_value_bykey(PCefV8Value(FData), @k) <> 0; + TempKey := CefString(key); + Result := PCefV8Value(FData)^.has_value_bykey(PCefV8Value(FData), @TempKey) <> 0; end; function TCefv8ValueRef.IsArray: Boolean; @@ -527,10 +530,10 @@ end; function TCefv8ValueRef.SetValueByAccessor(const key: ustring; settings: TCefV8AccessControls; attribute: TCefV8PropertyAttributes): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefV8Value(FData)^.set_value_byaccessor(PCefV8Value(FData), @k, PByte(@settings)^, PByte(@attribute)^) <> 0; + TempKey := CefString(key); + Result := PCefV8Value(FData)^.set_value_byaccessor(PCefV8Value(FData), @TempKey, PByte(@settings)^, PByte(@attribute)^) <> 0; end; function TCefv8ValueRef.SetValueByIndex(index: Integer; const value: ICefv8Value): Boolean; @@ -540,10 +543,10 @@ end; function TCefv8ValueRef.SetValueByKey(const key: ustring; const value: ICefv8Value; attribute: TCefV8PropertyAttributes): Boolean; var - k: TCefString; + TempKey : TCefString; begin - k := CefString(key); - Result := PCefV8Value(FData)^.set_value_bykey(PCefV8Value(FData), @k, CefGetData(value), PByte(@attribute)^) <> 0; + TempKey := CefString(key); + Result := PCefV8Value(FData)^.set_value_bykey(PCefV8Value(FData), @TempKey, CefGetData(value), PByte(@attribute)^) <> 0; end; class function TCefv8ValueRef.UnWrap(data: Pointer): ICefv8Value; diff --git a/source/uFMXBufferPanel.pas b/source/uFMXBufferPanel.pas index 86546985..5dbdf42b 100644 --- a/source/uFMXBufferPanel.pas +++ b/source/uFMXBufferPanel.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/source/uFMXChromium.pas b/source/uFMXChromium.pas index d7437925..6d17b691 100644 --- a/source/uFMXChromium.pas +++ b/source/uFMXChromium.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -69,15 +69,15 @@ type FDefaultEncoding : ustring; FProxyType : integer; FProxyScheme : TCefProxyScheme; - FProxyServer : string; + FProxyServer : ustring; FProxyPort : integer; - FProxyUsername : string; - FProxyPassword : string; - FProxyScriptURL : string; - FProxyByPassList : string; + FProxyUsername : ustring; + FProxyPassword : ustring; + FProxyScriptURL : ustring; + FProxyByPassList : ustring; FUpdatePreferences : boolean; - FCustomHeaderName : string; - FCustomHeaderValue : string; + FCustomHeaderName : ustring; + FCustomHeaderValue : ustring; FAddCustomHeader : boolean; FDoNotTrack : boolean; FSendReferrer : boolean; @@ -88,7 +88,6 @@ type FCookiePrefs : integer; FImagesPrefs : integer; FZoomStep : byte; - FWindowName : string; FPrefsFileName : string; FIsOSR : boolean; FInitialized : boolean; @@ -230,7 +229,7 @@ type function GetHasBrowser : boolean; function GetCanGoBack : boolean; function GetCanGoForward : boolean; - function GetDocumentURL : string; + function GetDocumentURL : ustring; function GetZoomLevel : double; function GetZoomPct : double; function GetIsPopUp : boolean; @@ -241,7 +240,7 @@ type function GetVisibleNavigationEntry : ICefNavigationEntry; function GetHasValidMainFrame : boolean; function GetFrameCount : NativeUInt; - function GetRequestContextCache : string; + function GetRequestContextCache : ustring; function GetRequestContextIsGlobal : boolean; procedure SetDoNotTrack(aValue : boolean); @@ -257,14 +256,14 @@ type procedure SetImagesPrefs(aValue : integer); procedure SetProxyType(aValue : integer); procedure SetProxyScheme(aValue : TCefProxyScheme); - procedure SetProxyServer(const aValue : string); + procedure SetProxyServer(const aValue : ustring); procedure SetProxyPort(aValue : integer); - procedure SetProxyUsername(const aValue : string); - procedure SetProxyPassword(const aValue : string); - procedure SetProxyScriptURL(const aValue : string); - procedure SetProxyByPassList(const aValue : string); - procedure SetCustomHeaderName(const aValue : string); - procedure SetCustomHeaderValue(const aValue : string); + procedure SetProxyUsername(const aValue : ustring); + procedure SetProxyPassword(const aValue : ustring); + procedure SetProxyScriptURL(const aValue : ustring); + procedure SetProxyByPassList(const aValue : ustring); + procedure SetCustomHeaderName(const aValue : ustring); + procedure SetCustomHeaderValue(const aValue : ustring); procedure SetZoomLevel(const aValue : double); procedure SetZoomPct(const aValue : double); procedure SetZoomStep(aValue : byte); @@ -281,13 +280,13 @@ type procedure InitializeEvents; procedure InitializeSettings(var aSettings : TCefBrowserSettings); - procedure GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : string); + procedure GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : ustring); function UpdateProxyPrefs(const aBrowser: ICefBrowser) : boolean; - function UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : boolean) : boolean; overload; - function UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : integer) : boolean; overload; - function UpdatePreference(const aBrowser: ICefBrowser; const aName : string; const aValue : double) : boolean; overload; - function UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : string) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : boolean) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : integer) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; const aValue : double) : boolean; overload; + function UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean; overload; procedure HandleDictionary(const aDict : ICefDictionaryValue; var aResultSL : TStringList; const aRoot : string); procedure HandleNull(const aValue : ICefValue; var aResultSL : TStringList; const aRoot, aKey : string); @@ -424,7 +423,7 @@ type // Custom procedure doCookiesDeleted(numDeleted : integer); virtual; procedure doPdfPrintFinished(aResultOK : boolean); virtual; - procedure doTextResultAvailable(const aText : string); virtual; + procedure doTextResultAvailable(const aText : ustring); virtual; procedure doUpdatePreferences(const aBrowser: ICefBrowser); virtual; procedure doUpdateOwnPreferences; virtual; function doSavePreferences : boolean; virtual; @@ -439,9 +438,9 @@ type function CreateClientHandler(var aClient : ICefClient; aIsOSR : boolean = True) : boolean; overload; procedure CloseBrowser(aForceClose : boolean); function ShareRequestContext(var aContext : ICefRequestContext; const aHandler : ICefRequestContextHandler = nil) : boolean; - function CreateBrowser(const aWindowName : string = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : string = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; + function CreateBrowser(const aWindowName : ustring = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : ustring = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; {$IFDEF MSWINDOWS} - function CreateBrowser(aParentHandle : HWND; aParentRect : TRect; const aWindowName : string = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : string = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; + function CreateBrowser(aParentHandle : HWND; aParentRect : TRect; const aWindowName : ustring = ''; const aContext : ICefRequestContext = nil; const aCookiesPath : ustring = ''; aPersistSessionCookies : boolean = False) : boolean; overload; virtual; {$ENDIF} procedure LoadURL(const aURL : ustring); @@ -547,18 +546,17 @@ type property RenderHandle : THandle read FRenderCompHWND; property FrameIsFocused : boolean read GetFrameIsFocused; property Initialized : boolean read GetInitialized; - property RequestContextCache : string read GetRequestContextCache; + property RequestContextCache : ustring read GetRequestContextCache; property RequestContextIsGlobal : boolean read GetRequestContextIsGlobal; property CookiePrefs : integer read FCookiePrefs write SetCookiePrefs; property ImagesPrefs : integer read FImagesPrefs write SetImagesPrefs; - property DocumentURL : string read GetDocumentURL; - property WindowName : string read FWindowName write FWindowName; + property DocumentURL : ustring read GetDocumentURL; property ZoomLevel : double read GetZoomLevel write SetZoomLevel; property ZoomPct : double read GetZoomPct write SetZoomPct; property ZoomStep : byte read FZoomStep write SetZoomStep; property WindowlessFrameRate : integer read GetWindowlessFrameRate write SetWindowlessFrameRate; - property CustomHeaderName : string read FCustomHeaderName write SetCustomHeaderName; - property CustomHeaderValue : string read FCustomHeaderValue write SetCustomHeaderValue; + property CustomHeaderName : ustring read FCustomHeaderName write SetCustomHeaderName; + property CustomHeaderValue : ustring read FCustomHeaderValue write SetCustomHeaderValue; property DoNotTrack : boolean read FDoNotTrack write SetDoNotTrack; property SendReferrer : boolean read FSendReferrer write SetSendReferrer; property HyperlinkAuditing : boolean read FHyperlinkAuditing write SetHyperlinkAuditing; @@ -575,12 +573,12 @@ type property ProxyType : integer read FProxyType write SetProxyType; property ProxyScheme : TCefProxyScheme read FProxyScheme write SetProxyScheme; - property ProxyServer : string read FProxyServer write SetProxyServer; + property ProxyServer : ustring read FProxyServer write SetProxyServer; property ProxyPort : integer read FProxyPort write SetProxyPort; - property ProxyUsername : string read FProxyUsername write SetProxyUsername; - property ProxyPassword : string read FProxyPassword write SetProxyPassword; - property ProxyScriptURL : string read FProxyScriptURL write SetProxyScriptURL; - property ProxyByPassList : string read FProxyByPassList write SetProxyByPassList; + property ProxyUsername : ustring read FProxyUsername write SetProxyUsername; + property ProxyPassword : ustring read FProxyPassword write SetProxyPassword; + property ProxyScriptURL : ustring read FProxyScriptURL write SetProxyScriptURL; + property ProxyByPassList : ustring read FProxyByPassList write SetProxyByPassList; published property OnTextResultAvailable : TOnTextResultAvailableEvent read FOnTextResultAvailable write FOnTextResultAvailable; @@ -725,7 +723,6 @@ begin FCookiePrefs := CEF_CONTENT_SETTING_ALLOW; FImagesPrefs := CEF_CONTENT_SETTING_ALLOW; FZoomStep := ZOOM_STEP_DEF; - FWindowName := ''; {$IFDEF MSWINDOWS} FOldBrowserCompWndPrc := nil; @@ -997,9 +994,9 @@ begin FOnResolvedHostAvailable := nil; end; -function TFMXChromium.CreateBrowser(const aWindowName : string; +function TFMXChromium.CreateBrowser(const aWindowName : ustring; const aContext : ICefRequestContext; - const aCookiesPath : string; + const aCookiesPath : ustring; aPersistSessionCookies : boolean) : boolean; var TempCookieManager : ICefCookieManager; @@ -1049,9 +1046,9 @@ end; {$IFDEF MSWINDOWS} function TFMXChromium.CreateBrowser( aParentHandle : HWND; aParentRect : TRect; - const aWindowName : string; + const aWindowName : ustring; const aContext : ICefRequestContext; - const aCookiesPath : string; + const aCookiesPath : ustring; aPersistSessionCookies : boolean) : boolean; var TempCookieManager : ICefCookieManager; @@ -1272,7 +1269,7 @@ begin end; end; -procedure TFMXChromium.GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : string); +procedure TFMXChromium.GetPrintPDFSettings(var aSettings : TCefPdfPrintSettings; const aTitle, aURL : ustring); begin if (FPDFPrintOptions <> nil) then begin @@ -1508,7 +1505,7 @@ begin Result := 0; end; -function TFMXChromium.GetRequestContextCache : string; +function TFMXChromium.GetRequestContextCache : ustring; begin if Initialized then Result := FBrowser.host.RequestContext.CachePath @@ -1549,7 +1546,7 @@ begin Result := FInitialized and not(FClosing) and (FBrowser <> nil); end; -function TFMXChromium.GetDocumentURL : string; +function TFMXChromium.GetDocumentURL : ustring; var TempFrame : ICefFrame; begin @@ -1755,7 +1752,7 @@ begin end; end; -procedure TFMXChromium.SetProxyServer(const aValue : string); +procedure TFMXChromium.SetProxyServer(const aValue : ustring); begin if (FProxyServer <> aValue) then begin @@ -1773,7 +1770,7 @@ begin end; end; -procedure TFMXChromium.SetProxyUsername(const aValue : string); +procedure TFMXChromium.SetProxyUsername(const aValue : ustring); begin if (FProxyUsername <> aValue) then begin @@ -1782,7 +1779,7 @@ begin end; end; -procedure TFMXChromium.SetProxyPassword(const aValue : string); +procedure TFMXChromium.SetProxyPassword(const aValue : ustring); begin if (FProxyPassword <> aValue) then begin @@ -1791,7 +1788,7 @@ begin end; end; -procedure TFMXChromium.SetProxyScriptURL(const aValue : string); +procedure TFMXChromium.SetProxyScriptURL(const aValue : ustring); begin if (FProxyScriptURL <> aValue) then begin @@ -1800,7 +1797,7 @@ begin end; end; -procedure TFMXChromium.SetProxyByPassList(const aValue : string); +procedure TFMXChromium.SetProxyByPassList(const aValue : ustring); begin if (FProxyByPassList <> aValue) then begin @@ -1809,7 +1806,7 @@ begin end; end; -procedure TFMXChromium.SetCustomHeaderName(const aValue : string); +procedure TFMXChromium.SetCustomHeaderName(const aValue : ustring); begin if (FCustomHeaderName <> aValue) then begin @@ -1818,7 +1815,7 @@ begin end; end; -procedure TFMXChromium.SetCustomHeaderValue(const aValue : string); +procedure TFMXChromium.SetCustomHeaderValue(const aValue : ustring); begin if (FCustomHeaderValue <> aValue) then begin @@ -2122,7 +2119,7 @@ begin end; end; -function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : boolean) : boolean; +function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : boolean) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2152,7 +2149,7 @@ begin end; end; -function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : string; aValue : integer) : boolean; +function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; aValue : integer) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2177,7 +2174,7 @@ begin end; end; -function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : string; const aValue : double) : boolean; +function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName : ustring; const aValue : double) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2202,7 +2199,7 @@ begin end; end; -function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : string) : boolean; +function TFMXChromium.UpdatePreference(const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean; var TempError : ustring; TempValue : ICefValue; @@ -2558,7 +2555,7 @@ begin Result := assigned(FOnFindResult); end; -procedure TFMXChromium.doTextResultAvailable(const aText : string); +procedure TFMXChromium.doTextResultAvailable(const aText : ustring); begin if assigned(FOnTextResultAvailable) then FOnTextResultAvailable(self, aText); end; diff --git a/source/uFMXWindowParent.pas b/source/uFMXWindowParent.pas index 2a9a56b2..b07d28b3 100644 --- a/source/uFMXWindowParent.pas +++ b/source/uFMXWindowParent.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/source/uFMXWorkScheduler.pas b/source/uFMXWorkScheduler.pas index d9d47de5..99d5b80d 100644 --- a/source/uFMXWorkScheduler.pas +++ b/source/uFMXWorkScheduler.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* diff --git a/source/uOLEDragAndDrop.pas b/source/uOLEDragAndDrop.pas index b7cea723..306d5362 100644 --- a/source/uOLEDragAndDrop.pas +++ b/source/uOLEDragAndDrop.pas @@ -10,7 +10,7 @@ // For more information about CEF4Delphi visit : // https://www.briskbard.com/index.php?lang=en&pageid=cef // -// Copyright © 2018 Salvador Díaz Fau. All rights reserved. +// Copyright © 2018 Salvador Diaz Fau. All rights reserved. // // ************************************************************************ // ************ vvvv Original license and comments below vvvv ************* @@ -37,6 +37,10 @@ unit uOLEDragAndDrop; +{$IFDEF FPC} + {$MODE OBJFPC}{$H+} +{$ENDIF} + {$I cef.inc} interface