Переименовать элемент управления в Delphi 7?

В ответ на этот вопрос, Я работаю над большой кодовой базой Delphi 7, которая не очень хорошо написана.

Я смотрю на такой код, как на небольшой пример:

  if FMode=mdCredit then begin
    Panel8.Caption:='Credit';
    SpeedButton3.Enabled:=false;
    SpeedButton4.Enabled:=false;
    SpeedButton5.Enabled:=false;
    SpeedButton5.Enabled:=false;
    SpeedButton6.Visible:=False;
    SpeedButton10.Visible:=False;
  end;

Далее следуют еще 6 очень похожих блоков. Все в этом стиле. Поэтому я думаю, что это было бы намного легче читать, если бы элементы управления были названы разумно.

Я мог бы просто использовать глобальный поиск и замену, но я столкнусь с проблемами, когда несколько форм используют одни и те же имена, а также мне нужно быть осторожным, чтобы изменить (например) SpeedButton10 перед SpeedButton1.

Есть ли какой-нибудь плагин, который может выполнить для меня «умное» переименование?

Редактировать:
Извините, я должен был упомянуть об этом раньше: я попробовал функцию «Переименовать компонент» в GExperts и Castalia, но обе они, похоже, предназначены для использования при первоначальном добавлении компонента в форму. .

Они не выполняют поиск+замену в коде и не переименовывают существующие события (SpeedButtonXClick() -> cmdCreditClick()).

Я что-то пропустил?


person Blorgbeard    schedule 16.10.2008    source источник
comment
Ссылка, которую я предоставил Castalia ниже, довольно четко указывает на то, что рефакторинг переименования может быть применен к существующему коду.   -  person Argalatyr    schedule 18.10.2008
comment
Да, но это также ясно указывает, что он может переименовывать локальные переменные, параметры, методы и классы... но не упоминает переименование элементов управления в форме - и я не смог найти способ сделать это, когда скачал и попробовал.   -  person Blorgbeard    schedule 20.10.2008
comment
Если вы хотели найти такие имена компонентов по умолчанию для всего проекта, проверьте Peganza Pascal Analyzer (PAL). Он сообщает обо всех компонентах с именами, которые совпадают с именем класса, без начального T, плюс числовой суффикс (например, ваш пример `SpeedButton1')   -  person Warren P    schedule 19.12.2011


Ответы (5)


Не совсем плагин, но вы можете использовать одну из последних версий Delphi и функцию рефакторинга. Возможно, вы могли бы использовать бесплатную Turbo Edition . . .

Вы можете попробовать ModelMaker для Delphi 7. Он поддерживает рефакторинг, который может вам подойти.

person Jim McKeeth    schedule 16.10.2008

Рефакторинг Rename Symbol в последних версиях Delphi будет работать для всех модулей проекта. Поскольку вы говорите Delphi 7, я думаю, это вам не поможет, и в прошлом я просто использовал TextPad , отличный редактор, который (как и многие другие) выполняет мощный поиск/замену в файлах (с подтверждением или без него).

ХТН

Редактировать: Крейг прав — это сделают GExperts, как и Castalia.

person Argalatyr    schedule 16.10.2008

Я думаю, что GExperts имеет такой поиск и замену.

person Craig    schedule 16.10.2008

Не знаю, сработает ли это в вашем случае, но вы можете попытаться загрузить свой проект в более позднюю версию Delphi, которая имеет возможность рефакторинга, и использовать его для изменения имен компонентов, заботясь обо всех зависимостях. Тогда вам просто нужно сделать diff и посмотреть, что изменилось.

person Francesca    schedule 16.10.2008

Почему бы не использовать синхронное редактирование? Его часть IDE (по крайней мере, в 2006+):

Функция Sync Edit позволяет одновременно редактировать идентичные идентификаторы в выбранном коде. Например, в процедуре, содержащей три экземпляра label1, вы можете отредактировать только первый экземпляр, а все остальные экземпляры изменятся автоматически. (скопировано из справки BDS2006)

Сначала вам придется переименовать ваши компоненты, но это избавит вас от большинства проблем. Я предпочитаю мастер переименования компонентов GExperts по мере их добавления в форму, но, как вы указали, он работает только тогда, когда компонент добавляется в форму, и не затрагивает индивидуальное использование компонентов в коде. Причина переименования компонентов в первую очередь заключается в том, что когда вы выбираете весь блок кода для переименования, он не будет вносить соответствующие изменения в файл dfm... только ваш локально выбранный блок кода.

Чтобы использовать эту функцию, выберите весь блок реализации, затем нажмите кнопку в желобе с двумя карандашами, «связанными» линией... затем нажимайте вкладку, пока не получите первый, который хотите отредактировать... при изменении его имя, оно изменится глобально в остальной части вашего исходного файла. Нажмите ESC, когда закончите.

person skamradt    schedule 20.10.2008
comment
Почему бы не синхронизировать редактирование? Потому что я использую Delphi 7, а не 2006+ :) - person Blorgbeard; 21.10.2008