(转)delphi chrome cef3 控件学习笔记 (三)

实现拖动无标题栏 CEF的方法一 :hook方法 目录 一、实现方式 1、定义全局变量 2、在CEF父窗口初始化时,赋值父窗口句柄 3、HOOK函数 4、设置HOOK函数 1)先要获取CEF窗口句柄: 2)然后获得CEF线程ID 3)最后设置CEF线程的HOOK 5、处理HOOK到的CEF鼠标消息 如下图所示,使用CEF实现视频播放, 同时CEF是无标题栏的,下面通过HOOK的方式 实现无标题栏CEF拖动 一、实现方式 1、定义全局变量 HHOOK g_hHook = NULL; HWND hWndMain. 阅读详情

Delphi与JS的交互问题:

一、执行简单的JS

上一篇已经讲过:

chrm1.browser.MainFrame.ExecuteJavaScript('alert("abc");','about:blank',0);
chrm1.browser.MainFrame.ExecuteJavaScript('function aaa(){alert("abc");}aaa();','about:blank',0);


二、注入自定义的JS

首先必须在网页加载完成之后,才可以执行,不能为空页面!

str_js := 'var oScript = document.createElement( "script" );oScript.id = "sid";alert(oScript.id);';
chrm1.browser.MainFrame.ExecuteJavaScript(str_js,'about:blank',0);


三、delphi与JS交互(通过ceflib实现)

Cef3的Demo里面,有一个cefclient的例子,可以看下,关键代码:


TExtension = class(TCefv8HandlerOwn)
  private
    FTestParam: ustring;
  protected
    function Execute(const name: ustring; const obj: ICefv8Value;
      const arguments: TCefv8ValueArray; var retval: ICefv8Value;
      var exception: ustring): Boolean; override;  //重写Execute事件
  end;
//通过不同的name,执行不同的动作
function TExtension.Execute(const name: ustring; const obj: ICefv8Value;
  const arguments: TCefv8ValueArray; var retval: ICefv8Value;
  var exception: ustring): Boolean;
begin
  if(name = 'SetTestParam') then
  begin
    // Handle the SetTestParam native function by saving the string argument
    // into the local member.
    if (Length(arguments) <> 1) or (not arguments[0].IsString) then
    begin
      Result := false;
      Exit;
    end;
    FTestParam := arguments[0].GetStringValue;  //多个参数arguments[i].GetStringValue 依次类推
    Result := true;
  end
  else if(name = 'GetTestParam') then
  begin
    // Handle the GetTestParam native function by returning the local member
    // value.
    retval := TCefv8ValueRef.CreateString(Ftestparam);
    Result := true;
  end
  else if (name = 'GetTestObject') then
  begin
    // Handle the GetTestObject native function by creating and returning a
    // new V8 object.
    retval := TCefv8ValueRef.CreateObject(nil);
    // Add a string parameter to the new V8 object.
    retval.SetValueByKey('param', TCefv8ValueRef.CreateString(
        'Retrieving a parameter on a native object succeeded.'));
    // Add a function to the new V8 object.
    retval.SetValueByKey('GetMessage',
        TCefv8ValueRef.CreateFunction('GetMessage', Self));
    Result := true;
  end
  else if(name = 'GetMessage') then
  begin
    // Handle the GetMessage object function by returning a string.
    retval := TCefv8ValueRef.CreateString(
        'Calling a function on a native object succeeded.');
    Result := true;
  end else
    Result := false;
end;
{ 注册JS扩展 }

procedure RegisterExtension;
var
  Code: string;
begin
  Code :=
    'var cef;if(!cef)cef={};if(!cef.taobao)cef.taobao={};(function(){cef.taobao.test_object=function(){native function GetTestObject();return GetTestObject();};})();';
  if Code <> '' then
  try
    CefRegisterExtension('example/v8',Code,TExtension.Create as ICefv8Handler);
  except
  end;
end;

