XE

来源:互联网 发布:网络机顶盒有什么功能 编辑:程序博客网 时间:2024/06/09 22:39

你的代码里全部做这样的操作
1、uses IOUtils; //引用这个单元 这个好像是D2009开始新加入的
2、然后代码中所有的DirectoryExists全部用 TDirectory.Exists来替换(详细的你可以打开IOUtis看或者翻帮助)
3、然后你建个自己的单元, 比如叫DirHelper.pas
并在此单元里定义一个 
TDirHelper = record helper for TDirectory
  //Exists具体参数 跟IOUtils里的TDirectory.Exists要一样
  function Exists(...):Boolean;  
end;
然后在这个Exists用自己的代码去实现
----------
我不知道你知不知道 Helper 的作用, 我还是简单再讲一下好了

这样子当你同时uses引用 IOUtils和DirHelper的时候
那将会优先使用DirHelper里的  
如果哪天官方的DirectoryExists的BUG被修复 那你只用把这个DirHelper.pas里的Helper给屏蔽提就可以了 其它地方都不用改代码

----------
直接修改SysUtils 的问题么我想你也会想到
如果哪天来个Update 结果SysUitls又被替换回了原来的,或者是BUG没被修复的版本,你又忘了这个,结果程序又是错的 ,  我感觉用Helper是个比较折中的办法

不过第三方代码引用DirectoryExists 就没办法了  

最终还是修改SysUtils

 

=============================================================================

源代码编辑器里点右键,有个设置编码格式的选项  UTF8

=============================================================================

1、CnPack支持XE

2、EhLib,可能是使用得最多的Grid组件,目前官方还有没for XE的版本,不过可以通过copy for 2010的包(复制RADStudio2010成RADStudio2011)进行修改,将140修改成150(包括文件名和文件内容),然后还需要两个文件:
Common/EhLib.Inc
Common/GridsEh.pas
EhLib.Inc中参照2010的增加一个XE
GridsEh.pas中将MaxValue修改成MaxIntValue

3、Raize,这个组件使用的人也不少,官方已经发布for XE的5.4版,盒子有下载

4、UniDac,这个组件官方也发布了for XE,但是网上还没有FS下载,所以目前还只能使用3.0的版本,这个组件费了不少精力和时间,特别是Oracle驱动,因为UniDac一直都不提供Oracle的Source,只有dcu。
第一步方法和EhLib一样,copy 2010的包(修改Delphi14)成Delphi15),需要修改如下文件:
Dac.inc
DacGui.inc
Design/UniReg.pas
Design/DAConnectionEditor.pas
Design/DBToolsClient.pas
Design/UniAbout.pas
Design/CRDesign.pas
inc文件和前面的修改方法一样
Design/UniReg.pas:参照VER14修改
Design/DAConnectionEditor.pas:参照D14修改
Design/DBToolsClient.pas:参照VER14修改
Design/UniAbout.pas:参照D14修改
Design/CRDesign.pas:参照VER14修改
如果需要CRGrid,需要修改CRGrid/Source/CRGrid.inc
除了Oracle的Provider无法编译通过,其它的都没问题,提示缺少dcu文件,分别是OraClassesUni.dcu、OraNetUni.dcu、OraCryptUni.dcu,后来想到一个办法,就是安装官方3.5试用版,然后把这3个文件复制出来,结果还真的通过了,至此,UniDac for XE大功告成!

5、最后一个是巨无霸DevExpress,最新版本为5.2,不直接支持XE,所以也只能参照2010来修改,这个巨无霸折磨了我3天!因为我装的是完全版,每个组件都安装,而且所有的Delphi组件我都只使用手动编译版本,不使用安装版本,即使只有安装版,我也会先安装一次,然后复制出来,卸载安装版,最后再自己编译安装。
用过DevExpress组件的人都知道,这个巨无霸的安装是相当复杂的,就算是自动脚本,都比较麻烦,何况是手动安装(具体的编译和安装步骤见Source/ManualInstall)
同样,也要copy一分2010的包成XE的,参照修改
然后修改所有Sources目录下的cxVer.inc文件
按照ManualInstall的步骤进行编译,一路会提示很多警告和错误,基本上提示中就已经写明了怎么修改,由于文件太多,我就不一一列举了,有遇到问题的朋友可以一起交流。
当全部编译通过了(估计得折腾半天),最关键的问题来了!
编译通过之后,组件可以正常安装,而且如果你不使用Print的话,测试程序完全没有问题,但是如果使用了Print,运行会提示缺少IDB_DXPSFUNCTION_IMAGE,这个小问题折腾了我2个小时,连调试都没机会,运行程序的第一句之前就出现这个错误了,后来搜索整个DevExpress的pas文件,才发现是Print里面的,然后逐步排查,定位在dxPSHFLibrary.pas和dxPSImgs.pas,dxPSHFLibrary.pas只是调用,dxPSImgs.pas才是定义的地方,重新编译没有任何警告和错误,证明和pas文件无关,然后发现dxPSImgs有一个res文件,用ResHack工具打开才发现,并没有IDB_DXPSFUNCTION_IMAGE,而dxPSImgs.pas里面定义的其它变量都有,我增加了一个IDB_DXPSFUNCTION_IMAGE资源(虽然找一张图片,参照其它相似变量即可),项目成功运行,至此DevPress大功告成,手上的所有项目完全成功移植到XE上,运行测试都正常。

=============================================================================

发现调用COM+方法的时候。 最好用WideString

调用这个方法时,客户端不能再
var s: string;
AppServer.GetServerDate(s); 这样了, 否则返回值是''(空串)
如果var s: WideString; 再调用就有值了。

=================================================================

winexec 是老函数,它的第一个参数不支持unicode string, CreateProcess用起来太麻烦,还是用ShellExecute 比较好

==================================================================

MDI子窗体关闭时:系统就会发出WM_MDIDESTROY消息,响应这个消息就知道子窗口被撤销了

procedure   WMParentNotify(var   Msg:   TWMParentNotify);   message   WM_PARENTNOTIFY;
procedure   TfrmMainFrame.WMParentNotify(var   Msg:   TWMParentNotify);
begin
    if   msg.Event=WM_DESTROY   then   //msg.Event总是为513。若是2,则是子窗体释放事件。
    begin
        showmessage( 'Child   closed! ');
    end;
end;

===================================================================

在DLL调用MDI子窗体时,如何获取当前已将打开的子窗体:

将MDI主窗口当参数传到 DLL 的函数, MDIChildren[]可以列出子窗口

===================================================================

<减小Delphi XE编译出EXE体积的方法>

1. Compiler directives in your project

put the following directives in your DPR just before the uses command:

{$IF CompilerVersion >= 21.0}



  {$WEAKLINKRTTI ON}



  {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}



{$IFEND}
































===================================================================