Есть ли опция Delphi для «блокировки» дизайна (макета) формы от случайных изменений? - PullRequest
8 голосов
/ 30 марта 2011

После многих лет разработки на Delphi у меня теперь есть сотни форм, которые можно использовать в наших Приложениях. Компиляция варьируется от Delphi 7 до XE, поэтому одна форма может быть открыта в любой IDE. Хорошо известное добавление свойства Explicitxxx после Delphi 7 имеет решения, позволяющие избежать формы, случайно получающей свойства, которые более ранние компиляторы не могут обработать (например, DDevExtensions Андреаса ), но я бы хотел более позитивный «переключатель», который предотвращал Delphi от создания или сохранения любых модификаций формы вообще. Период.

Конечно, вы можете использовать флаг только для чтения, и система контроля версий предоставляет дополнительные средства, в частности, для наблюдения за тем, что такая модификация произошла. Хотя мне бы очень хотелось, чтобы это был переключатель {$ LockDFM}, который я мог бы вставить в модуль формы, или параметр контекстного меню при просмотре макета формы.

Кто-нибудь может придумать изящный способ достижения этого?

Спасибо

Ответы [ 4 ]

7 голосов
/ 30 марта 2011

Единственное, о чем я могу думать (кроме упомянутых вами опций только для чтения / VCS), это опция Lock Controls меню Правка. Это устанавливает флаг, который предотвращает перемещение элементов управления. Я не уверен, насколько хорошо это будет на самом деле, потому что я никогда не пробовал; Я просто знаю, что это там.

3 голосов
/ 31 марта 2011

Helo

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

Но есть одна вещь, которую вы можете сделать: вы можете написать свое собственное дополнение Delphi, используя OTA (Open Tools API). Я знаю, что есть несколько классов, которые могут уведомить вас, когда что-то будет сохранено. Вы можете перехватить это событие и решить, хотите ли вы сохранить его (в вашем случае, если это DFM).

Кстати, если у вас есть планы сделать такой компонент, скажите мне. :)

EDIT:

Я нашел фрагмент кода, который может вам помочь. Извлечено из http://www.gexperts.org/otafaq.html

  TMyFormNotifier = class(TNotifierObject, IOTANotifier, IOTAFormNotifier)
  protected
     procedure FormActivated;
     procedure FormSaving;
     procedure ComponentRenamed(ComponentHandle: TOTAHandle; const OldName, NewName: string);
  end;
1 голос
/ 30 ноября 2014

В основном нет. Помимо явных свойств размера и позиции f'ing (простите за мой французский), которых IMO никогда не должно было быть в .dfm, есть некоторые сторонние компоненты, которые изменят вещи только после просмотра формы. F.x. Компоненты TMS обновят номер версии, даже если вы ничего не изменили со времени предыдущей версии их компонентов.

1 голос
/ 30 марта 2011

Во время разработки есть Edit-> Lock Control.

LE: это только для изменения размера / перемещения элементов управления на формах. Что касается ObjectInspector, я не знаю, есть ли что-то, что может «заблокировать» установленные там значения (поэтому разработчик не может их изменить).

...