在FormCreate中注册类:
RegisterExtension;


调用实例:


chrm1.browser.MainFrame.ExecuteJavaScript('alert("abc");','about:blank',0);
  str_temp := 'function aaa(){var CefObj = new cef.taobao.test_object;'+  //先new一个实例对象
               'CefObj.SetTestParam("abc");var b=CefObj.GetTestParam();alert(b);'+   //设置、获取、输出参数
               '}aaa();';
  chrm1.Browser.MainFrame.ExecuteJavaScript(str_temp,'about:blank',0);
如果要实现多个参数,可以定义个数组替代FTestParam 
  private
    FTestParam : ustring;
    ArrayParam : array of ustring;  //多个参数
关键代码:
if(name = 'SetTestParam') then
  begin
// 原来一个参数的情况
//    if (Length(arguments) <> 1) or (not arguments[0].IsString) then
//    begin
//      Result := false;
//      Exit;
//    end;
//    FTestParam  := arguments[0].GetStringValue;
// 原来一个参数的情况
    SetLength(ArrayParam,Length(arguments));
    for  i := 0 to Length(arguments) - 1 do
    begin
      ArrayParam[i] := arguments[i].GetStringValue;
      if s='' then
        s := ArrayParam[i]
      else
        s  := s+','+ArrayParam[i];
    end;
    FTestParam  := s;
  end
  else if(name = 'GetTestParam') then
  begin
// 原来一个参数的情况
//    retval := TCefv8ValueRef.CreateString(FTestParam);
// 原来一个参数的情况
    for  i := 0 to Length(ArrayParam) - 1 do
    begin
      if s='' then
        s := ArrayParam[i]
      else
        s  := s+','+ArrayParam[i];
    end;
    retval := TCefv8ValueRef.CreateString(FTestParam);
  end;
这样调用GetTestParam返回的还是一个字符串,多个参数用逗号隔开了而已,可以对其再进行改写即可;
delphi_cef3里程碑版本3.3.2623.1401 这个cef3是支持xp系统的最后版本,有需要基于cef3开发适应xp系统的自定义浏览器插件的朋友可以用. 忘记从哪下载到的了,分享给大家. 亲测好用,发现源码中有极个别接口方法未定义,但是不影响使用,大家可拿去研究 立即下载

相关推荐

Delphi Cef3 谷歌浏览器内核控件 2623版本 完美支持XP系统、FLASH、PDF打印等

Delphi Cef3 谷歌浏览器内核控件 2623版本 完美支持XP系统、FLASH、PDF打印等 支持pdf需要自行放入 pdf.dll 该版本为最后支持xp系统的cef内核版本

Delphi中Chrome Chromium、Cef3学习笔记(四)

一、遍历网页元素并点击JS:转载请注明出处,原文地址:http://blog.youkuaiyun.com/xtfnpgy/article/details/481553231.遍历所有元素var eles=document.all;for(var i=0;i<eles.length;i++){var a; var d=eles[i]; var s...

weixin_34417635的博客 555

delphi TChromium最新版(cef3)

打开demo之前须安装相应版本的package,自己做了一个很简单的demo,速度非常快~~

WinAPI【远程注入】hook注入 Delphi 实例一

