delphi不能自动提示(代码自动完成),请教高手深层原因
leeky 2008-09-20 02:31:26 关于这个错误: Pascal Error] XXXXX.pas: Unable to invoke Code Completion due to errors in source code
我们已知有以下情形:
1、代码确实有错误,不错才怪;
2、路径问题,比如程序使用了某个包,而这个包的不同版本分布在硬盘的不同路径,在程序中使用了B版本,但搜索路径设置的是A版本的路径,这点还真要费功夫去查(没经验的可能想几天也毫无收获);
3、排除以上两种情况,本人碰到的情形,从工程上来说我已经知道如何避免(算是已解决),但我想知道更深层的原理,或者哪怕是delphi的bug也罢,请高手指教。
问题:下面单元中实现了一些函数,发现在一些函数的实现时,Delphi不能自动提示,给出如文章开始时的错误消息。在本例中为:在函数LoadSysSetVarFromDisk的实现中,键入“SysSettings.”后,delphi不能激发代码自动完成功能,以让我选择SysSettings记录中的变量,但这种“错误”不影响我手动方法完成代码,并正确build。
后来发现:把这两个函数function GetZoneTimeDiff():real; function LocalTimeToGreenwichTime(LocalTime:TDateTime):TDateTime;
的实现代码 放在单元的最后,实现LoadSysSetVarFromDisk等函数时就没有问题了,似乎最重要的是把GetZoneTimeDiff函数要放到后面去。
请高手分析讲解(很久前也碰到过,当时解决了,没记录,今天特意写出来,以免下次碰到又花时间)
unit UnitType;
interface
uses
Windows,UnitWeighDev,Messages,IniFiles,SysUtils,Forms,ComCtrls,EncdDecd; //,
const
//此处略
type
function GetZoneTimeDiff():real;
function LocalTimeToGreenwichTime(LocalTime:TDateTime):TDateTime;
//系统参数
procedure LoadSysSetVarFromDisk();
procedure SaveSysSetVar2Disk();
//略掉其它许多函数……
var
//略……
implementation
function GetZoneTimeDiff():real; //***放在最开始实现将影响后面的函数实现时的提示。
var //格林威治时间与本时区时间的差單位:天 (ZoneInfo.Bias为分钟数)
ZoneInfo : _time_zone_information;
begin
GetTimeZoneInformation(ZoneInfo);
result := ZoneInfo.Bias /(24*60);
end;
function LocalTimeToGreenwichTime(LocalTime:TDateTime):TDateTime;
begin
Result:= LocalTime+ GetZoneTimeDiff();
end;
procedure LoadSysSetVarFromDisk();
var
tmpStr : string;
Inifile: TInifile;
begin
IniFile := TIniFile.Create(IniFileName);
SysSettings.StationName := Inifile.ReadString('System','StationName','');
//其它代码略……
Inifile.Free;
end;
//其它函数实现……
//……
end.