Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Font.Size в конструкторе TLabel не устанавливается


Kolan ©   (2008-05-26 18:28:00) 

Здравствуйте,
 
Есть протой потомок TLabel. В его конструкторе ему же устанавливается размер шрифта.
constructor TScreenLabel.Create(AOwner: TComponent);
begin
 inherited;
 Font.Size := 8;
end;


На форме лежит экземпляр этого TScreenLabel с другим размером шрифта. Так вот в запушеной программе шрифт то, что был в дизайнере, а не тот, что задан в конструкторе.

Как задать шрифт лэйбла изнутри самого лэйбла при его создании?


Германн   (2008-05-27 01:06:00) [1]


> Юрий Зотов ©   (26.05.08 22:37) [13]

Я угадал, я угадал! Но не рискнул высказаться, ибо не достиг ещё 2-го уровня. :)


Юрий Зотов   (2008-05-26 22:58:00) [2]

> Kolan ©   (26.05.08 22:53) [14]

Угу, туда. Теперь прикинь, а не сбивает ли этот механизм при загрузке DFM тот размер фонта, что ты выставил в конструкторе? Проследи всю цепочку загрузки.


Kolan   (2008-05-26 22:53:00) [3]

При изменении посылает CM_PARENTFONTCHANGEDс параметрами 0 0. При получении сообщения, из-за параметров, устанавливается фонт родителя.

Туда смотрю?


Юрий Зотов   (2008-05-26 22:37:00) [4]

> Kolan

Посмотри в коде VCL, зачем нужно и что делает ParentFont.


Юрий Зотов   (2008-05-26 22:34:00) [5]

> Reindeer Moss Eater ©   (26.05.08 20:23) [10]

> вызывается лоадед, в котором читается ресурс дфм

Не читается DFM в Loaded. К моменту вызова Loaded DFM ужепрочитан. В этом весь смысл Loaded и есть, что в нем уже послезагрузки DFM можно произвести нужные дополнительные действия.

> и свойствам присваиваются значения выставленные в дизайне.

Вот этокак раз происходит при чтении DFM. То есть, довызова Loaded.


Kolan   (2008-05-26 20:37:00) [6]

Ок, понял, благодарю.


Reindeer Moss Eater   (2008-05-26 20:23:00) [7]

общий принцип:
в конструкторе инициализируем паблишед свойство каким-то значением.
в самом свойстве определяем ему default значение совпадающее с тем что в конструкторе. в дфм при этом ничего не попадет, если явно не указано что свойство следует сохранять всегда. Получаем:
после конструктора свойство приняло значение 8.
вызывается лоадед, в котором читается ресурс дфм и свойствам присваиваются значения выставленные в дизайне.

если там нет сохраненного значения, то значение не поменяется.
если что-то есть в дфм, то значение перепишется на хранимое в дфм.


Kolan   (2008-05-26 19:45:00) [8]

> ты забыл про dfm и про то, где сохраняются паблишед свойства
> установленные в дизайн-тайме.

Ну там сохраняются — знаю/помню. Пока не дошло что не так.


Reindeer Moss Eater   (2008-05-26 19:42:00) [9]

ты забыл про dfm и про то, где сохраняются паблишед свойства установленные в дизайн-тайме.


Kolan   (2008-05-26 18:51:00) [10]

Ну да, а как?


Reindeer Moss Eater   (2008-05-26 18:45:00) [11]

Благодарю, получилось.

Дай угадаю, ты вот это перенес в лоадед?

Font.Size := 8;

:)))


Reindeer Moss Eater   (2008-05-26 18:44:00) [12]

ну да. он самый


Kolan   (2008-05-26 18:39:00) [13]

Благодарю, получилось.


Kolan   (2008-05-26 18:39:00) [14]

Только метод Loaded называется, вроде других похожих не нашел.


Reindeer Moss Eater   (2008-05-26 18:29:00) [15]

паблишеб свойства окончательно инициализируются в методе Load


Reindeer Moss Eater   (2008-05-26 18:29:00) [16]

... который вызывается позже конструктора


Наверх

Титульная страница Поиск, карта сайта Написать письмо