关于这个错误: 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
  //此处略
typefunction GetZoneTimeDiff():real;
function LocalTimeToGreenwichTime(LocalTime:TDateTime):TDateTime;
//系统参数
procedure LoadSysSetVarFromDisk();
procedure SaveSysSetVar2Disk();
   //略掉其它许多函数……
var
  //略……
implementationfunction 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.

解决方案 »

  1.   

    上面type的定义也略去了,特此说明。
      

  2.   

    我觉得这是正常的情况,应该每个人都碰到过,一般不会太在意
    我一般理解为是delphi本身的问题
      

  3.   

    一般project有出现语法错误的时候都会影响到.
    还有像query.filedbyname赋值给变量时filedbyname一般都点不出来的.
    反正我觉得不影响编译就ok.怕麻烦的话装个cnpack.
      

  4.   

    呵呵,看来有一两个兄弟没仔细看帖。
    真正不方便之处就在于输入。
    另外我也装了cnpack,
    至于DataSet.filedbyname这个问题,基本不去理它,因为再在它后面加个“(”会提示的。主要怀疑对象是Delphi本身了,
    俺就是想知道深层的原因……类似的问题如有时使用NewInputQuery函数会有问题,我的作法就是把它的实现移植到我自己的单元中(要作一些小修改的)。
      

  5.   

    我也遇到过类似的问题
    原因是 当前编辑的源码不是 当前project的单元.
    比如一个project group 中有两个project:project1和projet2,当前project是project1
    但是如果 编辑的单元属于project2,那么不会出现代码提示(除非两个project引用相同的unit,则会提示这个uint中的内容,比如定义的函数变量等) 
      

  6.   

    先把输入法,Ctrl+Space 都修改掉。
    然后,在Delphi(至少D6)里,按Ctrl+Space会弹出跟VC那种完整代码。
    你可以试试这样能不能出东西来。
      

  7.   

    新手一般都是装的CNPACK...感觉挺好用的