9

在 Delphi 7 中,每当我控制+单击一个函数/过程时,它都会将我带到该函数/过程。但它不适用于 Delphi XE - 至少不适用于所有功能。我在 ExtUtils.pas 中有一个名为 Associate 的函数。该函数已正确编译,因此编译器可以找到 ExtUtils.pas(当然,ExtUtils 被添加到 Uses 子句中,并且它的文件夹被添加到“库路径”中)。但是当我控制+单击功能或单位名称时,它并没有把我带到那里。

有任何解决这个问题的方法吗?


UPDATE1:此外,Control+Click 一个函数(在当前单元中声明)不会在声明函数的 INTERFACE 部分移动光标。

UPDATE2:
我暂时将 ExtUtils 单元放在项目的文件夹中,现在它可以工作了。因此,Control+Click 本身可以工作,但 IDE 似乎无法找到该单元,即使它的文件夹存在于库路径和浏览路径中。

类似报告:
http ://webcache.googleusercontent.com
http://webcache.googleusercontent.com
http://cc.embarcadero.com/Item/28269
此处有一份报告(请参阅下面的答案)


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

TestMe 程序是这样的:

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

如果我控制+单击 Beep 程序,它会将我带到 Windows.pas。所以,这是有效的。如果您想进行其他测试,请告诉我。

更新:
现在它可以工作了!没有任何明显的原因!我只是打开和关闭并编译了项目。但是除了这两个之外,我对 Delphi 没有做任何更改:AutoSave options-> Editor files 和 Project Options。

更新:
这不可能!!!
所以,现在我可以在控制+单击 TestMe 程序时访问 TestUnit.pas 文件。因此,我将初始测试(在 Delphi 重新安装之前)中不想工作的原始 PAS 文件(ExtUtils.pas)移到了 TestUnit.pas 所在的同一文件夹中。猜猜看:我可以打开(通过控制+单击)TestUnit.pas 但不能打开 ExtUtils.pas !!!
德尔福的行为如此奇怪和不一致!

更新:
我编辑了 ExtUtils.pas,现在我无法再次打开 TestUnit.pas。Ken White 不会让我说 Delphi 可能有错误。所以我不能将“错误”与“德尔福”一起使用。谁能帮我把这些词拼在一起?

更新:
我完全删除了对 ExtUtils.pas 的任何引用 - 所以我将项目恢复到它工作的点(使用 TestUnit)。但是现在错误仍然存​​在。即使在它与 TestUnit 一起工作前几秒钟,它现在也不再工作了。

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

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

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

更新:
我找到了解决问题的方法......几分钟:我将项目和库移动到不同的文件夹中(任何位置都可以)。控制+单击将工作一段时间。如果我将文件放回原始文件夹,它甚至可以工作。因此,Delphi 似乎保留了某些文件的某种缓存。只要缓存被破坏并保留缓存,控制+单击就不会起作用。但是当我移动文件时,它必须重新创建该缓存,以便它可以工作,直到问题再次出现并存储在缓存中。

4

7 回答 7

7

在这里,我们有 5 位开发人员使用 Delphi 2010,另外 2 位也使用 XE,我们正在经历与您一样的 Ctrl 键单击。它似乎随机停止工作。我们永远无法找到一种模式或解决方法。所以我们不时听到从隔间传来的咒骂声……

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

西尔万

于 2011-06-07T14:32:37.660 回答
3

I'm using Delphi 5 and the Ctrl-click have also problems, i don't know if it still working in the new delphi IDEs but i can go from declaration to implementation using CTRL-SHIFT-UpArrow or DownArrow. Hope it helps.

于 2014-03-06T09:06:47.410 回答
3

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

IDE版本:德尔福XE

请试试:

  1. 在 Project Options >> Delphi Compiler>>Compiling 中,确保:

    调试信息:真

    符号参考信息:参考信息

  2. 在 Project Source 文件(dpk 文件,由 Project >> View Source 打开)中, 删除 {$REFERENCEINFO OFF} 或更改为{$REFERENCEINFO ON}

注意第2步很重要,即使第1步完成了,没有第2步还是不能浏览源码。

于 2012-06-01T05:30:19.217 回答
2

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

  1. 库路径——在编译你的应用程序时使用。

  2. 浏览路径– 由 Code Insight 使用,即在控件单击标识符时也使用。

你需要检查第二个。它必须包含您尝试使用Ctrl+Click 导航的源文件的路径。

于 2011-06-07T07:57:25.943 回答
1

我发现如果我在界面部分使用记录类型并且它不是由类型表达式定义的,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;

用德尔福 XE4 测试。

于 2013-09-10T23:17:22.703 回答
1

备查。使用 Delphi 2010,我发现本节;前面的内容有所不同;virtualinterface

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

;字符可能会破坏CTRL+Click(代码洞察)功能。尽管如此,编译得很好。

于 2014-04-23T12:50:47.230 回答
0

( Symbol Reference info ) 除非启用了调试信息和本地符号(见上文),否则此选项无效。

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

于 2014-11-25T07:24:36.103 回答