DDuilib

导读

       什么是Duilib for Delphi?  Duilib for Delphi(DDuilib)是一个基于C++Duilib且最大限度不改动Duilib源码的Delphi开源工程,主要致力于在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的源代码而达到这种需求,此举是为了今后的升级作着想,另外有些方面也因为考虑升级不方便的问题而只能改用最直接的方式)。


 时间记录

      2015-12-26  增加了多级菜单的支持

      2015-12-26  最近一直很忙,天天加班到很晚才回去,今天算是抽空同步了duilib最新代码

      2015-12-20  解决了wke js绑定问题,另对FPC和Delphi7做了兼容性测试

      2015-12-19  支持wke内核浏览器了,可以抛弃ie了,但js绑定上还有点小问题,

      2015-12-12  增加了一些编译指令,尝试移植到FreePascal及非Unicode版本的   

      2015-12-12  快零晨四点了,终于全部将库更新至duilib最新版本并测试所有,另合并到master分支上了

      2015-12-09  一直在更新

      2015-12-03  继续保持更新,也继续踩坑,填坑。。。。

      2015-11-28  今天又遇到了不少的坑,只能继续探索并修复

      2015-11-27  把duilib的基本控件都进行了导出,并完善了大部分Demo代码    

      2015-11-26  经过不断的踩坑, 终于还是改为普通函数封装来调用了,唉!


   // 待续......

 

   源码地址(github): https://github.com/ying32/duilib-for-Delphi


   oschina中同步地址:http://git.oschina.net/ying32/Duilib-for-Delphi

  

   Demo预览效果:

  

ps: 这个demo用了阿里小白软件管家的图片资源,仅用作学习之用

DDuilib_第1张图片


   DDuilib_第2张图片

DDuilib_第3张图片





你可能感兴趣的:(Delphi,DDuilib)