`
linuxstuding
  • 浏览: 1227371 次
文章分类
社区版块
存档分类
最新评论

向Delphi 2009转移

 
阅读更多
  先前公司的一个项目因开发时间与项目定位导致结构失衡。在经过前段日子的评估与调查后,从今天开始进行重构。
  也想趁这个机会,将界面的开发由Delphi 6转向Delphi 2009。从而逐步放弃Delphi 6这个用了近7年的开发工具。也知道在转移的过程中会碰到许多问题,因此在此处对这些问题进行记录(其中包含了很多警告信息,但偶喜欢追求0警告),以供参考。
1)首先将自写的控件转移。直接从以前的.dpk安装控件,发现安装不上去,出现很多编译错误。只好另外新建一个D2009的包文件,再将源码文件添加进来。安装成功。
虽然安装成功,却有以下问题:[DCC Warning] Lilac.dpk(62): W1033 Unit 'VirtualTrees' implicitly imported into package 'Lilac'

从词面上知道解决方法,却不知道为什么会产生这个问题。
解决方法:将VirtualTrees所在包的dcp文件添加到Requires中。
2)由以下代码产生的警告 [DCC Warning] RVMarker.pas(1122): W1063 Widening given AnsiChar constant (#$A7) to WideChar lost information
var
ch: Char;
begin
if (ch >= #$A7) then //或者 if (ch >= #167) then
end;
产生原因:D2009的Char为宽字符WideChar,而#$A7代表的是AnsiChar。
解决方法:要将 #$A7 或 #167 改为 #$00A7 即可
3)由以下代码产生的警告 [DCC Warning] RVMarker.pas(1120): W1057 Implicit string cast from 'AnsiChar' to 'string'
// 函数的声明:procedure ReplaceStr(var str: String; oldstr, newstr: String);
ReplaceStr(stResult, #$A7, 'A');
ReplaceStr(stResult, #167, 'A');
产生原因:同上
解决方法:同上
4)protected域的procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;在编译时出现警告:[DCC Hint] uMLBoxCtrls.pas(722): H2269 Overriding virtual method 'TMLListBox.GetChildren' has lower visibility (protected) than base class 'TMLControl' (public)
从信息可以看出是因为将父类(TCustomControl)的public域函数覆盖到了protected域导致的
产生原因:此函数(TCustomControl.GetChildren)在D6中是protected域的函数,在D2009中却成了public域了
解决方法:将此函数声明到public域中
5)调用API函数gethostname出错:[DCC Error] uVIMPublicFun.pas(449): E2010 Incompatible types: 'Array' and 'PAnsiChar'
var
hostName : array [0..255] of char;
begin
gethostname(hostName, sizeof (hostName));
end;
产生原因:D2009的Char为宽字符WideChar,而gethostname第一个参数是PAnsiChar。
解决方法:将hostName的声明改成array [0..255] of AnsiChar;即可。
6)以下代码生成警告:[DCC Warning] uEditor.pas(192): W1058 Implicit string cast with potential data loss from 'TCaption' to 'ShortString'
var
DisName : string[80];
begin
DisName := Self.cmg_Edit.Text;
end;
产生原因:又是一个类型问题
解决方法:这种以前在D6中常的代码以后不能用了:(,改正也简单:DisName := ShortString(Self.cmg_Edit.Text);。
7)以下代码编译错误:[DCC Error] PageFrm_Owner.pas(3695): E2008 Incompatible types
var
DisName : string[80];
AliasName: array[0..80] of Char;
begin
DisName := AliasName;
end;
产生原因:还是类型问题
解决方法:DisName := ShortString(AliasName);
8)以下代码产生警告:[DCC Warning] VirtulFirm.pas(127): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
procedure TVirtualFirm.edFirmKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9']) then
begin
Key := #0;
end;
end;
产生原因:类型问题
解决方法:if not (AnsiChar(Key) in ['0'..'9']) then
9)cm_Pt := SmallPointToPoint(Message.Pos)会产生一行提示:[DCC Hint] uMLPageControl.pas(326): H2443 Inline function 'SmallPointToPoint' has not been expanded because unit 'Types' is not specified in USES list
产生原因:查看函数的声明发现一个以前没有在delphi中出现过的inline,估计此关键字的功能与C++的相同或相似。
解决方法:根据提示信息即可知道如何解决,即uses types
  花了一下午,终于成功编译了原有的代码。发现的问题大多是字符串的类型问题。随着后续工作的深入,问题会越来越多或者会发现些啥好东东。到时再添加上来。
分享到:
评论

相关推荐

    Delphi7汉化包

    经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结...

    delphi生成insert 语句

    快速开发工具delphi生成insert 语句,方便数据转移,从别处捞的,希望对大家有用处

    Delphi实现数据库的复制功能.rar

    Delphi实现数据库的复制功能,对数据库中的各个数据表实现对向拷贝,也就是创建一个数据表的备份,复制转移数据,本程序中使用有控件,

    两个listbox之间内容转移

    Delphi 两个listbox之间内容转移,支持选中转移和全部转移

    delphi面向对象编程

    经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结...

    Delphi相关的数据库开发

    经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结...

    delphi开发模型大全

    经过数年的发展,此产品也转移至Embarcadero公司旗下。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结...

    Delphi原生文字滚动 向上的字幕滚动.rar

    Delphi原生文字滚动 向上的字幕滚动,滚动速度可自定义,程序本身没有使用Delphi之外的控件,在Delphi7环境可直接编译,实现类似电影序幕那样的文字向上不间断滚动特效,相关代码:  zShowLine(self);//显示字符串...

    Delphi控件:DataHint V1.1 Beta;拼音过滤类似 LookupComboBox

    1、支持 Delphi2009 ,解决不兼容 Unicode 问题; 2、增加支持 D2007、D2009; 3、增加支持多次顾虑的功能(输入空格); 4、解决 BUG:当未过滤出记录回车后,转移焦点再回来时,显示不出数据。 5、由于改...

    delphi APPLICATIONEVENTs使用

    在delphi中, 当在一个窗口上放置一个ApplicationEvents控件时,Application将会把所有的事件都转寄到ApplicationEvents; 也就是说,ApplicationEvents可以拦截到应用程序的全部事件,包括OnActivate\OnHelp\OnIdle...

    DELPHI7编写的小工具:万年历、处理文本、interbase数据转移等

    DELPHI7编写的小工具:万年历、处理文本、interbase数据转移等

    delphi开发客户端更新程序(FTP)

    由delphi开发的更新程序,首先通过获取本地和服务器的文件列表,通过比对取得需要更新的文件列表,暂时下载到本地临时文件夹,然后再 转移到正式文件夹,成功后删除临时文件夹。

    企业微信接口DELPHI源码

    企业微信源码,目前功能能获取 企业部门,企业员工,客户信息,增加标签,转移客户等,EXE需要加入 libeay32.dll ssleay32.dll 文件,目前XE5版本编译

    delphi制作字幕滚动窗体.rar

    delphi的字幕滚动窗体程序 代码如下 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) ...

    打飞机人机对弈版源代码,Delphi开发的益智游戏.rar

    原本它是两个人在纸面上玩的益智游戏,转移到电脑上后我给它添加了人机对奕和网络对战的功能。 在本源码中你可以看到电脑AI实现方法,ClientSocket,ServerSocket的使用,控件的编写,ListBox的OwnerDraw的实现等等...

    Delphi6编程大师 数据库

    Delphi6编程大师 数据库 DELPHI数据集过滤技巧 编写代码设置数据库的别名 ...实现不同数据库系统之间的数据转移 数据库的动态建立 图像数据的存取技术 用SQL实现字段数据的模糊查询 在一个DBGRID组件中显示多个数据库

    一个Delphi AI 游戏,打飞机源程序

    原本它是两个人在纸面上玩的益智游戏,转移到电脑上后我给它添加了人机对奕和网络对战的功能。  在本源码中你可以看到电脑AI实现方法,ClientSocket,ServerSocket的使用,控件的编写,ListBox的OwnerDraw的实现等等...

    Delphi移动 剪切文件

    Delphi将文件转移到其它的地方,相当于转移、剪切文件,示例所示的程序中,点击转移文件按钮,选择文件后,程序即将文件转移至C:根目录下,一具比较典型的与系统相关的小程序。 运行环境:Windows/Delphi7

    DELPHI教学管理系统论文

    本文所作的软件是MIS系统中的教学管理系统,前台用Delphi所开发,后台数据库使用的是SQL,采用的是B/S模式,其内容包括: (1) 登录界面(功能为为不同的用户提供不同的登录界面,实现不同权限的客户不同的操作功能...

    protobuf-delphi:Delphi的协议缓冲区-开源

    该项目包含Delphi协议缓冲区的实现。 从项目中实施了特定项目所需的有限功能。 那时,我认为转移整个项目代码没有任何意义。

Global site tag (gtag.js) - Google Analytics