admin 管理员组文章数量: 887021
XE
你的代码里全部做这样的操作
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}
===================================================================
本文标签: XE
版权声明:本文标题:XE 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687412065h99640.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论