在Delphi XE中Ctrl+Click功能不起作用

uplii1fm  于 2022-09-21  发布在  其他
关注(0)|答案(8)|浏览(321)

在Delphi7中,每当我按住Ctrl+单击某个函数/过程时,它都会将我带到该函数/过程。但它在Delphi XE上不起作用--至少不能在所有功能上起作用。我在ExtUtils.pas中有一个名为Associate的函数,因为该函数被正确编译,因此编译器可以找到ExtUtils.pas(当然,ExtUtils被添加到USES子句中,其文件夹添加到‘库路径’中)。但当我按住Ctrl键并单击功能或单位名称时,它不会将我带到那里。

有什么办法解决这个问题吗?

UPDATE1:此外,在按住Control键的同时单击函数(在当前单元中声明)不会在声明该函数的接口部分中移动光标。

更新2:
我临时将ExtUtils单元放在项目的文件夹中,现在它可以工作了。因此,Ctrl+Click本身可以工作,但似乎IDE在找到单元时遇到了问题,即使它的文件夹位于库路径和浏览路径中。

类似报道:

http://webcache.googleusercontent.com
http://webcache.googleusercontent.com
http://cc.embarcadero.com/Item/28269
这里有一份报告(见下面的答案)

新测试:
我已经完全卸载了Delphi(并手动删除了剩余的文件和注册表)。然后再次重新安装。除了CodeSite,没有安装其他工具,甚至数据库也没有安装。然后我创建了一个新项目。它包含一个按钮。当我单击该按钮时,它会运行TestMe过程,该过程在一个名为TestUnit.Pas的外部PAS文件中定义。我在库路径和浏览路径中添加了该库的路径。但是Ctrl+Click on TestMe程序仍然不起作用!如果我将鼠标悬停在TestMe过程上,弹出窗口会显示“在TestUnit中声明”,其中“TestUnit”一词是一个蓝色链接。如果我点击它,我会听到Windows系统的声音,但IDE不会把我带到那里(到单元)。

TestMe过程如下:

procedure TestMe;
begin
  Beep(800, 500);
end;

如果我按住Ctrl键并单击Beep程序,它会将我带到Windows.pas。所以,这是奏效的。如果您有不同的测试,请让我知道。

最新情况:
现在它起作用了!没有任何明显的理由!我只是打开和关闭并编译了这个项目。但我没有对Delphi做任何更改,除了这两个:自动保存选项->编辑器文件和项目选项。

最新情况:
这不可能!
因此,现在我可以在按住Ctrl键的同时单击TestMe过程来访问TestUnit.pas文件。因此,我将最初的PAS文件(ExtUtils.pas)移到了TestUnit.pas所在的同一文件夹中,该文件在我的初始测试(在重新安装Delphi之前)中不起作用。你猜怎么着:我可以打开(用Ctrl+单击)到TestUnit.pas,但不能打开ExtUtils.pas!
德尔福的行为如此奇怪和前后不一致!

最新情况:
我编辑了ExtUtils.pas,现在无法再次打开TestUnit.pas。肯·怀特不让我说德尔福可能有臭虫。所以我不能把‘bug’和‘Delphi’一起使用。有人能帮我把这些话拼在一起吗?

最新情况:
我完全删除了对ExtUtils.pas的任何引用--因此我将项目恢复到可以工作的位置(使用TestUnit)。但现在,这个漏洞仍然存在。即使在几秒钟前它还能与TestUnit一起工作,现在它也不能再工作了。

最新情况:
现在我意识到一件重要的事情:在我的源代码中(在测试项目中),我有一行可编译的代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
 TestMe;
end;

这段代码中不会出现蓝点,因为它不会被编译。在程序运行的那几分钟里,我看到了蓝点。我也排除了‘自动保存选项->编辑文件和项目选项’作为这个问题的可能原因。

最新情况:
我已经找到了解决这个问题的方法。几分钟:我将项目和库移动到不同的文件夹中(任何位置都可以)。按住Ctrl+单击可以工作一段时间。如果我把文件放回原来的文件夹里,它甚至还能用。所以,Delphi似乎保留了一些文件的缓存。只要缓存被破坏并保留缓存,Control+Click就不起作用。但当我移动文件时,它必须重新创建缓存,这样它才能正常工作,直到问题再次出现并存储在缓存中。

8yoxcaq7

8yoxcaq71#

我们有5名开发人员在使用Delphi 2010,2名开发人员也在使用XE,我们使用Ctrl-Click键的体验和你一样。它似乎随机停止工作。我们永远找不到解决这一问题的模式或办法。所以我们时不时会听到隔间里传来咒骂。

发生这种情况时,我使用Shift-ctrl-F进行搜索。

西尔万

m4pnthwp

m4pnthwp2#

首先,感谢大家对这个问题的提示。也许这是一个很久以前的问题,但最后,在多次尝试之后,我认为问题的原因实际上是在“项目源代码”中。

IDE版本:Delphi XE

请尝试:

1.在项目选项>>Delphi编译器>>编译中,确保:

调试信息:True

符号参考信息:参考信息
1.在项目源文件(DPK文件,按项目打开>>查看源代码)中,删除{$REFERENCEINFO OFF}或更改为{$REFERENCEINFO ON}

请注意,第二步非常重要,即使完成了第一步,没有第二步也不能浏览源代码。

wfsdck30

wfsdck303#

我正在使用Delphi 5和按住Ctrl键并单击也有问题,我不知道它是否仍然在新的Delphi IDE中工作,但我可以使用CTRL-Shift-UpArrow或DownArrow从声明到实现。希望能有所帮助。

nr9pn0ug

nr9pn0ug4#

在Delphi中一直有这两个截然不同的选项:

1.库路径-编译您的应用时使用。
1.浏览路径-由Code Insight使用,也就是在控件单击标识符时使用。

你需要检查第二个。它必须包括按住Ctrl键并单击时尝试导航的源文件的路径。

hwamh0ep

hwamh0ep5#

我发现,如果我在接口部分使用记录类型,并且它不是由类型表达式定义的,那么按住Ctrl-Click和其他跳转函数(Ctrl+Shift+Up/Down)将不起作用。

type
  TForm1 = class(TForm)
  ...
  public
    Something:record
                A, B:integer;
              end;
    procedure DoSomething;
  end;

使用上面的代码,我不能跳到使用Ctrl+Shift+Down实现该过程。我必须使用的修复方法是:

type
  TMyRecord = record
                A, B:integer;
              end;

  TForm1 = class(TForm)
  ...
  public
    Something:TMyRecord;
    procedure DoSomething;
  end;

使用Delphi XE4进行了测试。

qyzbxkaa

qyzbxkaa6#

将来可以用来作参考。使用Delphi 2010,我发现interface部分中;virtual之前会产生差异;

function MyProc(): String;  overload; virtual;
function MyProc(): Integer; overload; virtual;
//                             >>   ^   <<

;字符可能会中断CTRL+Click(代码洞察)功能。尽管如此,它的编译仍然很好。

ac1kyiln

ac1kyiln7#

(符号引用信息)除非启用调试信息和本地符号(如上所述),否则该选项无效。

代码完成和代码导航功能(Ctrl+Click)仅在符号引用信息设置为引用信息时才起作用。

ttp71kqs

ttp71kqs8#

解决了!

它对我有效,更改Code Insight类型。

https://i.stack.imgur.com/Ka5Ym.png

相关问题