Есть ли опция Delphi для "блокировки" дизайна (макета) формы от случайных изменений?

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

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

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

Спасибо

4 ответа

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

Helo

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

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

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

РЕДАКТИРОВАТЬ:

Я нашел кусок кода, который может вам помочь. Извлечено из 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;

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

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

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

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