Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Default свойства


Автор: Christoph 12.2.2009, 19:27
Имеется такой вопрос,
Код

property Height: Integer read FHeight write FHeight default 25

Я кидаю например кнопку на форму, длина и ширина устанавливается, как? из конструктора?или устанавливается значение свойства Height=25?
Я так понимаю, что если текущее значение свойства Height отличное от 25, то запись идет в файл формы, после этого, при компиляции,свойства объекта обновляются из файла формы? 
И чтот не верится что все published свойства объекта устанавливается через конструктор,спасибо

Автор: bems 12.2.2009, 19:47
Цитата(Christoph @  12.2.2009,  19:27 Найти цитируемый пост)
Я так понимаю, что если текущее значение свойства Height отличное от 25, то запись идет в файл формы, после этого, при компиляции,свойства объекта обновляются из файла формы? 

примерно так
Цитата(Christoph @  12.2.2009,  19:27 Найти цитируемый пост)
И чтот не верится что все published свойства объекта устанавливается через конструктор,спасибо 
те которые не устанавливаются в конструкторе или не имеют значения по умолчанию, или это 0

Добавлено через 2 минуты и 51 секунду
Цитата(Christoph @  12.2.2009,  19:27 Найти цитируемый пост)
при компиляции,свойства объекта обновляются из файла формы? 
при компиляции вайл формы включается в екзешник в виде ресурса. Во время работы (в процессе создания формы) ее компоненты создаются конструкторами, а потом считываются их свойства из ресурса

Автор: Snowy 12.2.2009, 20:11
Размер устанавливается конструктором.
В данном случае, свойство default говорит дефолтное значение.
Если итоговое значение не будет отличаться, то оно не будет записано в dfm
Само по себе оно ничего не устанавливает. Просто сообщает, что, если не меняем, то и сохранять его не нужно - оно и так будет таким.
Если его изменить в инспекторе объектов, то оно подсветится жирным шрифтом, указывая, что свойство будет сохранено в dfm и помещено в ресурсы.
Не жирные свойства не записываются.
При запуске программы, компонент создаётся, ему назначается дефолтное значение.
Когда все компоненты будут созданы, происходит чтение dmf файла, и устанавливаются все значения, всем компонентам, прописанные в dfm. То есть те, что отличны от default.

Автор: Christoph 12.2.2009, 21:59
Snowy, это если я кидаю компонент на форму, то у него будет установлено свойство Height 25(в моем примере)? И еще что я хотел спросить например если я меняю размеры кнопки во время проектирования, то соотвествено тут же изменяется, если например свойство Visible поставить False то изменения происходят после компиляции (я так понимаю, что из файла формы загрузилась свойство Visible), почему же одни свойства меняются визуально во время проектирования а другие нет, это как то связано с этом темой? Спасибо 

Автор: bems 12.2.2009, 22:56
Цитата(Christoph @  12.2.2009,  21:59 Найти цитируемый пост)
если я кидаю компонент на форму, то у него будет установлено свойство Height 25(в моем примере)?
да, будет. Но не из-зи того, что стоит default 25, а из-за того, что конструктор присвоит. А default 25 означает что не надо сохранять 25 (что излишне, из-за поведения конструктора)

Цитата(Christoph @  12.2.2009,  21:59 Найти цитируемый пост)
если например свойство Visible поставить False то изменения происходят после компиляции (я так понимаю, что из файла формы загрузилась свойство Visible),

для Visible все точно так же. Свойство измениться сразу же (но этого не видно). При этом измененное значение пишется в файл, а при выполнении читается и восстанавливается. На глаз изменений не видно только потому что кнопка умеет отличать, работает ли она делфи на редакторе или в запущеном екзешнике. Для случая с редактором в делфи она нормально дает изменить значение свойства, но не прячется визуально, потому что это было бы неудобно для того кто работает над интерфейсом.
конкретнее как это происходит: 
Код

if csDesigning in ComponentState then ...

это проверка на то в дизайнере ли выполняется код. что-то типа такого ветвления есть и в коде кнопки

Автор: Christoph 12.2.2009, 23:54
Спасибо за помощь, все разобрал, всем по плюсику  smile  Тему закрываю

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)