• Delphi中设置Combobox下拉项的宽度

    • 在Delphi中下拉框条目的宽度总是和下拉框的宽度一样,当里面的项目太长时就不能显示全了。其实Windows提供了一个CB_SETDROPPEDWIDTH消息可能定义下拉框窗口的宽度,不知道为什么Delphi一直没有添加这个功能。使用方法很简单,如下:

      SendMessage(cboIndustry.Handle, CB_SETDROPPEDWIDTH, 200, 0);

      第一个参数是下拉框组件的句柄
      第二个参数是要发送的消息
      第三个参数是要设定的宽度
      第四个参数未使用

    • delphi XE10 给程序添加UAC权限

    • 新版本的XE已包含UAC权限设置了,不再有那么多麻烦的设置步骤!
      project-option-application-require administrator

      project-option-application-require-administrator.jpg

      As Invoker : 以当前用户默认的权限运行。
      Highest Available: 以当前用户可以获得的最高权限运行。(非管理员权限也能运行)
      Require Administrator: 以系统管理员权限运行。(非管理员权限不能运行)

    • delphi chrome cef3 控件学习笔记 (五)

    • 一、模拟移动鼠标

      //  SetCursorPos(StrToInt(Edit1.Text),StrToInt(Edit2.Text));  //相对屏幕位置
        SetCursorPos(Self.Left+chrm1.Left+strtoint(Edit1.Text),Self.Top+chrm1.Top+strtoint(Edit2.Text));  //相对Chrm位置

          mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//模拟按下鼠标左键。
        mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模拟放开鼠标左键。
        keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0); //按下SHIFT键。
        keybd_event(0x52,MapVirtualKey(0x52,0),0,0);//按下R键。
        keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);//放开R键。
        keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);//放开SHIFT键。

      阅读剩余部分...

    • delphi chrome cef3 控件学习笔记 (四)

    • 一、遍历网页元素并点击JS:

      下面代码为找到淘宝宝贝页面,成交记录元素的代码:

      for(var i=0;i<document.getElementsByTagName("A").length;i++){var a;
             var d=document.getElementsByTagName("A")[i];
             var s=document.getElementsByTagName("A")[i].innerHTML;
             if(s!=null){
             if(s.indexOf("成交记录")>-1){
                  a=document.getElementsByTagName("A")[i];alert(a.innerHTML);
                 ClickElement(a);  //由于chromium控件元素不支持click事件,所以需要自己重新绑定事件

                 break;
             }}}

      阅读剩余部分...

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

    • 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 chrome cef3 控件学习笔记 (二)

    • 用Tchromium替换webbrowser

        用惯了EmbeddedWB,不想换,但是IE内核一直存在内存泄漏问题,没办法,只有寻找替代品了。

        要把用习惯的EmbeddedWB换成完全不一样的TChromium,有点挑战,特别是在资料不多,英语没过三级的情况下。未来趋势是这样,只有慢慢啃了。

        首先,想到的是跨域,如果不能跨域,就没办法替代手上的成品。TChromium的跨域比想像中的简单,直接通过chrm.Browser.GetFrameNames(list);//list:tstringList;取得各个IFrame/Frame的名称(所谓名称不是指name属性,只是一个标识,在有name时,返回name,没有name时,ID 也行,都没有时,自动生成一个唯一名称),如:ff //这个是一个框架的ID

      阅读剩余部分...

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

    • CEF简介: 
         嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去。

        它的设计思想政治就是易用且兼顾性能。CEF基本的框架包含C/C++程序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和Chromium&Webkit的操作细节。它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户插件,协议,javascript对象以及javascript扩展,宿主程序可以随意地控件资源下载,导航,下下文内容和打印等,并且可以跟Google Chrome浏览器一起,支持高性能和Html5 技术,这段代码你可以在[test]文件夹下面的cefclient工程里面看到。

      阅读剩余部分...

    • chromium中的URL加载过程解析

    • chromium内核代码一直在更新,最近又有了大动作。尤其是IPC通信部分,因为性能问题,传统的IPC已经被弃用,虽然不是完全舍弃,但除了严重依赖于时序关系的Navigate相关消息外,其他的所有IPC::Channel都被替换成了mojom。这就导致以前的FrameMsg_Navigate、ResourceHostMsg_RequestSource等IPC消息在chromium代码中不再可见了。因为大体的流程没有改变,有兴趣的可以回顾一下老罗的文章,这里只是从头梳理一下chromium69版本内核代码加载一个url的整个过程,以及该过程中涉及到的一些重要的类和方法。

      阅读剩余部分...

    • 生成Mac icns与Windows ico

    • 场景:在开发软件时候,出现要mac平台和windows平台下分别要相应格式的图标.而且是点击打开该icon文件后里面是合成了多个尺寸的“列表”图的集合。

      以下以insong.png为例生成insong.icns以及insong.ico.
      注:由于笔者是Mac系统的程序员一枚,在解决这个问题的时候,搜索了不少方案,尤其是生成windows的icn格式那折腾了较久。故留此足迹,以后备忘。

      阅读剩余部分...

Powered by Typecho)))   ICP:蜀ICP备05009250号