Эксперт по замене компонентов GExpert не заменяет текст в файле формы (* .dfm) - PullRequest
2 голосов
/ 29 декабря 2011

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

Я тестирую эксперта "Заменить компоненты".

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

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

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

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

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

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 декабря 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).
Предлагаемый обходной путь - сделать двунаправленное сопоставление в настройках эксперта, чтобы отключить копирование для этого свойства.:

enter image description here

1 голос
/ 31 декабря 2011

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

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

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

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

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

...