Следуя вопросу это, я работаю над большой кодовой базой 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 ()).
Я что-то упустил?
Да, но он также ясно указывает на то, что он может переименовывать локальные переменные, параметры, методы и классы ... но не упоминает переименование элементов управления в форме - и я не смог найти способ сделать это, когда загрузил и попробовал его.
Если вы хотели найти такие «имена компонентов по умолчанию» для всего проекта, попробуйте Peganza Pascal Analyzer (PAL). Он сообщает обо всех компонентах с именами, которые совпадают с именем класса, без буквы T в начале, плюс числовой суффикс (например, ваш пример SpeedButton1).





Рефакторинг Переименовать символ в последних версиях Delphi будет работать во всех модулях проекта. Поскольку вы говорите Delphi 7, я думаю, это вам не поможет, и в прошлом я просто использовал TextPad, отличный редактор, который (как и многие другие) будет выполнять мощный поиск / замену файлов (с подтверждением или без него).
HTH
Обновлено: Крейг прав - GExperts сделает это, как и Castalia.
Я думаю, что GExperts имеет такой поиск и замену.
Не знаю, может ли это сработать в вашем случае, но вы можете попробовать загрузить свой проект в более позднюю версию Delphi, которая имеет возможность рефакторинга, и использовать ее для изменения имен компонентов, заботясь обо всех зависимостях. Тогда вам просто нужно сделать разницу и посмотреть, что было изменено.
Не совсем плагин, но вы можете использовать одну из последних версий Delphi и функцию рефакторинга. Может быть, вы могли бы использовать бесплатный Турбо издание. . .
Вы можете попробовать ModelMaker для Delphi 7. В нем есть поддержка рефакторинга, которая может сработать для вас.
Почему бы не использовать Sync Edit? Его часть IDE (по крайней мере, в 2006+):
The Sync Edit feature lets you simultaneously edit indentical identifiers in selected code. For example, in a procedure that contains three occurrences of label1, you can edit just the first occurrence and all the other occurrences will change automatically. (copied from the BDS2006 Help)
Сначала вам придется переименовать свои компоненты, но это избавит вас от боли. Я предпочитаю мастер GExperts для переименования компонентов по мере их добавления в форму, но, как вы отметили, он работает только тогда, когда компонент добавлен в форму, и не затрагивает отдельные случаи использования компонентов в коде. Причина для переименования компонентов в первую очередь заключается в том, что когда вы выбираете весь блок кода для выполнения переименования, он не вносит соответствующие изменения в файл dfm ... только ваш локально выбранный блок кода.
Чтобы использовать эту функцию, выберите весь свой блок реализации, затем нажмите кнопку в желобе, где два карандаша «связаны» линией ... затем нажимайте вкладку, пока не получите первый блок, который хотите отредактировать ... когда вы измените его имя изменится глобально в остальной части исходного файла. Когда закончите, нажмите ESC.
Почему бы не синхронизировать редактирование? Потому что я использую Delphi 7, а не 2006+ :)
Ссылка, которую я предоставил на Castalia ниже, довольно четко указывает на то, что рефакторинг переименования может быть применен к существующему коду.