Эксперт по замене компонентов GExpert не заменяет текст в файле формы (*.dfm)

Я использую Delphi 2010 и стабильную версию GExperts 1.35.

Тестирую эксперт "Замена компонентов".

Я добавляю основную форму и дополнительную форму. На каждом есть три TEdit.

Я использую эксперта по замене компонентов, чтобы заменить все TEdit на TRzEdit. Я проверяю Заменить все компоненты на всех формах проекта.

Он работает, он заменяет их всех. Однако это ничего не делает с файлом DFM. Как мне заставить его заменить эти экземпляры.

Если я сохраняю, компилирую или перестраиваю, я получаю ошибки.

Если я попытаюсь просмотреть форму как текст после замены, я получаю ошибки.

Может кто-нибудь объяснить мне шаги, чтобы сделать эту работу?

Спасибо


person Shane    schedule 29.12.2011    source источник
comment
Лучше задать вопрос на форуме GExperts.   -  person Uli Gerhardt    schedule 30.12.2011


Ответы (2)


Вы можете столкнуться с этой ошибкой при попытке скопировать свойство Touch из старого компонента в новый, но у нее есть обходной путь, который вы можете довольно легко протестировать: http://tech.groups.yahoo.com/group/GExpertsDiscuss/message/3994

Подробности:

В Delphi 2010 и XE есть ограничение/ошибка: если вы назначаете свойство Component.Touch из одного компонента другому и уничтожаете исходный компонент, новый компонент становится поврежденным (это не похоже на ссылки на компоненты/интерфейсы, где они либо автоматически исправляются сами или подсчитываются ссылки).

На данный момент вы можете назначить двунаправленную карту свойств компонента замены из TPanel.Touch в TGroupBox.Touch (используйте два заменяемых компонента в вашем конкретном случае), которая помечена как отключенная карта свойств, и это будет работать вокруг этого проблема. В следующем выпуске мы больше не будем пытаться назначать это свойство.

GExperts 1.36 также теперь доступен и включает обходной путь для этой проблемы. Обходной путь находится в системе контроля версий GExperts и тестируется уже несколько недель.

person Anagoge    schedule 30.12.2011

Я только что попробовал это с Delphi XE и GExperts 1.35, и теперь он действительно дает сбой даже после одного «Заменить выбранное». (раньше работало нормально).

Кажется, что использование скрытого меню Project | Clear Unit Cache сразу после Replace Components, а затем полная сборка перед попыткой Save/Compile/View As Text... решает проблему.

Я думаю, что это меню всплыло с cnPack. У меня его нет и я не могу гарантировать, но вы можете легко сделать это самостоятельно, добавив следующий модуль в один из ваших установленных пакетов:

unit FGEnableHiddenMenus;

interface

procedure Register;

implementation

uses
  Classes, Forms, Menus;

procedure Register;
var
  Comp: TComponent;
begin
  //Make a hidden menu item visible
  Comp := Application.MainForm.FindComponent('ProjectClearUnitCacheItem');
  if Comp is TMenuItem then
    TMenuItem(Comp).Visible := True;
end;

end.

Источник: старые добрые дела Брайана Лонга

Обновление: мне пришлось заменить пару TEdit на TDBEdit в нашем основном проекте на работе, и этот трюк сработал.
Но в новом проекте с 3 формами мне постоянно не удавалось написать/зафиксировать/ сохраните изменения в последней форме (в той же среде).
К вашему сведению, я пробовал с DDevExtensions 2.5 и IDEFixPack 4.6.1 и без них.

Update2: Покопался на форуме GExperts, как предложил Ульрих, и наконец нашел возможное объяснение. Новое свойство Touch не любит копироваться из одного компонента в другой при уничтожении источника (вызывая AV).
Предлагаемый обходной путь — выполнить двунаправленное сопоставление в настройках эксперта, чтобы отключить копирование для этого свойства:

введите здесь описание изображения

person Francesca    schedule 29.12.2011
comment
Я последовал за твоими шагами. Теперь в моем меню есть пункт «Очистить кэш устройств». Я следовал вашим шагам, но получаю те же ошибки. - person Shane; 30.12.2011
comment
Хм. Правильно, я только что попробовал еще раз новый проект на другой машине, и он все еще падает. Я попробую еще раз с другим проектом позже. Поскольку он жалуется на доступ к файлу dfm, я подумал, что это проблема с кешем, но, возможно, мне просто повезло, когда я попытался с этим другим проектом, и это решило проблему. - person Francesca; 30.12.2011