«Переименовать элемент управления» в 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 ()).

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

Ссылка, которую я предоставил на Castalia ниже, довольно четко указывает на то, что рефакторинг переименования может быть применен к существующему коду.

Argalatyr 18.10.2008 21:40

Да, но он также ясно указывает на то, что он может переименовывать локальные переменные, параметры, методы и классы ... но не упоминает переименование элементов управления в форме - и я не смог найти способ сделать это, когда загрузил и попробовал его.

Blorgbeard 20.10.2008 00:10

Если вы хотели найти такие «имена компонентов по умолчанию» для всего проекта, попробуйте Peganza Pascal Analyzer (PAL). Он сообщает обо всех компонентах с именами, которые совпадают с именем класса, без буквы T в начале, плюс числовой суффикс (например, ваш пример SpeedButton1).

Warren P 19.12.2011 22:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
3 110
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Рефакторинг Переименовать символ в последних версиях 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+ :)

Blorgbeard 21.10.2008 10:45

Другие вопросы по теме