![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Delphi
Yothan
在Delphi世界中摸滚打爬……
展开
-
delphi(XE2)实现图片异形窗体,支持摆放控件
网上有较多使用UpdateLayeredWindow函数实现美化的图片异形窗体的代码,一般使用此场景时,对软件界面要求较高。但是实现了图片窗体后,在窗体中摆放不了其他控件,导致这个功能很鸡肋。为解决此问题,本博文中的案例使用两个窗体搭配使用,图片窗口作为背景窗体,放置控件的窗口作为功能性窗体,功能性窗口全透明展示,可实现我们预设的目标。原创 2022-11-22 15:05:33 · 1279 阅读 · 1 评论 -
delphi JDAESExtend中AES-base64解密报错的解决办法
JDAESExtend.pas中封装的与JAVA互通的AES加解密方法,base64模式下解密报错。本文提供了解决这个问题的方法,供有需要的人使用。原创 2022-11-02 14:03:13 · 428 阅读 · 0 评论 -
Delphi XE2实现字符串(base64为UTF-8 编码)的gzip解压
因业务需要,调用服务端接口返回的content内容是加密的,加密流程为:BASE64.encode(ZIP 压缩(xml 明文))。其解密流程为:BASE64.decode(ZIP 解压缩(UTF-8转码))其中的ZIP压缩实际为GZip压缩,两者的压缩方式稍有不同,使用Delphi在解压时就需要不同的方法来处理。查找了各种资料,最终确定使用zipLibEx的源码包+搜索的一些使用技巧可以解压gZip。因为业务需要,本文也加入了base64解密、utf-8转码的一些操作技巧。usesSoap..原创 2021-05-06 16:36:19 · 1174 阅读 · 0 评论 -
Delphi(XE2)+Win10实现系统服务使用CreateProcessAsUser调用外部界面程序
众所周知,使用Delphi创建的Service Application系统服务,在XP系统中与桌面交互十分流畅,可以随意打开自己程序的窗口,不过自Vista系统开始后台服务不再允许与桌面系统直接交互了(关于session 0 的详情百度相关文章可见原理描述)。究其原因是因为windows认为系统服务在设计的初衷就不应该与桌面UI进行交互,但是我们的项目有时候又不得不借助系统服务实现开机自启(目标是做一个开机自启的中间件,需要界面)。有人说添加注册表或者放到启动项下就可以了,的确,这是一种方式,但是如果想要更原创 2020-09-15 17:33:32 · 2549 阅读 · 3 评论 -
Delphi XE2中调用DLL窗体传递Application句柄
传统调用DLL窗体,为了达到DLL窗体与主程序融为一体的效果,通常会把主程序的Application传递到DLL工程中,类似如下方法:procedure SynAPP(App: THandle); stdcall;begin//传递ApplicationApplication.Handle:= App;end;或者直接把Application作为参数传递的:procedure DLLEntryPoint(Reason: DWORD);begin case Reason of原创 2020-06-02 16:51:38 · 1017 阅读 · 1 评论 -
云露中间件(XE7+FireDAC)开发案例
“真正的程序员用C,聪明的程序员用Delphi“——致敬。数据库说明目前中间件仅支持SQLServer2008 R2版及以上数据库Delphi开发环境作者开发环境XE7,因使用FireDAC,建议使用XE2及以上版本,运行更稳定还原测试库为了方便使用Demo,请用第二条所述数据库还原数据库【YX_DB.bak】中间件配置打开..\bin\HyService.exe 云露...原创 2019-11-26 19:19:32 · 574 阅读 · 0 评论 -
Delphi XE2下使用Idhttp实现带Header头发送get请求
TIdHttp带自定义头部信息发送请求的应用场景,一般是使用post请求中比较多,不过使用Get请求也是类似的。本文介绍一个简单的实现方法。在窗口中放一个TIdHttp控件,以下是具体实现的代码:procedure TForm2.Button4Click(Sender: TObject);var aStream: TStringStream;begin IdHTTP1.Han...原创 2019-11-07 14:30:55 · 3985 阅读 · 0 评论 -
delphi 使用cef3谷歌浏览器内核加载带header请求头的网页
上一篇博文介绍到用IE加载带Header请求头的网页,本篇介绍使用cef3实现同样的功能。我使用的谷歌浏览器内核是49版,支持XP系统的最新版,所以,版本有够低的了。procedure TForm2.LoadUrlEx(const AURL: string);var Header: ICefStringMultimap; Data: ICefPostData; Reques...原创 2019-11-07 14:20:18 · 1350 阅读 · 0 评论 -
Delphi XE2实现IE打开带请求头的网页
因工作要求,需要实现打开带指定格式头部信息的网页,以做防伪校验。头部信息格式与网页端经过沟通协调一致,且网页内部所有的跳转连接都需要手动增加指定格式的头信息。以下是IE中实现的代码,另外一篇博文会介绍使用CEF3实现同样功能的源码:1、打开指定网页:procedure TForm2.Button1Click(Sender: TObject);varURL:OleVariant;...原创 2019-11-07 14:13:20 · 345 阅读 · 0 评论 -
Delphi - TChromium 实现只显示网页的某一个DIV的内容
因为工作需要,一直在使用TChromium插件展示网页内容。今天遇到一个需求:只展示某个网页(商品购买详情页面)中的商品详情。因为TChromium具有良好的js脚本支持,当时也觉得一定可以实现这个功能。先看看网页端的源码,我需要只展示 div class = “w1000” 的内容。我的思路是先遍历网页中所有的div元素,设置其他元素不可见,只留下我需要的div就可以了(包括展示它的...原创 2018-12-13 15:52:57 · 2440 阅读 · 0 评论 -
Delphi XE2实现永久性安装字体
无论是安装一些系统字体还是自定义的字体文件,本方法都是适用的。需要注意的是目前网络上介绍的使用AddFontResource实现安装字体,但是仅仅对本次设置有效,重启之后字体还是会消失。使用本文方法可永久实现字体的安装。看看MSDN中关于安装字体的介绍:To install unique hidden font resources follow these steps:1 Copy t...原创 2018-08-09 15:21:26 · 1579 阅读 · 0 评论 -
Delphi 设置系统默认浏览器为IE
设置默认浏览器的功能其实还是通过修改注册表项来实现,本文的例子中使用了完整的Delphi源码来实现该功能,且不需要重启机器。百度各种资料会发现,基本上给出的答案都是修改HKEY_CLASSES_ROOT\HTTP\Shell\open\command就可以,可是经过我的多次验证——呵呵,并不行。于是又重新搜索了各种资料,终于让我找到了:procedure TForm1.SetDefa...原创 2018-08-09 15:14:19 · 854 阅读 · 0 评论 -
Delphi/XE2 使用TIdHttp控件下载Https协议服务器文件
之前的一篇博文详细描述了使用TIdhttp控件下载http协议的文件,在我项目的使用过程中发现对于下载Https协议中的文件与Http协议的文件不同,毕竟Https在HTTP协议基础上增加了SSL协议。接下来我们就来看看如何下载Https协议的服务器文件。HTTPS既然是增加了SSL协议,那么我们就处理SSL协议这关就可以了。开发环境:XE2 + Indy10Delphi控件:TIdhttp,Id...原创 2018-06-20 09:41:10 · 2464 阅读 · 0 评论 -
Delphi XE2 使用IdHttp下载文件(Get方法),支持断点续传
历时2天封装并自测了本页中的线程类。使用IdHttp实现文件下载,支持暂停下载、断点续传,使得文件下载更快;与UI的交互使用消息传递机制实现。源码已经在项目中使用,现将源码成果公布出来,供需要的人参考。线程处理的逻辑大致如下:1、先判断本地是否存在文件,如果没有,使用文件名+.tmp作为下载过程中的文件名;下载完成后更名为原始文件名;2、如果存在文件名+.tmp,载入内存后继续下载(断点续传);3...原创 2018-06-19 11:41:48 · 3532 阅读 · 0 评论 -
Delphi 主窗体Panel中嵌入DLL窗体功能详细源码
自从我的博客被尘封了五年之久,终于选择在今天以主程序嵌入DLL窗体架构的源码为礼物送给大家,希望资源与大家共享,共祝未来的Delphi能够走的更远。由于现在技术的日益发达,各种软件的界面日益美化,很多客户光看到原生的Delphi程序界面就会选择抛弃我们的产品。于是我们不得不对界面进行美化,对架构进行重新整理。首先要感谢360、QQ这些软件给我们提供了漂亮界面的基础:一个大标题导航栏+操原创 2017-06-08 14:54:57 · 4142 阅读 · 0 评论 -
[Delphi] pSafeArray与TBytes类型转换
虽然Delphi有这自己独特的语言优势,但是跟其他语言加解密互通时,处理显得尤为麻烦。比如3DES加解密,网上下载的一些加解密方法加密的字符使用java无法解密,或者java加密的文本,无法用D解密。 无奈之下使用其他语言封装加解密部分,再用D来调用。前一篇博客中说到的是使用c++封装dll的方式,但是有非常大的问题,加密串的长度有限制,且使用静态数组分配内存,占用了不少的内存空间。经过多原创 2017-06-27 11:16:18 · 1840 阅读 · 0 评论 -
[Delphi]获取机器的Mac地址
从网上搜罗来的一个函数,非常实用,贴出来带大家分享,也供自己查看。//返回值是主机AServerName的MAC地址//AServerName参数的格式为\\ 或者 ServerName//参数ServerName为空时返回本机的MAC地址//MAC地址以XX-XX-XX-XX-XX-XX的格式返回//function GetMacAddress2(const AServerName转载 2017-07-06 16:23:01 · 1925 阅读 · 0 评论 -
cxGrid设置列为按钮并设置按钮事件
在cxGrid实现在每一行的数据中显示一个button按钮(设置列属性为buttonEdit),并且关联点击事件。原创 2017-08-29 10:18:06 · 2477 阅读 · 1 评论 -
使用SHGetFileInfo函数获取任何文件大图标
为了实现在vista和更高版本的系统中能够获取任何文件的大图标(48*48像素,甚至256*256像素),真是找了很多资料,最终经过朋友的帮忙找到了实现方法。 网络中有很多获取exe大图标的方法,可惜不能获取所有文件的,有使用ExtractIcon函数也有介绍使用注册表实现的,经过仔细测试,最终采用SHGetFileInfo函数。SHGetFileInfo的使用方法网上资料很多,但是真正能转载 2017-10-11 13:25:29 · 4490 阅读 · 0 评论 -
Delphi根据进程PID等待进程结束或者结束进程
本文描述的是已知窗体标题,先获取某个程序的进程PID(即在任务管理器中的 进程ID),实现等待进程结束或者直接杀掉进程的方法。因为网络上直接结束进程的方法很多,本文不做深究,主要是等待进程结束。使用以下代码即可实现:原创 2017-10-25 14:57:09 · 1600 阅读 · 0 评论 -
Delphi 实现卸载Windows应用程序(类似360软件管家-卸载程序)
摘要:本文主要梳理的是实现卸载程序并等待卸载程序运行结束的方法,如果仅仅是调用卸载程序,相信难度也不大,但是我们需要等待卸载程序执行完毕,这就有些费脑筋了(是不是想到了360?没错,360也具有这个功能)。这套逻辑是最近项目需要自己研究出来的,可能存在不完善的地方,如果有路过的朋友可以指正,不胜感激!正文:很多人都知道获取应用程序的卸载命令很简单,都记录在注册表中,在win64系统下,原创 2017-10-25 15:06:41 · 1503 阅读 · 1 评论 -
Delphi Debug模式下可以但是Release模式下报错原因之一
今天上午才遇到的一个问题,Delphi的DLL调用C编写的dll(不太确定是不是C语言),在debug模式下运行好好的,切换到release模式下竟然无法正确返回?这个DLL在我们的其他exe程序中调用一直没有问题,为什么现在会产生问题呢?这个问题困扰了我两天,一直以为是C语言处理的内存方式与delphi有差异而导致的,没想到竟然是因为它!!!把工程设置中的 Optimization 中的勾去原创 2017-11-02 15:35:45 · 2408 阅读 · 0 评论 -
[Delphi]实现使用TIdHttp控件向https地址Post请求
开篇:公司之前一直使用http协议进行交互(比如登录等功能),但是经常被爆安全性不高,所以准备改用https协议。百度了一下资料,其实使用IdHttp控件实现https交互的帖子并不少,鉴于这次成功实现了功能,再次总结分享给大家。开发环境:XE2 + Indy10;Delphi控件: TiDHTTP控件 TIdSSLIOHandlerSocketOpenSSL控件2> libeay32原创 2018-01-16 17:09:10 · 19762 阅读 · 1 评论 -
[Delphi] XE2下实现标准的3DES加解密一种方法(可与Java,c#互通)
我之前在CSDN下载中放置了一个资源,介绍的是XE2实现与java互通的3DES加解密的一种解决方案。现在回想起来这个资源介绍的非常不清楚,没有交代3des的加密模式。在这里我重新介绍另一种实现3DES标准加解密的方法。目前经过测试仅实现了3DES中ECB加密模式,填充方式为pkcs5pading的加解密,加密后的内容可用在线3DES加解密来验证,可得到与网页一致的加密结果。非常遗憾的是没有找到加...原创 2018-03-07 17:19:44 · 1964 阅读 · 0 评论 -
cxGrid设置列为按钮并设置按钮事件
因为业务需要展示,在每行的数据最后一列显示一个按钮,点击按钮删除对应的数据。使用cxGrid能完美实现。1、设置按钮列的properties是buttonedit2、设置properties下的属性 viewStyle=vsButtonsAutoWidth3、设置Options中的 ShowEditButtons=isebAlways4、点击prop原创 2018-06-01 10:11:53 · 1200 阅读 · 0 评论 -
学会使用SafeArray 之 Delphi 篇
在学习的时候曾经百度了一下,想查找关于delphi中SafeArray的用法,没想到资料竟然如此之少,甚至连一篇相对完整的都没有。也许正如田师傅所说,现在高手们都在实行“技术封锁”了? 在CSDN技术中心有一篇关于C++的使用,说的比较详细。鉴于手中有田师傅写的代码,特拿来一部分对照自己学习的,翻译为Delphi版本。留作笔记,日后翻阅。=============================================================================== SA原创 2010-11-05 14:07:00 · 1815 阅读 · 0 评论