![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]... который вызывается позже конструктора