随笔分类 -  Borland

Borland开发工具系列 C++Builder/Delphi,我的最爱
摘要:我经常会用 Delphi 写一些工具和应用,为了扩展方便,大部分都会做成插件形式。迫于某些原因,我的插件不得不用其他开发工具来完成,比如 VC。于是有个大问题需要解决:如何让 D 和 VC 互相通信、互相操作。最普遍的做法,无非是定义一些方法,VC 写 Dll 导出这些方法,D 载入 Dll 调用。但问题是稍大点规模的应用,这种方式非常麻烦,也不够直观。于是花了点时间研究 D 和 VC 之间共享接口和对象的一些方法,现将要点共享发布出来,希望对大家有用。基础事项:在 D 和 VC 中,要共享的接口、对象中的方法的调用约定必须为 stdcall1. class 的 使用Delphi 和 VC . 阅读全文
posted @ 2012-11-18 01:15 Sephil 阅读(2395) 评论(7) 推荐(1)
摘要:前天想写个泛型类,用来保存类类型(如TClass、TComponentClass之类)但是DelphiXE的泛型约束不支持TClassTClassList<T: TClass> 将会得到编译错误因此我只能去掉约束条件 TClassList<T>但是这样又有个问题,即 T 类型不明确,无法用 Assigned(T) 或 T <> nil 来判断值是否为空后来想了个办法绕过了这个问题,详见代码procedureTClassList<T>.Register(constADisplayName:string;AClass:T);varP:Pointer; 阅读全文
posted @ 2012-09-06 10:50 Sephil 阅读(908) 评论(0) 推荐(0)
摘要:上次说到我想为DirectUI增加脚本支持,今天我们就来研究下脚本的实现问题。虽然现在有了诸如AntLR、GOLD Parser、TP Lex and Yacc等等CC工具,大大方便了脚本引擎的开发,但我仍然觉得在这个框架里自己实现一套脚本引擎是件毫无意义的事。所以我决定使用现有的脚本引擎。事实上Delphi可用的第三方脚本引擎很多,这里列几个常见的:FastScript号称最快的Delphi脚本引擎,支持 VB、JS、Cpp、Pascal 语法,可以在脚本中使用自定义的类型和对象,内置了对Delphi VCL的支持。ifps/RemObjects PascalScript使用Pascal语法 阅读全文
posted @ 2012-02-23 19:35 Sephil 阅读(12007) 评论(5) 推荐(4)
摘要:工作需要开发的一套插件框架,给应用程序提供灵活的插件支持,基于Dll / Interface实现。先上个图这是个标准的基于插件的应用,下拉框里的就是由5个插件Dll提供的功能。主程序中定义了一个接口,而插件Dll则提供这个接口的实现。使用也很简单,在窗口上放置一个TExtensionManager组件,设置一下插件的读取路径就可以了。框架中有3个重要概念,ServiceHost,Module(模块)和扩展(Extension)1.ServiceHost是整个框架的灵魂,不管是主程序中还是插件中,都通过他来查询和使用其他的插件对象。下面是一段使用示例代码: (ServiceHost as ILo 阅读全文
posted @ 2012-02-22 23:52 Sephil 阅读(4047) 评论(7) 推荐(0)
摘要:最近公司开发的几个软件都需要支持皮肤,因此花了半个月做了一套皮肤引擎,也就是所谓的Direct UI,即控件都是画在窗体上的,只有容器窗体是有实际句柄的,子控件并非标准的Window。说说这套引擎的几个特性绘制效率尚可,至少图片很多时也没有发现有闪烁;支持的常用图片格式(BMP/JPG/PNG/GIF/ICON等),并支持图片透明;图片延迟载入,避免占用内存资源;皮肤支持多种存储格式,如ZIP打包、EXE内嵌资源等,要扩充新的格式也很方便;容器基于Delphi的TWinControl,例如你在窗口上放置一个Panel,只在这个Panel里使用皮肤;支持同时使用多个皮肤,比如Form1用一种皮肤 阅读全文
posted @ 2012-02-22 23:29 Sephil 阅读(7091) 评论(4) 推荐(0)
摘要:这几天在写个东西,其中有个函数,有这么几句[代码]但是调试发现FullPath总是得于PathName,就是说ExtNames[i]没被加上。。。花了2小时才发现问题。原来PathName是调用ExpandEnvironmentStrings得到的[代码]查MSDN发现,ExpandEnvironmentStrings返回的长度是包括了\0的。。。所以返回的结果最后有个\0,不管你在后面加什么,编... 阅读全文
posted @ 2009-05-24 19:18 Sephil 阅读(394) 评论(0) 推荐(0)
摘要:记得以前在D7下,要隐藏任务栏图标只需要一句 但是今天试了试,在D2007下无效了... 阅读全文
posted @ 2009-05-21 19:23 Sephil 阅读(1447) 评论(0) 推荐(0)
摘要:在上篇 关于窗口嵌入桌面及透明的注意事项 提到 SetLayeredWindowAttributes 会使窗口上的控件也一起被透明化 网上搜了一下,也没有比较好的解决办法 似乎唯一的解决办法就是:在窗口后面再贴个透明窗口。。。 步骤: 1. 使用 SetWindowRgn 将没有控件的区域镂空 2. 建立一个 LayeredWindow 在当前窗口后面 为此写了个类,通过带Al... 阅读全文
posted @ 2008-06-25 16:34 Sephil 阅读(1495) 评论(0) 推荐(0)
摘要:这几天在做个东东,需要将窗体嵌入桌面及窗口透明 开始我以为以我现在的所知应该没什么大问题,结果也的确如此,没什么大问题,只是细节上出了几个小问题... 阅读全文
posted @ 2008-06-23 14:21 Sephil 阅读(3065) 评论(1) 推荐(0)
摘要:VBS支持通过For Each遍历集合对象,但是如何用Delphi实现这样一个COM对象呢?其实很简单第一步:实现IEnumVARIANT接口,其声明如下IEnumVARIANT = interface (IUnknown)['{00020404-0000-0000-C000-000000000046}'] function Next (celt; var rgvar; pceltFetche... 阅读全文
posted @ 2007-04-26 17:33 Sephil 阅读(739) 评论(0) 推荐(0)
摘要:// 0: Unknown// FILE_DEVICE_CD_ROM: CD-ROM// FILE_DEVICE_DVD : DVD-ROMfunction GetCDType(Drive: Char): DEVICE_TYPE;const Size = 2048;var hDrive: THandle; dwBytesReturned : DWORD; bMediaTypes ... 阅读全文
posted @ 2007-04-25 16:58 Sephil 阅读(2259) 评论(0) 推荐(0)
摘要:最近重装了WinXP并打了SP2补丁,然后照例BCB/Delphi/.NET/Eclipse...一路装下来 在Delphi里New了个工程,跑一下居然出错 阅读全文
posted @ 2007-04-16 13:42 Sephil 阅读(907) 评论(0) 推荐(0)
摘要:发现一个Delphi 7的Bug 阅读全文
posted @ 2007-03-31 10:31 Sephil 阅读(736) 评论(0) 推荐(0)
摘要:已更新到 2009.3.15 v3.4.4 前段时间发现一个Delphi的控件包安装工具MultiInstaller,只要自己写个setup.ini,就可以自动把zip文件解压并编译安装到Delphi 阅读全文
posted @ 2007-03-25 20:01 Sephil 阅读(1774) 评论(8) 推荐(0)
摘要:昨天发现系统中数据压缩解压部分有内存泄漏,上午研究了一番,发现还是实现的人对这几个东东不熟悉,现将研究结果罗列一番。 阅读全文
posted @ 2006-12-07 14:03 Sephil 阅读(2163) 评论(3) 推荐(0)
摘要:开始尝试翻译一些英文文章,最近正好对mpq产生兴趣,看到一片文章叫做 inside MPQ,于是翻译一下,就当锻炼自己吧。这篇文章非常的不厚道,在关键地方戛然而止,而且没有更新的迹象。让人郁闷无比。但是还是比国内一些研究MPQ的少的可怜的文章要好些。看了这些文章,无比惋惜国内技术的滞后和黑客技术,逆向工程技术的贫乏。我们总是拿来主义,做应用。自己的原创真的太少了。 转自 http://www.linuxer.cn/Rainking/blog.html 阅读全文
posted @ 2006-09-13 16:31 Sephil 阅读(6674) 评论(4) 推荐(0)
摘要:今天报表组的人说CB5里用ADO读取Oracle的Blob字段报错,于是我试了试,还真是这样,错误信息是“数据类型不被支持”。 我又试了试Delphi7,也是一样的错。 我想,BCB/Delphi的ADO是封装过了,会不会是封装得有问题? 于是跑到VB下写了个Demo,居然成功了~看来真的是封装的问题。 看来只有通过OLE直接操纵ADO了,写了段代码,试了试,也成功了 阅读全文
posted @ 2006-06-30 13:04 Sephil 阅读(2457) 评论(0) 推荐(0)
摘要:按照习惯,我们的程序在执行时间比较长的时候一般需要把光标设置成漏斗的样子,执行完操作再换回来。 如: Screen.Cursor := crHourGlass; // Do somthing Screen.Cursor := crDefault; 但是中间我们要考虑到,万一执行中出现错误,那么最后一句的 Screen.Cursor := crDefault 也就执行不到了,光标不会变回原来... 阅读全文
posted @ 2005-09-07 22:50 Sephil 阅读(389) 评论(0) 推荐(0)