小探 Delphi8 for .net 的 VCL 类库

       Borland工程师好辛苦啊!首先得感叹这么一句!
      
前两天,看了一篇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开发工具。只看了一小会儿,有什么谬论,希望大家指出和原谅,我也会不断地学习进步!

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值