Delphi XE2 меняет DFM, хотя ничего не изменилось
Возможный дубликат:
Есть ли опция Delphi для "блокировки" дизайна (макета) формы от случайных изменений?
Мы недавно изменились, изменили с StarTeam на SVN, но у нас есть проблемы с нашими файлами DFM. Похоже, Delphi изменяет файлы DFM, хотя мы на самом деле не меняем форму.
Например: я открываю существующий файл, меняю активную вкладку, сохраняю файл, возвращаю вкладку обратно в исходное состояние и сохраняю снова. Когда я различаю два файла, меняются PixelsPerInch, TextHeight, Top и многие другие значения? Небольшой пример моего кода:
PixelsPerInch = 96
TextHeight = 13
inherited PageControl1: TPageControl
Top = 105
Height = 629
Margins.Left = 5
Margins.Top = 5
Margins.Right = 5
Margins.Bottom = 5
HotTrack = True
inherited TabSheet1: TTabSheet
Margins.Left = 5
Margins.Top = 5
Margins.Right = 5
Margins.Bottom = 5
Мой вопрос: есть ли способ позволить Delphi изменять DFM только в том случае, если форма изменилась? Теперь у нас возникают конфликты, когда мы постоянно обновляем в SVN.
2 ответа
Это всего лишь следствие того, как работает механизм потоковой передачи данных в Delphi.
Когда вы открываете форму в конструкторе Delphi, файл.dfm используется для создания экземпляров каждого компонента в форме. В вашем случае дизайнер форм будет создавать экземпляры каждого из объектов в файле.dfm. Каждое свойство в файле.dfm будет прочитано в.
Затем, если вы сделаете в конструкторе что-либо, помечающее форму как измененную, например, изменив активную вкладку, дизайнер сохранит файл.dfm при сохранении. И он заново создает файл.dfm, запрашивая компоненты в памяти, чтобы сохранить себя. Этот процесс сохранения не учитывает, как выглядит файл.dfm на диске. Каждый компонент просто сохраняет свои свойства такими, какие они есть на данный момент.
Итак, в общем, вы ничего не можете сделать, чтобы изменить поведение Delphi. Лучшее, что вы можете сделать, - это обойти это, чтобы минимизировать воздействие.
Если ваши формы имеют Scaled=True
тогда вы должны убедиться, что все машины разработчика используют одинаковое масштабирование шрифтов. В противном случае, когда разработчик A сохраняет при одном масштабировании шрифта, этот файл.dfm будет полностью отличаться от того, который разработчик B сохраняет при другом масштабировании шрифта. Все позиции будут изменены. Похоже, у вас есть разработчики, которые используют масштабирование шрифта 120 точек на дюйм. И это не даст вам конца печали.
Если доброкачественные изменения в файле формы приводят к большим изменениям, зафиксируйте эти изменения. После того, как вы настроите все машины разработчика одинаково, вы обнаружите, что все успокаивается. Эти исправления больше не должны приводить к изменениям файла.dfm.
Это только один из профессиональных рисков визуального дизайна с Delphi. Вы должны уделять много внимания и внимания вашим файлам.dfm всякий раз, когда вы делаете коммит. Я регулярно возвращаю изменения в файлы.dfm из диалога фиксации Tortoise. Я также часто решаю изменить файл.dfm в текстовом редакторе, а не использовать дизайнер форм!
Вы также увидите изменения dfm, если вы обновили версию Delphi с момента последнего сохранения этой формы. Так что, если у вас есть старая форма и вы проверите ее, чтобы внести незначительные изменения, вы увидите ряд других изменений. Иногда это новые свойства, введенные в новой версии Delphi, иногда изменяются значения. Они также указывают на ожидающие изменения, которые еще не были внесены в формы, которые не были извлечены. После обновления Delphi вы можете проверить каждую форму и немедленно зарегистрировать ее, чтобы записать все эти изменения.
С помощью визуального дизайна нам нравится создавать форму "так, как нам нравится", а затем Delphi сохраняет все эти изменения. Он незаметно устанавливает множество свойств, но они могут измениться, так как над формами работают разные разработчики. Если настройка важна - возможно, высота и ширина формы - установите ее в коде. Вы все равно увидите изменения свойства, но вы будете знать, что это не имеет значения.