导读
什么是Duilib for Delphi? Duilib for Delphi是一个基于C++Duilib的开源工程,主要致力于在Delphi中使用Duilib库构建漂亮的UI。
怎么学习?首先对Duilib有基本的了解,特别是XML构建的UI上,可以在网上查找duilib的文章,学习如何构建基于XML的UI,其次要有一定的Delphi基础,不然学起来会很麻烦。
是否跨平台? 不能跨平台,除非Duilib能跨平台了。
是否支持低版本Delphi,比如Delphi7? 已经支持D7
一、初衷
原本是看着Delphi一直是使用控件快速拖出来的界面,现存也未找到较好的UI与界面分离的库, 看着c++的那么多优秀的UI库,有时候也会“眼红”下的,因为一直喜欢Delphi,所以也一直希望在Delphi中也有这样一套UI库或者说使用这种,虽然说思想上偏离了Delphi原本的快速开发,但我觉得有时候不失为一种新的解决之道。
二、行动
于是去年利用周末的时间去翻译,因为原Duilib的库的代码太多了,所以翻译了几个单元之后就放弃了,没有这么多精力去完全翻译,于是另想到一种:既然不想翻译那就走调用他的路吧,可是原 duilib库是提供给c++用的,所以并没有直接使用的接口,只能自己改造下,一开始并没有成功,后来因为工作的原因就忘记这个东西了,今年突然又想起来这个事了,找到以前的代码,经过调试后发现以前没成功的原因,并用Delphi重写了部分原duilib QQ界面的demo
三、现状
一直在寻找最快速的转换访求,中间不停的尝试着不同的方法,最后无懒选择了一种折中的办法,相对第一版要简单些,相对第二版又较麻烦些。由是代码实在太多了,就算第二种办法也需要花费大量的时间做基础工作,于是萌生了自动化的思想,花了几个小时写了一个转换工具,那晚一直写到大概快凌晨5点才睡觉。由于第一版的工具是一个说即做的产品,很多地方都是直接怎么简单就怎么写,效果也不是特别的好,调整也麻烦,于是抽了点时间重写了转换工具,这次的转换上质量高,基本转出来就能直接使用。但还有一点未开始做,不然也会增加翻译的工作量,根据c++的虚函数生成一个新的类,用来与Delphi交互用。 但愿后面补上这个功能。如果能更简单的话就直接生成Delphi的类,这样工作量减轻了至少80%。
四、不足之处
在关于类虚拟方式的重载问题上暂是没有好的办法,只能通过重写类,然后中转操作。另外hook方面也试过,还有想好有什么更好的办法(因为博主不想改动duilib的源代码而达到这种需求,此举是为了今后的升级作着想,另外有些方面也因为考虑升级不方便的问题而只能改用最直接的方式)。