(okwary) 小叹的学习园地 线程注入实例: 我们知道在NT及以上操作系统提供了一个函数VirtualAllocEx,利用这个函数我们可以在其它进程中申请一块内存,其定义如下: function VirtualAllocEx( //在其它进程中申请一块内存 hProcess: THandle;// hProcess为要申请内存的进程的句柄 lpAddress: Point...

weixin_30520015的博客 303

Delphi基于cef3(CEF 3.2454.1344)开发

基于cef3(CEF 3.2454.1344)开发适应xp系统的自定义浏览器插件;适用于Delphi7、xe2、xe3、xe5、xe10 支持win32、win64版本

【阳光有点冷Delphi系列】D10.3 Rio可用谷歌控件+CEF4Delphi+DcefBrowser+TChromeTabs+JS网页元素交互实例源码_总裁爹地超给力

【阳光有点冷Delphi系列】 D10.3 Rio可用谷歌控件 CEF4Delphi DcefBrowser TChromeTabs JS与网页元素交互控制实例源码 本人在DelphiXE10.3下亲自测试成功!

delphi chrome cef3 控件

(转)delphi chrome cef3 控件学习笔记 (四) 2016年04月27日 14:19:48 一葉輕舟 阅读数:4177 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/risesoft2012/article/details/51260834 一、遍历网页元素并点击JS: 下面代码为找到淘宝宝贝页面,成交记录元素的代码: ...

Golden_soft的专栏 881

HIDL概述

HIDL背景 Treble 是 Google Android 团队的一项重大项目,意在 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Android 7.x 及更早版本中没有正式的供应商接口,因此设备制造商必须更新大量 Android 代码才能将设备更新到新版 Android 系统: 图1 Treble ...

u013357557的专栏 2万+

【亲测免费】 Delphi浏览器Chrome内核控件 - CEF4Delphi 85.3.9

Delphi浏览器Chrome内核控件 - CEF4Delphi 85.3.9 【下载地址】Delphi浏览器Chrome内核控件-CEF4Delphi85.3.9 本仓库提供了一个基于Delphi的浏览器控件,使用Chrome内核(CEF4Delphi 85.3.9),包含完整的Demo和源码。该控件与360安全浏览器...

gitblog_09758的博客 981

【STM32单片机】RS485通信—基于STM32G474芯片

做项目需要用485通信来控制Go电机参考资料:【【STM32F103C8T6系列】10. 实验例程——485(USART串口)通讯实验】 https://www.bilibili.com/video/BV19w411r7ka/?PDF: STM32G474 开发指南 正点原子 DMG474 开发板教程 第28章485只是物理层,代码逻辑还是UART串口通信,相当于是电路有RS485转换芯片,所以还是用UART串口通信方式。

m0_48808835的博客 3647

安卓设备通过USB串口与STM32单片机通讯之一

这里写自定义目录标题欢迎使用Markdown编辑器`在这里插入代码片`新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器在这里插入代码片 你好下Markdown的基本语法知识。 新的改变 我们对

JGB联合商务组的博客 7244

探索高效开发:CEF4Delphi 85.3.9 - Delphi浏览器Chrome内核控件

探索高效开发:CEF4Delphi 85.3.9 - Delphi浏览器Chrome内核控件 【下载地址】Delphi浏览器Chrome内核控件-CEF4Delphi85.3.9 本仓库提供了一个基于Delphi的浏览器控件,使用Chrome内核(CEF4Delphi 85.3.9),包含完整的Demo和源码。该控件与3...

gitblog_09738的博客 474

元数据管理:DataHub和OpenMetadata对比分析

DataHub和OpenMetadata都试图解决数据编目,搜索,发现,治理和质量方面的相同问题。这两种工具都是出于为需要支持大量数据源、团队和用例的大型组织解决这些问题而诞生的。尽管这些工具在发布历史和成熟度方面略有不同,但它们的功能存在显着重叠。

weixin_38030820的博客 6632

【免费下载】 CEF4Delphi控件最新版下载与使用指南

CEF4Delphi控件最新版下载与使用指南 【下载地址】CEF4Delphi控件最新版下载与使用指南 本仓库提供的是目前为止最新版的CEF4Delphi控件,该控件支持Delphi7,并允许在Delphi中使用Chrome浏览器内核。通过使用该控件,您可以在Delphi应用程序中嵌入现代化的Web浏览器功能 ...

gitblog_09791的博客 1372

ddr3ip核心_DDR3 IP 核配置

DDR3 控制器 IP 核2.DDR3 IP核配置点击 Flow Navigator 面板下的“Project Manager -->IP Catalog”。 在“Memories & Storage Elements -->Memory Interface Generators”分类展开后,可以看到名为“Memory Interface Generator (MIG 7 ...

weixin_33049919的博客 2935

​​光流结合深度学习实现物体运动方向判断

光流计算:提取每一帧视频中像素的运动信息,生成光流图。光流特征提取:通过特定的预处理,将光流图转换为深度学习模型可用的输入格式。深度学习模型设计:构建一个卷积神经网络(CNN)或其他适合的深度学习架构,利用光流特征进行运动方向分类。模型训练与推理:对网络进行训练并使用训练好的模型判断运动方向。光流与深度学习结合的运动方向判断技术在多个领域具有广泛的应用前景。通过光流提取像素级动态信息,并利用深度学习模型学习高层次特征,可以实现高精度的运动检测与方向判断。

matlab_python22的博客 321

Delphi中Chrome

Delphi中Chrome Chromium、Cef3学习笔记(四) 转载lanyus 最后发布于2018-07-21 04:08:00 阅读数 2724 收藏 分类专栏: DELPHI编程 收起 Delphi中Chrome Chromium、Cef3学习笔记(一) 2015年06月25日 13:25:02 阅读数:6421 官方下载地址:https://cefbuilds.com/ 尊重作者原...

weixin_45581396的博客 2205

华为OD机试真题-查找单入口空闲区域(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【查找单入口空闲区域】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 查找单入口空闲区域。

qq_45776114的博客 1268

Delphi开发者的浏览器嵌入终极方案:CEF4Delphi跨平台实战指南

还在为Delphi桌面应用无法原生支持现代Web内容而烦恼吗?传统TWebBrowser控件的兼容性问题让你头疼不已?CEF4Delphi正是为你量身打造的跨平台浏览器嵌入解决方案! ## 1. 开发痛点:为何传统方案无法满足现代需求? Delphi开发者长期面临着一个尴尬局面:内置的TWebBrowser控件基于老旧的IE内核,无法支持HTML5、CSS3等现代Web标准。想要在应用中嵌入Y

gitblog_00384的博客 1099

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

(转)delphi chrome cef3 控件学习笔记 (一)

CEF简介:     嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。   它的设计思想政治就是易用且兼顾性能。CEF基本的框架包含C/C++程序接口,通过本地库的

一葉輕舟的笔记 9094

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CEF详解

Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,也有其他语言的移植版。 因为基于Chromium,所以CEF支持Webkit& Chrome中实现的HTML5的特性,并且在性能上面,也比较接近Chrome。 CEF还提...

顺其自然~专栏 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的chrome(CEF4Delphi)组件

一、准备环境: 1、下载CEF4Delphi 2、下载CEF4Delphi相关的环境(dll、pak等文件),有两个版本win32【D7】、win64【fmx】. 3、解压CEF4Delphi到3rd组件文件夹下【根据个人情况】 4、解压cef_binary_3.3626.1891.g52be333_windows32中Release文件夹和Resources文件夹 5、将Release文件夹和Resources文件夹中的所有文件复制到CEF4Delphi中的bin文件夹下面,如图: 目标:

huang714的专栏 1797

delphi chrome cef3 控件学习笔记 (三)

Delphi与js的交互问题: 一、执行简单的JS 上一篇已经讲过: chrm1.browser.MainFrame.ExecuteJavaScript('alert("abc");','about:blank',0); chrm1.browser.MainFrame.ExecuteJavaScript('function aaa(){alert("abc");}aaa();'

疯流人物 1678

delphi chrome cef3 控件学习笔记 (一)

CEF简介:     嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。   它的设计思想政治就是易用且兼顾性能。CEF基本的框架包含C/C++程序接

疯流人物 1399
上一篇: (转)delphi chrome cef3 控件学习笔记 (二)
下一篇: (转)delphi chrome cef3 控件学习笔记 (四)
一葉輕舟
博客等级 码龄14年 9粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值