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.
...全文
1952 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongxu86824 2008-10-08
  • 打赏
  • 举报
回复
来学习的!
iamduo 2008-10-07
  • 打赏
  • 举报
回复
先把输入法,Ctrl+Space 都修改掉。
然后,在Delphi(至少D6)里,按Ctrl+Space会弹出跟VC那种完整代码。
你可以试试这样能不能出东西来。
Jack_Yin 2008-10-07
  • 打赏
  • 举报
回复
我也遇到过类似的问题
原因是 当前编辑的源码不是 当前project的单元.
比如一个project group 中有两个project:project1和projet2,当前project是project1
但是如果 编辑的单元属于project2,那么不会出现代码提示(除非两个project引用相同的unit,则会提示这个uint中的内容,比如定义的函数变量等)
Mit1208 2008-10-07
  • 打赏
  • 举报
回复
新手一般都是装的CNPACK...感觉挺好用的
dnnis1986 2008-10-02
  • 打赏
  • 举报
回复
我也遇到过这种问题
mark
leeky 2008-09-22
  • 打赏
  • 举报
回复
呵呵,看来有一两个兄弟没仔细看帖。
真正不方便之处就在于输入。
另外我也装了cnpack,
至于DataSet.filedbyname这个问题,基本不去理它,因为再在它后面加个“(”会提示的。

主要怀疑对象是Delphi本身了,
俺就是想知道深层的原因……

类似的问题如有时使用NewInputQuery函数会有问题,我的作法就是把它的实现移植到我自己的单元中(要作一些小修改的)。
qdlgx 2008-09-21
  • 打赏
  • 举报
回复
up!up!up!up!up!
gwhdaxia 2008-09-21
  • 打赏
  • 举报
回复
我感觉一般出不来是因为上面代码里出了问题了,可以点运行,看看在那里抱错,把错一改就好了
手指风 2008-09-20
  • 打赏
  • 举报
回复
一般project有出现语法错误的时候都会影响到.
还有像query.filedbyname赋值给变量时filedbyname一般都点不出来的.
反正我觉得不影响编译就ok.怕麻烦的话装个cnpack.
柯本 2008-09-20
  • 打赏
  • 举报
回复
我觉得这是正常的情况,应该每个人都碰到过,一般不会太在意
我一般理解为是delphi本身的问题
JeffChung 2008-09-20
  • 打赏
  • 举报
回复
mark
leeky 2008-09-20
  • 打赏
  • 举报
回复
上面type的定义也略去了,特此说明。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