Лучший способ заменить визуальный компонент в Delphi - PullRequest
9 голосов
/ 27 октября 2008

В форме Delphi я хотел бы заменить один визуальный компонент другим. Пример: я хочу заменить компонент Panel на ElPanel из стороннего пакета.

Я бы хотел, чтобы все идентичные свойства и события первого компонента были перенесены в новый, а все компоненты, принадлежащие первому компоненту (например, панели инструментов, заметки, строки состояния и т. Д.), Оказались в новый компонент именно там, где они были на первом.

Есть ли лучший / самый простой способ сделать это, кроме добавления нового компонента в форму и тщательной передачи каждого свойства, события и компонента в нее один за другим?

Ответы [ 7 ]

12 голосов
/ 27 октября 2008

Я делаю это следующим образом:

  1. Щелкните правой кнопкой мыши форму и выберите (Показать как текст).
  2. Нажмите Ctrl + F, чтобы найти имя класса Component, например TPanel, и заменить его на TElPanel
  3. Переключиться обратно на форму (просмотреть как форму)
  4. В разделе интерфейса замените TPanel на TElPanel.

если у вас есть много компонентов, использующих GExperts, будут более выполнимые решения.

10 голосов
/ 27 октября 2008

Вы можете использовать GExperts или вы можете сделать это вручную.

Чтобы сделать это вручную, откройте .dfm в блокноте и замените все имена классов. (Замените TPanel на TElPanel, например). После внесения всех изменений откройте файл .pas с помощью Блокнота и сделайте то же самое.

Убедитесь, что вы добавили необходимые единицы в ваше предложение использования.

Затем откройте форму в IDE и удалите все несоответствующие события или неизвестные проблемы со свойством.

6 голосов
/ 27 октября 2008

Если я вспомню, отличный плагин GExperts делает это. Щелкните правой кнопкой мыши форму и выберите «Заменить компоненты». http://www.gexperts.org

2 голосов
/ 11 ноября 2008

ИМХО, большой недостаток компонента Replace GExpert заключается в том, что он меняет порядок компонентов в исходном коде. Это не очень дружелюбно к VCS. : -)

1 голос
/ 11 ноября 2008

Для преобразования между текстовым и двоичным форматами dfm используйте утилиту convert.exe в каталоге Delphi bin \. - Тим Книп (28 октября в 4:15)

Вы также можете использовать контекстное меню дизайнера форм - по крайней мере, в BDS 2006. Это последний пункт меню ("Text-DFM" в немецкой IDE).

1 голос
/ 30 октября 2008

Если в контейнере есть другие компоненты, выполнение этой замены с помощью GExperts вызовет некоторые уродливые исключения и, возможно, неожиданное поведение в IDE.
Таким образом, лучшее решение - отредактировать файл .dfm там, где вы хотите (внутри или за пределами IDE), и вручную заменить типы компонентов, которые вы хотите изменить. Может быть, это тоже вызовет некоторые исключения, но IDE будет управлять ими.
Если вы сделаете это внутри IDE, после переключения в режим конструктора, если вы сразу же сохраните .dfm, IDE попросит вас изменить тип переменных, относящихся к компонентам, к которым вы прикоснулись, освободив вас для этого.

0 голосов
/ 08 февраля 2011

В моем проекте мне пришлось преобразовать несколько десятков форм из одного набора компонентов в другой. Я создал небольшой скрипт на Perl для преобразования компонентов и его свойств и выполнения всех необходимых отображений. Сценарий - это быстрое и грязное решение, но оно легко настраивается. Он сканирует все файлы dfm и pas в директории проекта и конвертирует определения компонентов dfm в соответствии с правилами, которые вы должны предоставить в процедурах / событиях ObjectBeginFound, PropertyFound, ObjectEndFound.

Файлы DFM должны быть в текстовом режиме. Проверено на Delphi 5 файлов. Я не знаю, будет ли это совместимо с более новыми версиями. Пожалуйста, присылайте сообщения, если вы найдете это.

ПРИМЕНЕНИЕ: perl.exe cxdfm.pl> logfile.txt

СКАЧАТЬ ССЫЛКУ http://dl.dropbox.com/u/15887789/cxdfm.pl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...