Функция Control + Click не работает в Delphi XE - PullRequest
8 голосов
/ 06 июня 2011

В Delphi 7 всякий раз, когда я контролирую + щелкаю функцию / процедуру, она приводит меня к этой функции / процедуре.Но это не работает в Delphi XE - по крайней мере, не со всеми функциями.У меня есть функция Associate в ExtUtils.pas. Функция правильно скомпилирована, поэтому компилятор может найти ExtUtils.pas (и, конечно, ExtUtils добавляется в предложение Uses, а его папка добавляется в «Путь к библиотеке»).Но когда я контролирую + щелкаю по функции или названию устройства, это не приводит меня туда.

Любой способ исправить это?


ОБНОВЛЕНИЕ1: Кроме того, Control + щелчок по функции (объявить в текущем блоке) не перемещает курсор в разделе ИНТЕРФЕЙС, где функцияобъявлен

UPDATE2:
Я временно положил модуль ExtUtils в папку проекта, и теперь он работает.Итак, Control + Click сам по себе работает, но кажется, что в среде IDE возникают проблемы с поиском устройства, даже если его папка присутствует в пути к библиотеке и пути просмотра.

Подобные отчеты:
http://webcache.googleusercontent.com
http://webcache.googleusercontent.com
http://cc.embarcadero.com/Item/28269
Один отчет прямо здесь (см. Ответы ниже)


Новый тест:
Я полностью удалил Delphi (и вручную удалить файлы и остатки реестра).Затем переустановил снова.Никаких дополнительных инструментов, кроме CodeSite, не было установлено, даже базы данных.Затем я создал новый проект.Содержит кнопку.Когда я нажимаю кнопку, запускается процедура TestMe, которая определена во внешнем файле PAS с именем TestUnit.Pas.Я добавил путь к этой библиотеке в Путь к библиотеке и Путь просмотра.Но процедура Control + Click на TestMe все еще не работает!Если навести указатель мыши на процедуру TestMe, всплывающее окно сообщает «Объявлено в TestUnit», где слово «TestUnit» представляет собой синюю ссылку.Если я нажимаю на нее, я слышу системный звук Windows, но IDE не доставляет меня туда (к устройству).

Процедура TestMe такая:

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

Если я контролирую +щелкните по процедуре Beep, она приведет меня к Windows.pas.Итак, это работает.Пожалуйста, дайте мне знать, если вы имеете в виду другой тест.

ОБНОВЛЕНИЕ:
И теперь это работает!Без видимых причин!Я просто открыл и закрыл и скомпилировал проект.Но я не делаю изменений в Delphi, кроме этих двух: параметры автосохранения-> файлы редактора и параметры проекта.

ОБНОВЛЕНИЕ:
Это не может быть !!!
Итак, теперь я могу получить доступ к TestUnit.Pas файл, когда я контролирую + нажмите на процедуру TestMe.Итак, я переместил исходный файл PAS (ExtUtils.pas), который не хотел работать в моем первоначальном тесте (до переустановки Delphi), в ту же папку, где находится TestUnit.pas.Угадайте, что: я могу открыть (с помощью control + click) TestUnit.pas, но не ExtUtils.pas !!!!
Delphi действует так странно и непоследовательно!

ОБНОВЛЕНИЕ:
Я редактировал ExtUtils.pas и теперь я не могу открыть ОПЯТЬ TestUnit.pas.Кен Уайт не позволит мне сказать, что у Дельфи могут быть ошибки.Поэтому я не могу использовать «ошибку» вместе с «Delphi».Кто-нибудь может соединить эти слова для меня?

ОБНОВЛЕНИЕ:
Я полностью удалил любую ссылку на ExtUtils.pas - поэтому я восстановил проект до того места, где он работал (с TestUnit).Но теперь ошибка сохраняется.Даже если за несколько секунд до этого он работал с TestUnit, теперь он снова не работает.

ОБНОВЛЕНИЕ:
Теперь я понимаю важную вещь: в моем исходном коде (в тестовом проекте) у меня есть одна строка компилируемого кода:

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

Синие точки делаютне появляется для этого кода - так как он не был бы скомпилирован.В те несколько минут, когда программа работала, я видел синие точки.Я также исключил «Параметры автосохранения-> Файлы редактора и Параметры проекта» в качестве возможной причины этой проблемы.

ОБНОВЛЕНИЕ:
Я нашел способ решить проблему ... на несколько минут: я перемещаю проект и библиотеку в другую папку (в любом месте это будет сделано). Контрол + щелчок будет работать некоторое время. Это даже работает, если я помещаю файлы обратно в исходную папку. Итак, похоже, что Delphi хранит некоторый кеш некоторых файлов. До тех пор, пока кеш не работает, и он сохраняет кеш, Ctrl + click не будет работать. Но когда я перемещаю файлы, он должен воссоздать этот кеш, чтобы он работал до тех пор, пока проблема не появится снова и не сохранится в кеше.

Ответы [ 7 ]

7 голосов
/ 07 июня 2011

Здесь мы 5 разработчиков, использующих Delphi 2010, и 2, также использующих XE, и мы испытываем то же самое с Ctrl-щелчком, что и вы.Кажется, перестать работать случайно.Мы никогда не могли найти образец или решение для этого.Так что время от времени мы слышим ругательства из кабин ...

Когда это происходит, я использую shift-ctrl-F, чтобы выполнить поиск.

Сильвен

3 голосов
/ 06 марта 2014

Я использую Delphi 5, и у Ctrl-click также есть проблемы, я не знаю, работает ли он в новых средах Delphi, но я могу перейти от декларации к реализации, используя CTRL-SHIFT-UpArrow или DownArrow.Надеюсь, это поможет.

3 голосов
/ 01 июня 2012

Во-первых, спасибо всем за подсказки по этой проблеме. Возможно, это вопрос давным-давно, но, наконец, после многократных попыток, я думаю, что причина проблемы, собственно, в «исходном коде проекта»

Версия IDE: Delphi XE

пожалуйста, попробуйте:

  1. в опциях проекта >> Delphi Compiler >> Компиляция, убедитесь, что:

    Отладочная информация: правда

    Символ Справочная информация: Справочная информация

  2. в исходном файле проекта (файл dpk, открытый в Project >> View Source), удалить {$ REFERENCEINFO OFF} или измените на {$ REFERENCEINFO ON}

Обратите внимание, что шаг 2 очень важен, даже шаг 1 выполнен, он все еще не может просматривать источник без шага 2.

2 голосов
/ 07 июня 2011

В Delphi всегда были следующие две разные опции:

  1. Путь к библиотеке - используется при компиляции приложения.

  2. Путь просмотра - используется Code Insight, т. Е. Когда идентификаторы также щелкают по элементам управления.

Вам необходимо проверить второй.В нем должны быть указаны пути к исходным файлам, по которым вы пытаетесь перейти с помощью Ctrl + Click.

1 голос
/ 23 апреля 2014

Для дальнейшего использования.Используя Delphi 2010, я обнаружил, что ; перед virtual в разделе interface имеет значение;

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

Этот ; символ может разбить CTRL +Нажмите (понимание кода) функциональность.Тем не менее компилируется нормально.

1 голос
/ 11 сентября 2013

Я обнаружил, что если я использую тип записи в разделе интерфейса, и он не определен выражением типа, 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.

0 голосов
/ 25 ноября 2014

( Справочная информация о символах ) Этот параметр не действует, если не включена информация об отладке и локальные символы (см. Выше).

Функции автозавершения кода и навигации по коду (Ctrl + щелчок) работают только в том случае, если для символа справочной информации установлено значение Справочная информация.

...