精华内容
下载资源
问答
  • CEF4Delphi

    2020-09-25 13:23:52
    1、下载CEF4Delphi 2、下载CEF4Delphi相关的环境(dll、pak等文件),有两个版本win32【D7】、win64【fmx】. 3、解压CEF4Delphi到3rd组件文件夹下【根据个人情况】 4、解压cef_binary_3.3626.1891.g52be333_...
  • CEF4Delphi是在Delphi 10.4.1上开发和测试的,并且已经在Delphi 7,Delphi XE,Delphi 10,Delphi 10.2,Delphi 10.3和Lazarus 2.0.10 / FPC 3.2.0中进行了测试。 CEF4Delphi包括VCL,FireMonkey(FMX)和Lazarus...
  • 很不错的使用delphi开发web浏览器的入门教材!!!
  • CEF4Delphi-master.zip

    2019-08-11 19:45:40
    CEF4Delphi-master,CEF4Delphi-master,CEF4Delphi-master,
  • CEF4Delphi控件

    2018-06-19 10:49:26
    Delphi开发Chromium谷歌内核浏览器 Delphi开发Chromium谷歌内核浏览器控件,支持Delphi 7- Delphi 10.2 亲自测试调试安装正常。内有详细帮助文档,方便查阅! Chromium32位框架(必须的,重要,详细查阅帮助文档) ...
  • delphi浏览器控件 Chromium,含demo、源码,chrome内核,与360安全浏览器等同内核,需先安装google Chrom浏览器,支持最新H5技术,developed ... CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components。
  • cef4delphi-master

    2017-06-06 20:42:53
    CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi. CEF4Delphi is based on DCEF3, made by Henri Gourvest. The ...
  • CEF4Delphi uses CEF 74.1.19 which includes Chromium 74.0.3729.157 支持MP3播放的X64支持文件!
  • CEF4Delphi uses CEF 74.1.19 which includes Chromium 74.0.3729.157 支持MP3播放的X32支持文件!
  • cef4delphi 下载地址:https://github.com/salvadordf/CEF4Delphi http://download.csdn.net/detail/bants/9862730 cef3 binaris : 32bit -> ...
  • CEF4Delphi(CEF 78.3.1).rar

    2019-11-08 20:47:49
    配合 cef_binary_78.3.1 与 chromium-78.0.3904.87的delphi库。更好的在delphi中支持mp4等音视频资源。
  • CEF4Delphi 是Salvador Díaz Fau创建的一个开源项目,用于在基于Delphi或LaZARUS/FPC的应用程序中嵌入基于Chromium的浏览器。 CEF4Delphi使用的CEF3二进制文件
  • CEF4Delphi200524

    2020-11-28 15:37:05
    CEF4Delphi200524
  • CEF4Delphi是由Salvador Díaz Fau创建的一个开源项目,用于在基于Delphi或Lazarus/FPC的应用程序中嵌入基于谷歌内核。本下载包括了win32/win64运行支持包。安装使用方法: 解压后把CEF4Delphi的source目录添加到...
  • CEF4Delphi组件 87.1.6版

    2020-11-24 16:09:09
    CEF4Delphi是由Salvador Díaz Fau创建的一个开源项目,用于在基于Delphi或Lazarus/FPC的应用程序中嵌入基于谷歌内核。 其对应的运行框架下载: win64 https://download.csdn.net/download/bestyellow/13184116 ...
  • CEF4Delphi-80.0.3987.163.zip

    2020-04-20 10:26:37
    CEF4Delphi是由SalvadorDíazFau创建的一个开源项目,用于将基于Chromium的浏览器嵌入使用Delphi或Lazarus / FPC制作的应用程序中。 CEF4Delphi基于Henri Gourvest制造的DCEF3。DCEF3的原始许可证仍适用于CEF4...
  • Cef4Delphi Help

    2018-08-27 09:16:25
    CEF4Delphi 是由 SalvadorDíazFau 创建的一个开源项目,用于在基于Delphi的应用程序中嵌入基于Chromium的浏览器。
  • 【阳光有点冷Delphi系列】 D10.3 Rio可用谷歌控件 CEF4Delphi DcefBrowser TChromeTabs JS与网页元素交互控制实例源码 本人在DelphiXE10.3下亲自测试成功!
  • CEF4Delphi.rar

    2019-07-05 14:06:40
    最新的CEF4Delphi控件分享,含Demo和源代码,亲测在Delphi10.2.3上使用正常。那些收几十个C币的太过分了
  • CEF4Delphi_77.1.18

    2019-10-26 18:27:40
    配合 cef 77.1.18+chromium-77.0.3865.120_windows32的delphi库。更好的在delphi中支持mp4等音视频资源。
  • 支持MP3播放的delphi浏览器开源控件开发包全套(含X32和X64支持文件)CEF4Delphi uses CEF 74.1.19 which includes Chromium 74.0.3729.157 这是2019年6月6日最新版本!内附源码!位于CEF4Delphi-master\demos\...
  • Windows 32位版本的CEF3库86.0.14。Chromium版本:86.0.4240。编译时加入ffmpeg支持,可以播放mp3, mp4, 支持h.264/aac。并发修改为16,可以自己访问html5test.com验证。64位及含pdb文件的请去百度盘下载。 百度盘:...
  • Windows 32位版本的CEF3库85.3.6。Chromium版本:85.0.4183.102。编译时加入ffmpeg支持,可以播放mp3, mp4, 支持h.264/aac。并发修改为16,可以自己访问html5test.com验证。64位及含pdb文件的请去百度盘下载。 百度...
  • CEF4Delphi初识

    2020-12-23 07:10:10
    代码模块与职责所有的代码都在src目录下,这会导致一上手的时候无法快速划分模块,不便于理解,如果分类然后放文件夹就会好一些。最关键的部分在于uCEFApplication,是和dll链接的部分...除了cef相关的接口外,还...

    代码模块与职责

    所有的代码都在src目录下,这会导致一上手的时候无法快速划分模块,不便于理解,如果分类然后放文件夹就会好一些。

    最关键的部分在于uCEFApplication,是和dll链接的部分

    uCEFInterfaces.pas,可以在这个文件内找到所有关于接口类型的声明,抽象了基本类型使用的接口,结构清晰。几乎是个功能都能找到对应的接口。和cef提供的接口有高度一致性。除了cef相关的接口外,还有自定义的一些工具接口。

    uCEFClient.pas,继承自ICefClient,用于实现获取Handler的接口

    uCEFTypes.pas,这个文件声明了大量的类型,但是不知道是不是所有的类型声明都在这里面。

    uCEFChromium.pas,存放了TChromium的类型声明,是实现功能的关键类。

    uCEFLoadHandler,存放了loadHandler相关类型,回调处理器的一个具体实现,还有很多其他的handler。

    uCEFApplication.pas是核心,涉及到关键部分,有关键的类TCefApplication,加载了dll并获取函数,是使用CEF4Delphi的入口。

    关键类型和关键接口

    ICefBrowser:主要是浏览器级别的接口,获取frame,后退前进,中断加载等接口(浏览器进程的功能接口);

    ICefFrame:加载网页的对象,LoadUrl功能就是它提供的。可以看成加载网页的那个frame。针对于网页级别的接口(加载网页,复制粘贴等在网页级别的操作接口);

    ICefClient:接口,提供获取各种各样Handler的接口。其中Handler是回调处理器;

    IChromiumEvents:关键接口,用于执行浏览器的关键操作,和handler回调处理器一起工作,实现连接libcef.dll的事件传递,该接口是自定义接口,非cef接口;

    附件区域

    事件传递流程

    libcef.dll中注册的回调事件是如何通知到TChromium对象的呢?

    在文件uCEFChromium.pas中,TChromium对象的常用工作流程CreateBrowser,会进行handler的注册

    function TChromium.CreateBrowser( aParentHandle : HWND;

    aParentRect : TRect;

    const aWindowName : ustring;

    const aContext : ICefRequestContext;

    const aExtraInfo : ICefDictionaryValue) : boolean;

    begin

    Result := False;

    try

    // GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser

    // even if you use a custom request context.

    // If you create a browser in the initialization of your app, make sure you call this

    // function when GlobalCEFApp.GlobalContextInitialized is TRUE.

    // Use the GlobalCEFApp.OnContextInitialized event to know when

    // GlobalCEFApp.GlobalContextInitialized is set to TRUE.

    if not(csDesigning in ComponentState) and

    not(FClosing) and

    (FBrowser = nil) and

    (FBrowserId = 0) and

    (GlobalCEFApp <> nil) and

    GlobalCEFApp.GlobalContextInitialized and

    CreateClientHandler(aParentHandle = 0) then

    begin

    GetSettings(FBrowserSettings);

    InitializeWindowInfo(aParentHandle, aParentRect, aWindowName);

    if GlobalCEFApp.MultiThreadedMessageLoop then

    Result := CreateBrowserHost(@FWindowInfo, FDefaultUrl, @FBrowserSettings, aExtraInfo, aContext)

    else

    Result := CreateBrowserHostSync(@FWindowInfo, FDefaultUrl, @FBrowserSettings, aExtraInfo, aContext);

    end;

    except

    on e : exception do

    if CustomExceptionHandler('TChromium.CreateBrowser', e) then raise;

    end;

    end;

    其中就有使用到CreateClientHandler这个函数(这里的Client说的就是继承自ICefClient类型,是否和cef的client类似还有待商榷) 而CreateClientHandler会调用TCustomClientHandler.Create(Self);创建TCustomClientHandler的对象,而且这个函数的传参就是TChromium这个对象自身(因为TChromium继承自IChromiumEvents表示event处理机),见下述代码

    function TChromium.CreateClientHandler(aIsOSR : boolean) : boolean;

    begin

    Result := False;

    try

    if (FHandler = nil) then

    begin

    FIsOSR := aIsOsr;

    FHandler := TCustomClientHandler.Create(Self);

    Result := True;

    end;

    except

    on e : exception do

    if CustomExceptionHandler('TChromium.CreateClientHandler', e) then raise;

    end;

    end;

    TCustomClientHandler的对象在构造的同事会再创建一堆handler的对象(我jio得TCustomClientHandler像是一个封装,封装了多个handler并对它们进行管理),以其中的OnLoadError为例(这个事件是当加载一个网页失败的时候会触发),TCustomClientHandler会创建一个TCustomLoadHandler类型的对象(当然依旧是把TChromium对象传递过去)

    constructor TCustomClientHandler.Create(const events : IChromiumEvents; aDevToolsClient : boolean);

    begin

    inherited Create;

    InitializeVars;

    FEvents := Pointer(events);

    if (events <> nil) then

    begin

    if aDevToolsClient then

    begin

    if events.MustCreateKeyboardHandler then FKeyboardHandler := TCustomKeyboardHandler.Create(events);

    end

    else

    begin

    if events.MustCreateLoadHandler then FLoadHandler := TCustomLoadHandler.Create(events);

    if events.MustCreateFocusHandler then FFocusHandler := TCustomFocusHandler.Create(events);

    if events.MustCreateContextMenuHandler then FContextMenuHandler := TCustomContextMenuHandler.Create(events);

    if events.MustCreateDialogHandler then FDialogHandler := TCustomDialogHandler.Create(events);

    if events.MustCreateKeyboardHandler then FKeyboardHandler := TCustomKeyboardHandler.Create(events);

    if events.MustCreateDisplayHandler then FDisplayHandler := TCustomDisplayHandler.Create(events);

    if events.MustCreateDownloadHandler then FDownloadHandler := TCustomDownloadHandler.Create(events);

    if events.MustCreateJsDialogHandler then FJsDialogHandler := TCustomJsDialogHandler.Create(events);

    if events.MustCreateLifeSpanHandler then FLifeSpanHandler := TCustomLifeSpanHandler.Create(events);

    if events.MustCreateRenderHandler then FRenderHandler := TCustomRenderHandler.Create(events);

    if events.MustCreateRequestHandler then FRequestHandler := TCustomRequestHandler.Create(events);

    if events.MustCreateDragHandler then FDragHandler := TCustomDragHandler.Create(events);

    if events.MustCreateFindHandler then FFindHandler := TCustomFindHandler.Create(events);

    if events.MustCreateAudioHandler then FAudioHandler := TCustomAudioHandler.Create(events);

    end;

    end;

    end;

    在文件uCEFLoadHandler.pas中,则定义了相关函数

    procedure TCustomLoadHandler.OnLoadError(const browser : ICefBrowser;

    const frame : ICefFrame;

    errorCode : TCefErrorCode;

    const errorText : ustring;

    const failedUrl : ustring);

    begin

    if (FEvents <> nil) then IChromiumEvents(FEvents).doOnLoadError(browser, frame, errorCode, errorText, failedUrl);

    end;

    其中FEvents就是TChromium的对象(类型转换后调用),这样就把TChromium对象的事件处理函数连接到这里来了。

    之后再往前追溯。是如何把delphi的函数注册给C接口的dll的。在文件uCEFLoadHandler.pas中,有下面这么一个函数,命名风格和delphi截然不同,初步怀疑就是它被注册的

    procedure cef_load_handler_on_load_error( self : PCefLoadHandler;

    browser : PCefBrowser;

    frame : PCefFrame;

    errorCode : TCefErrorCode;

    const errorText : PCefString;

    const failedUrl : PCefString); stdcall;

    var

    TempObject : TObject;

    begin

    TempObject := CefGetObject(self);

    if (TempObject <> nil) and (TempObject is TCefLoadHandlerOwn) then

    TCefLoadHandlerOwn(TempObject).OnLoadError(TCefBrowserRef.UnWrap(browser),

    TCefFrameRef.UnWrap(frame),

    errorCode,

    CefString(errorText),

    CefString(failedUrl));

    end;

    它唯一被引用的地方如下

    constructor TCefLoadHandlerOwn.Create;

    begin

    inherited CreateData(SizeOf(TCefLoadHandler));

    with PCefLoadHandler(FData)^ do

    begin

    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;

    inherited CreateData(SizeOf(TCefLoadHandler));代表调用父类的CreateData函数,主要目的是开辟一块内存空间,大小是TCefLoadHandler类型大小那么大的内存空间,而FData就是指向那块内存的地址。

    其中on_load_error的定义如下on_load_error : procedure(self: PCefLoadHandler; browser: PCefBrowser; frame: PCefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: PCefString); stdcall; 是一个函数对象

    而TCefLoadHandlerOwn则是继承自下面这个类型

    // /include/capi/cef_load_handler_capi.h (cef_load_handler_t)

    TCefLoadHandler = record

    base : TCefBaseRefCounted;

    on_loading_state_change : procedure(self: PCefLoadHandler; browser: PCefBrowser; isLoading, canGoBack, canGoForward: Integer); stdcall;

    on_load_start : procedure(self: PCefLoadHandler; browser: PCefBrowser; frame: PCefFrame; transition_type: TCefTransitionType); stdcall;

    on_load_end : procedure(self: PCefLoadHandler; browser: PCefBrowser; frame: PCefFrame; httpStatusCode: Integer); stdcall;

    on_load_error : procedure(self: PCefLoadHandler; browser: PCefBrowser; frame: PCefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: PCefString); stdcall;

    end;

    根据这里的注释,找到了cef中的c接口描述文件,发现TCefLoadHandler类型和c接口定义的_cef_load_handler_t结构体一致,到此处就基本能确定了,TCefLoadHandler就是和C接口对接的注册函数的类型。

    展开全文
  • CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers CEF4Delphi is based on DCEF3 and fpCEF3. The original license of those projects still applies to ...
  • CEF4Delphi 学习 2018-11-15

    2021-06-12 12:58:38
    begin TempValue := TCefv8ValueRef.NewString('将值从Delphi窗口传入到 JS变量 windows.myval!'); //绑定JS中 window.myval 的值 context.Global.SetValueByKey('mysetval', TempValue, V8_PROPERTY_ATTRIBUTE_...

    1)从 APP将 值传入到  html JS中

    /*APP代码*/

    procedure GlobalCEFApp_OnContextCreated(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context);

    var

    TempValue : ICEFv8Value;

    begin

    TempValue := TCefv8ValueRef.NewString('将值从Delphi窗口传入到 JS变量 windows.myval!');

    //绑定JS中  window.myval 的值

    context.Global.SetValueByKey('mysetval', TempValue, V8_PROPERTY_ATTRIBUTE_NONE);

    end;

    /*JS代码*/

    function myFunction() {

    alert(window.mysetval);

    }

    2) APP注册一个函数myfunc ,JS调用该函数并传入入参,APP实现函数的方法。唤醒APP

    //windows全部函数注册

    procedure GlobalCEFApp_OnContextCreated(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context);

    var

    TempHandler  : ICefv8Handler;

    TempFunction : ICefv8Value;

    begin

    TempHandler  := TMyV8Handler.Create;

    TempFunction := TCefv8ValueRef.NewFunction('myfunc', TempHandler);    //能够通过JS  wiondws.myfunc 调用

    context.Global.SetValueByKey('myfunc', TempFunction, V8_PROPERTY_ATTRIBUTE_NONE);  //绑定myfunc

    end;

    //具体APP定义

    type

    TMyV8Handler = class(TCefv8HandlerOwn)

    protected

    function Execute(const name: ustring; const obj: ICefv8Value;

    const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean; override;

    end;

    implementation

    function TMyV8Handler.Execute(const name      : ustring;     const obj      : ICefv8Value;     const arguments : TCefv8ValueArray;

    var  retval    : ICefv8Value;  var  exception : ustring): Boolean;

    var

    i:integer;

    begin

    if (name = 'myfunc') then

    begin

    i:= length(arguments) ; // arguments[0].IsFunction

    retval := TCefv8ValueRef.NewString('My Value!arguments 参数 length '+inttostr(i)

    +#13#10+ arguments[0].GetStringValue //arguments[0].IsString    参数1 字符串,通过JS传入进来

    +#13#10+ formatdatetime('yyyymmdd-hh:mm:ss',now)

    );

    Result := True;

    end

    else

    Result := False;

    end;

    3)APP 唤醒网页,执行JS.

    uses

    uCEFProcessMessage, uMyV8Handler;

    //注册

    procedure GlobalCEFApp_OnContextCreated(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context);

    var

    TempHandler  : ICefv8Handler;

    TempFunction : ICefv8Value;

    begin

    TempHandler  := TMyV8Handler.Create;

    TempFunction := TCefv8ValueRef.NewFunction('register', TempHandler);

    //注册全局windows.register 操作方法 ,浏览器唤醒 app

    context.Global.SetValueByKey('register', TempFunction, V8_PROPERTY_ATTRIBUTE_NONE);

    end;

    //监听,执行

    procedure GlobalCEFApp_OnProcessMessageReceived(const browser      : ICefBrowser;

    sourceProcess : TCefProcessId;

    const aMessage      : ICefProcessMessage;

    var  aHandled      : boolean);

    var

    arguments: TCefv8ValueArray;

    Tempval : ICefv8Value;

    begin

    if (aMessage.name = EXECFUNCTION_MSGNAME) then

    begin

    Tempval :=TCefv8ValueRef.NewString('参数1');

    if (GlobalCallbackFunc <> nil) then

    GlobalCallbackFunc.ExecuteFunctionWithContext(GlobalCallbackContext, nil, [Tempval]);

    aHandled := True;

    end

    else

    aHandled := False;

    end;

    procedure TJSExecutingFunctionsFrm.btn1Click(Sender: TObject);

    var

    TempMsg : ICefProcessMessage;

    arguments: TCefv8ValueArray;

    begin

    //方法1 找到方法,并进行调用

    //找到注册的myfunc方法

    TempMsg := TCefProcessMessageRef.New(EXECFUNCTION_MSGNAME);

    //向浏览器发消息myfunc

    Chromium1.SendProcessMessage(PID_RENDERER, TempMsg);

    //  GlobalCEFApp_OnProcessMessageReceived,去唤起调用,实现如何调用

    end;

    /* JS代码*/

    function myFunc(s) {

    alert("This is myFunc executing!成功通过app唤醒网页,myfunc("+s+") ");

    }

    function RegisterJSFunction() {

    window.register(myFunc);

    }

    展开全文
  • CEF4 for DELPHI

    2018-07-30 17:08:28
    DELPHI 开发 浏览器,不再使用自带的webbrowser(IE),使用GOOGLE CHROME内核,不必安装CHROME.
  • CEF4Delphi取网页元素时碰到ElementInnerText里含有""比如网页源码里是"内容"取出来显示就变成"内容?"搜索大部分是说把""替换成其它字符即可但实际操作怎么也替换不了,就算变量为AnsiString也不行最后用了以下方法...

    用CEF4Delphi取网页元素时碰到ElementInnerText里含有" "

    比如网页源码里是"内容 "取出来显示就变成"内容?"

    搜索大部分是说把" "替换成其它字符即可

    但实际操作怎么也替换不了,就算变量为AnsiString也不行

    最后用了以下方法解决

    参考网页:

    https://blog.csdn.net/qq_29683707/article/details/80860904

    关于&nbsp空格转成正常空格‘ ’的方法

    1>先把字符串转码 let data = encodeURI(要转化的值)

    2>接下来替换掉&nbsp空格 data = data .replace(/%C2%A0/g,'%20');

    3>再转回来就ok了 data = decodeURI(data);

    要用到encodeURI,找到Delphi版的

    http://www.delphitop.com/html/zifuchuan/2599.html

    方法1

    user  Httpapp;

    HttpEncode(AnsiToUtf8('中文'));

    方法2

    uses

    IdURI;

    ..

    begin

    S := TIdURI.URLEncode(str);

    //

    S := TIdURI.URLDecode(str);

    end;

    使用方法2的TIdURI.URLEncode,程序出错,原因不明

    使用方法1成功

    直接 TmpTitle:= HTTPEncode(TmpTitle); 即可

    但编译器提示警告

    [dcc32 Warning] uMiniBrowser.pas(469): W1000 Symbol 'HTTPEncode' is deprecated: 'Use TNetEncoding.URL.Encode'

    [dcc32 Warning] uMiniBrowser.pas(471): W1000 Symbol 'HTTPDecode' is deprecated: 'Use TNetEncoding.URL.Decode'

    [dcc32 Hint] uMiniBrowser.pas(469): H2443 Inline function 'HTTPEncode' has not been expanded because unit 'System.NetEncoding' is not specified in USES list

    [dcc32 Hint] uMiniBrowser.pas(471): H2443 Inline function 'HTTPDecode' has not been expanded because unit 'System.NetEncoding' is not specified in USES list

    意思是HTTPEncode和HTTPDecode已经弃用请用TNetEncoding.URL.Encode和TNetEncoding.URL.Decode

    点进HTTPEncode看看

    function HTTPDecode(const AStr: string): string;beginResult :=TNetEncoding.URL.Decode(AStr);end;function HTTPEncode(const AStr: string): string;beginResult :=TNetEncoding.URL.Encode(AStr);end;

    其实就直接调用了

    TNetEncoding.URL.Encode

    所在单元是 System.NetEncoding

    展开全文
  • 什么是CEF4DelphiCEF4Delphi是由Salvador Díaz Fau创建的一个开源项目,用于在基于Delphi或Lazarus/FPC的应用程序中嵌入基于谷歌内核查看更多关于 内核 的文章(Chromium查看更多关于 Chromium 的文章-based)的...

    什么是CEF4Delphi

    CEF4Delphi是由Salvador Díaz Fau创建的一个开源项目,用于在基于Delphi或Lazarus/FPC的应用程序中嵌入基于谷歌内核

    查看更多关于 内核 的文章
    Chromium
    查看更多关于 Chromium 的文章
    -based)的浏览器。

    Github地址

    https://github.com/salvadordf/CEF4Delphi

    控件下载

    控件下载

    控件安装

    在最新版本的Delphi中构建和安装CEF4delphi

    • 1、下载CEF4Delphi
      查看更多关于 CEF4Delphi 的文章
      的最新版本。
    • 2、将CEF4Delphi解压到一个目录中,并确保您的用户在该目录中拥有写入权限。
    • 3、运行Delphi。
    • 4、把CEF4Delphi的source目录添加到Delphi的开发环境中去,
      在开发环境导航栏中点击Tools->Options-> Environment Options->Delphi Options->Library,
      选择一个正确的平台(32或64),把目录添加到Library path中。

    5、如果您只想要VCL组件,请从Delphi打开文件CEF4Delphi.dproj文件。如果您想要VCL和FireMonkey (FMX)组件,请打开CEF4Delphi_FMX.dproj。6、在项目管理器Project manager中右键CEF4Delphi.bpl,点击  Build 选项。7、在项目管理器Project manager中右键CEF4Delphi.bpl,点击  Install 选项。

    在Delphi7中构建和安装CEF4delphi

    • 1、下载CEF4Delphi的最新版本。
    • 2、将CEF4Delphi解压到一个目录中,并确保您的用户在该目录中拥有写入权限。
    • 3、运行Delphi。
    • 4、把CEF4Delphi的source目录添加到Delphi的开发环境中去,
      在开发环境导航栏中点击Tools->Options-> Environment Options->Delphi Options->Library,
      选择一个正确的平台(32或64),把目录添加到Library path中。
    • 5、在Delphi中打开CEF4Delphi_D7.dpk文件。
    • 6、点击 Compile 编译按钮。
    • 7、点击 Install 安装按钮。

    在Lazarus中构建和安装CEF4delphi

    • 1、下载CEF4Delphi的最新版本。
    • 2、将CEF4Delphi解压到一个目录中,并确保您的用户在该目录中拥有写入权限。
    • 3、运行Lazarus。
    • 4、在Package->Open Package File (*.lpk)菜单中打开cef4delphi_lazarus.lpk文件
    • 5、在 package窗口点击 Compile 编译按钮
    • 6、点击 Use 按钮,选择 Install 选项。

    支持的操作系统版本

    Google宣布,他们在2015放弃Windows XP支持Chrome。与WindowsXP兼容的最后一个CEF3分支是2623,发布于2016。

    由于CEF4Delphi使用了最新的CEF3分支,它与WindowsXP、WindowsVista、Windows Server 2003和Windows Server 2008不兼容。

    CEF4Delphi需要Windows 7, 8,8.1,10或更高的操作系统。

    如果您需要支持应用程序中的Windows XP和Vista,请使用OLDCEF4Delphi。

    用法

    在首次使用CEF4Delphi之前,强烈建议阅读关于CEF3和 Chromium设计文档的所有信息。

    CEF3使用多个进程,并且运行相同的可执行文件或不同的进程来创建它们。这就是为什么在TApplication运行之前需要对CEF3进行初始化的原因。

    CEF4Delphi使用TCEFApplication类中的GlobalCEFApp简化了所有CEF3 初始化。

    由于TApplication必须只在主进程中初始化和运行,所以有必要创建GlobalCEFApp并调用GlobalCEFApp.StartMainProcess来检测这是否是主进程。

    Delphi应用程序在.Dpr文件中使用此代码:

    要包含CEF4Delphi,您只需将uCEFApplication 和WinApi.Windows添加到USER子句,创建GlobalCEFApp全局变量,调用GlobalCEFApp.StartMainProcess函数和GlobalCEFApp在最后一步中。您还必须添加SetPEFlags指令。

    GlobalCEFApp创建必须在.Dpr文件中,并且对GlobalCEFApp.StartMainProcess 的调用必须在if..then子句中。

    Demo

    以自带Demo为例,打开CEF4Delphi-master->demos->SimpleBrowser,以此为例。双击SimpleBrowser.dpr,编译运行后会显示缺少或多东西,如下图所示。

    原因是缺少Chromium框架,需要先下载框架:https://github.com/salvadordf/CEF4Delphi

    注意:请正确下载相应版本。如果当前应用为32位,下载32位框架;如果当前应用为64位,下载64位框架。并且请只在这里下载,保证控件和框架版本相对应,否则会提示不支持的版本!

    将下载好的文件解压缩,将../Resources文件夹中的内容全部复制到../Release文件夹中,保证为如下图所示布局:

    将这里编译好的SimpleBrowser.exe文件复制到Chromium框架的../Release文件夹中,双击运行,如下图所示:

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 576
精华内容 230
关键字:

cef4delphi