[原]希望OrangeUI有个好的开始

  • Thread starter DelphiTeacher的专栏
  • Start date
D

DelphiTeacher的专栏

Unregistered / Unconfirmed
GUEST, unregistred user!
有兴趣了解OrangeUI的,或是一起探讨皮肤界面的,欢迎加入OrangeUI For FMX 技术支持QQ群10900297,





从事Delphi的控件开发已经五个年头了,做过不少套皮肤,开发过无数的控件,

但是,三年来,几乎都在做重复的工作,那里文本绘制的坐标改一下,这里加一个图片,从基类控件中派生修修补补的,

而且,控件的设置几乎是运行时的,也就是只能靠代码来设置皮肤控件的属性,对自己来说勉强可以将就一下,

可是,若要给别人用,别人肯定会觉得很难用。

着实花功夫,感觉不能再这么下去的。



从2012年年初的时候就在设计一套皮肤控件了,

一开始的时候,野心勃勃的,想着这也要实现,那么要实现,到最后,七月份的时候,发现能力有限,几万行代码白写了,

从中明白凡做大事,由易到难,由简到繁的过程。



这次的皮肤控件设计我认为是比较完美的,

主要是将控件和绘制行为逻辑独立开来了,

一般像我开发控件的模式,比如有两种不同风格的按钮,

我会先开发一个比如TCustomButton,然后再继承出两种控件,

TStyleAButton和TStyleBButon,

但是现在,我的设计思路是只开发一个TSkinButton,

然后这个TSkinButton拥有一个SkinStyle类,

SkinStyle类封装按钮绘制和行为的逻辑,

然后写一个StyleA和一个StyleB,

我想放一个StyleA的Button在窗体上时,

我选一个TSkinButton按钮在窗体上,将它的SkinStyle设置为StyleA即可,

避免了控件面板上按钮控件过多过于眼花



有一点一直在思考,

一个皮肤控件包的生命在哪里?

像RZ,DEV,BS和AS,这些出名的,

这些控件包,都有多款皮肤,很多功能强大又好看的控件,

这些不禁令我感叹,

我一个人的力量,究竟能不能开发出这么庞大的控件包,

毕竟人力有限,能力有限





为了给OrangeUI增加皮肤包解决方案,

又进行了大改,花费了一个多星期对它大动手脚,到现在也还只完成了一半,

皮肤包解决方案其实就是将所有的素材放在一个皮肤包文件中,

比如有两个一模一样的窗体,它们使用同一幅图片做为背景,

一般情况下,我们会给这两个窗体分别加载这幅图片,

这样,增加了内存使用量,如果这种情况严重的话,会使用运行时的内存臃肿不堪,

也为了在设计时能看到使用皮肤包后的效果,还需要很大的工作量。


由于将绘制引擎分离出来了,所以,可以支持GDI, GDI+等其他的方式,

需要一些时间来完善,将这些绘制文字,图片等功能封装起来



皮肤包设计器也还没有弄好,唉,一大堆东东,没有几个月是搞不定的。





由于DirectUI控件有先天的优势,就是拉动窗体的时候不会闪烁,还可以背景透明,

所以如何将普通的控件和DirectUI的控件共用同一个绘制方法,同一个控件行为逻辑,

还是蛮头疼的,再想想,基本的DirectUI控件对于一些要求比较高的软件还是需要的。





预计OrangeUI初步完成要在13年的6,7月份了,

不管怎样,凡大事做于细,难事做于易,

求个尽善尽美吧





今天是星期六,抓了一天的虫子,这个虫子太难抓了,虽然最后发现只是小小一句代码,

但是它的破坏力还真是惊人啊。。。





今天又是个大改的日子,想好如何将属性分离出来的方法了,便于多种类型的控件共用相同的代码,

Delphi没有多重继承真是累啊,做起来,虽然有接口,但是总不致于每类控件都实现吧,那虽然是复制粘贴,但代码冗余太大了,

将很多东西都脱离出来有一个弊端,就是对用户不友好,

比如原先很简单的TCheckBox.Checked属性,

如果我将它封装进TCheckBoxProperties类,供DirectUI控件和普通的Win控件共同的话,

那么使用起来就会是SkinCheckBox.Properties.Checked,这么长,不是很方便,

因此,还是需要提供给用户一个方便的接口









最近遇到好些需要重改框架的问题,每次大改,伤筋动骨,几乎是推倒重来,

地基很重要,如果在造房子的时候发现地基有问题,那不是要爆破啦,

所以,不要慌,趁现在东西还少,赶紧处理,相信以后会有好处的。





还有,我得了痔疮,眼情还发炎了,五六点钟起床就写代码,不停的揉眼睛。

上厕所都搬台电脑敲代码。







这些天,OrangeUI卡在一个地方过不去,网上也没有这方面的资料,

我只能不断的思考,期待某一天能够灵光一闪,弄出一个完美的解决方案。

Orange的基础还需要不断的纠正和完善,我也会加快脚步,

尽快的推出,接受大家的指教,并不断的发展和完善





今年是2014年,又重新整理了一下自己,2013年是休息的一年,养了点精神,继续接着OrangeUI,

今年,看着前两年的OrangeUi的代码,一开始有些看不懂了,后来慢慢的熟悉,

发现这个框架还是蛮好的,只是有几个控件的实现方式需要大的改动,

以前想不到很好的解决方法,今年想出了解决办法,

希望今年OrangeUI能被大多数人使用,

鉴于移动平台的开发热情,先推FMX版的OrangeUI







欢迎加入OrangeUI For FMX 技术支持QQ群10900297



作者:DelphiTeacher 发表于2012/12/4 12:25:04 原文链接
阅读:4046 评论:11 查看评论

查看更多...
 
Top Bottom