分享
 
 
 

Delphi8 for .net 的 VCL 类库

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

前两天,看了一篇Delphi8的介绍,于是下来一个装上看看(可能是盗版的,不过我不会用于商业用途!),我使了5年的Delphi,从3到6,6以后就开始用.Net了。前段时间出了个C#Builder,兴奋的装上看了看,而已!

前段时间听说Borland要推出"超级"的VCL Framework,着有兴趣,因为总觉得microsoft不会真的推出For Linux的Framework,那么Mono更是遥遥无期(估计万不得已,ms会花一些money收掉他)。

装好Delphi8后,一启动以为和C#Builder差不多(一样启动界面风格,现在我还不解那个黑灰的设计,预示着什么?),根据前面看到的Delphi8的介绍,一直对Vcl控件不能兼容.Net控件不解,探个究竟!见了一个Vcl Forms的工程一看,还傻不啦叽相硬拖.Net控件,门都没有!

还好,Vcl类库是开放源码的(跟了ms一段时间,这样的习惯已经没了),一看才知道怎么回事事儿!Vcl的控件都是从System.ComponentModel.Component写下来的,怪不得与.Net控件不相容了。就拿TForm举例,其是从:System.ComponentModel.Component —〉TComponent —〉TControl —〉TWinControl —〉TScrollingWinControl —〉TCustomForm一路过来的,当然和System.Windows.Forms.Control下的.Net控件不是一路货了,TControl和Control分道扬镳。不过还好从类库的结构看上去,他们的组件还是可以兼容的,具体的就不一定了!

再看看Borland工程师写的Vcl源码,就好像开始说的那句话,好辛苦啊!既要完全兼容以前Delphi源码,又要支持.Net,不能再像以前那样无所忌惮的用API,用汇编,把System.Runtime.InteropServices.Marshal类用的个透熟!不知道还能不能跨平台,估计在什么Linux上,这帮Borland工程师们又要“好辛苦”了。再写一遍,反正我们比ms的men强,怕什么!

说了半天,两边的控件能不能互调,怎么互调啊?怎么让TControl包含Control,让Control包含TControl?

Delphi8安装后,发现程序菜单中有一个WinForms Controls的导入工具,哇,赶紧试一下!转了一个简单的控件,自己写的一个Button,没问题,工作的很好!先来看看怎么完成的:

TImpRulerPanel = class(TNetControlWrapper)

private

function GetRulerPanel: Hose.WinForm.RulerPanel;

protected

procedure InitControlData; override;

procedure HookNetEvents(AControl: System.Windows.Forms.Control); override;

procedure UnhookNetEvents(AControl: System.Windows.Forms.Control); override;

public

property RulerPanel: Hose.WinForm.RulerPanel read GetRulerPanel;

(我删除了不必要的部分)

在.net中调用过ActiveX控件的朋友一定知道,在.Net调用ActiveX控件时,DotNet会自动生成一个包装类,就像上面TImpRulerPanel一样,只不过Com对象的包装类是从AxHost继承的,这里的包装是从TNetControlWrapper继承的,手法很相像。AxHose通过GetOcx或得Com控件,这里直接可以获得,都是“一家”,自然要方便一些。我想将来,将Vcl控件包装到.Net中使用也不是什么难事。

但是在转换其他一些复杂一点的控件,比如包含自定义事件时,就会有一些问题,甚至产生莫名奇妙的错误,我会加强研究,在后来文章中的给大家介绍及其解决的方法。

现在用.Net IDE开发的同志我不推荐使用Delphi for .net,但现在使用老版本Delphi的同志,我强烈推荐。既可以保留Delphi的一些工程、编程习惯,又可以逐步过渡到.Net,使用.Net类库的强大功能,真是鱼和熊掌可以兼得阿,只是目前的界面控件的兼容上稍差一点。

另外Delphi8也比老版本的Delphi有一些其他方面的小进步,比如以前在编译时无法检验含有虚方法的类,现在则可以等。

总的来说,Delphi8还是非常值得使用.Net开发工具。只看了一小会儿,有什么谬论,希望大家指出和原谅,我也会不断地学习进步!

acai 评论:

不用再指望VCL还能在.Net上再现辉煌了,Borland清楚,你我也应该清楚,就象李维说的,“把Delphi7好好保存起来吧,这是最后一个Win32版本了”(好像据说还会有更新,如7.1等等,但是大版本更新不会有了,仅仅处于维护阶段了),还在开发win32程序的兄弟,就买本老李的《Inside VCL》,没事研究下VCL做做纪念吧。而想快速地进入.Net的天地,那就轻装上阵,暂时忘记Delphi吧。千万要记住:只要ms不倒,.Net的FCL就是.Net下最大最流行最根本的类库,你不要再指望borland把什么都包起来象个婴儿似地喂着delphi的程序员——如果你还是认为学了VCL就可以不理会Win32的api,学了VCL.Net就可以不理会FCL的话,那就当我没说吧。

完全没有必要用所谓的“vcl Form”程序来过渡到.Net的上,“winform application”是标准的.Net类库程序,而所谓的“VCL Form Application”仅仅是borland用来进行所谓“升级维护”的幌子而已,李维都认为现在的vcl.net仅仅是个过渡方案,而Danny Thrope也直言不讳说.Net类库由MS来开发那Borland可以把以前分散在类库设计上的力量集中起来设计“真正威力的Delphi”(不知道IDE重要了还是类库重要了),大家都知道这个版本的delphi开发时间仅仅只有6个月,所以现在的“VCL Form Application”的控件少的可怜,那是因为开发组来不及做,以后也很难说,再说,学习.Net,首要的是学习.Net FrameWork,而不是VCL.Net!!

即使从工具的角度来讲,现在的Delphi.Net也是个鸡肋,就这种bug不断的半成品,真的能来做项目吗??从学习的角度来讲,那更不应该来用,.Net FrameWork已经不象以前的Win32api,学习的难度已经大大降低了,更不可想像从事.Net的开发而不熟悉.Net的FCL,因此,还是学习C#吧!VS.Net要稳定的多,足以用来做真实的项目开发了,反观现在的C# Builder和Delphi.Net,有几个人真的敢来做项目??

所以,如果你真的还是所谓的“Delphi”扇子,那尽量还是选择“Windows Form”程序学习吧,否则,还是老老实实地去学习Framework去吧。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有