Delphi - Почему ExplicitWidth и ExplicitHeight продолжают появляться в файлах .DFM и что это такое?

30

Мы заметили, что при проверке обновлений у наших .DFM файлов были добавлены свойства ExplicitWidth и ExplicitHeight, что, по-видимому, не является особой причиной.

Мои два вопроса: зачем они и почему они автоматически добавляются Delphi?

Ниже приведен пример со свойством в:

object Splitter2: TcxSplitter
    Left = 0
    Top = 292
    Width = 566
    Height = 8
    Cursor = crVSplit
    HotZoneClassName = 'TcxXPTaskBarStyle'
    AlignSplitter = salBottom
    Control = BottomPanel
    Color = clBtnFace
    ExplicitWidth = 8
end
  • 0
    Что говорится в документации Delphi? :П
  • 13
    Вы серьезно предлагаете мне RTFM? Где же в этом веселье? И я должен добавить, что я использую Delphi 2007, так что я все еще жду загрузки справки . Я думал, что будет быстрее спросить о переполнении стека!
Показать ещё 3 комментария
Теги:
dfm

3 ответа

21
Лучший ответ

Из Googling....

Оригинальную статью можно найти здесь.

Явные свойства запоминают предыдущие оценки элемента управления до свойства Align или Anchor изменились с их значений по умолчанию.

Единственный раз, когда явные свойства не написаны, когда выровнять свойство возвращается к умолчанию значение alNone.

Это когда Явные свойства на самом деле используются reset его границы того, что это было ранее.

  • 2
    Это измерения, которые вы им явно предоставили, в отличие от измерений, которые они получили неявно благодаря выравниванию или привязке. Они не обязательно являются исходными измерениями, которые вы могли изменить между временем создания элемента управления и временем его выравнивания.
  • 11
    Это звучит правдоподобно, но это не то, что происходит на самом деле: по моему опыту, Delphi IDE переключается между хранением одинаковых значений в Left / Right / Width / Height и их аналогах ExplicitXxx каждый раз, когда форма записывается в .dfm. То же самое относится и к свойству ItemHeight TComboBox, которое постоянно изменяется от 0 до 13 и обратно. Это довольно раздражает, когда мой источник контроля хочет публиковать изменения в .dfm все время, когда на самом деле ничего не изменилось.
Показать ещё 2 комментария
28

С помощью DDevExtensions вы можете отключить сохранение этих свойств в dfm:
http://andy.jgknet.de/blog/?page_id=10

Добавляет свойство Explicit * для удаления файлов DFM для более старых версий Delphi

  • 8
    +1. Я не использую его из соображений совместимости, но просто для того, чтобы мои DFM были меньше, а управление исходным кодом стало менее загроможденным.
  • 3
    Мне это нравится, так как, как и Ульрих, он убирает нас от ошибок при обновлении исходного кода. Хотел бы я разделить ответ между этим и ответом JamesB!
Показать ещё 1 комментарий
0

Delphi добавляет значение опубликованных свойств в файл DFM только тогда, когда его значение отличается от значения по умолчанию.

Например:

property ExplicitWidth: Integer read FExplicitWidth write FExplicitWidth default 1;

Если значение ExplicitWidth не равно 1, оно будет записано в DFM. Когда значение "по умолчанию" не определено, любое значение будет записано в DFM.

TcxSplitter не является стандартным компонентом Delphi, лучше спросите его автора о целях свойств.

  • 5
    Я просто перечислил TcxSplitter в качестве примера, который мне пришлось передать. Это чаще всего случается с TForm.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню