Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
ВнизFont.Size в конструкторе TLabel не устанавливается Найти похожие ветки
← →
Kolan © (2008-05-26 18:28) [0]Здравствуйте,
Есть протой потомок TLabel. В его конструкторе ему же устанавливается размер шрифта.constructor TScreenLabel.Create(AOwner: TComponent);
begin
inherited;
Font.Size := 8;
end;
На форме лежит экземпляр этого TScreenLabel с другим размером шрифта. Так вот в запушеной программе шрифт то, что был в дизайнере, а не тот, что задан в конструкторе.
Как задать шрифт лэйбла изнутри самого лэйбла при его создании?
← →
Reindeer Moss Eater © (2008-05-26 18:29) [1]паблишеб свойства окончательно инициализируются в методе Load
← →
Reindeer Moss Eater © (2008-05-26 18:29) [2]... который вызывается позже конструктора
← →
Kolan © (2008-05-26 18:39) [3]Благодарю, получилось.
← →
Kolan © (2008-05-26 18:39) [4]Только метод Loaded называется, вроде других похожих не нашел.
← →
Reindeer Moss Eater © (2008-05-26 18:44) [5]ну да. он самый
← →
Reindeer Moss Eater © (2008-05-26 18:45) [6]Благодарю, получилось.
Дай угадаю, ты вот это перенес в лоадед?
Font.Size := 8;
:)))
← →
Kolan © (2008-05-26 18:51) [7]Ну да, а как?
← →
Reindeer Moss Eater © (2008-05-26 19:42) [8]ты забыл про dfm и про то, где сохраняются паблишед свойства установленные в дизайн-тайме.
← →
Kolan © (2008-05-26 19:45) [9]> ты забыл про dfm и про то, где сохраняются паблишед свойства
> установленные в дизайн-тайме.
Ну там сохраняются — знаю/помню. Пока не дошло что не так.
← →
Reindeer Moss Eater © (2008-05-26 20:23) [10]общий принцип:
в конструкторе инициализируем паблишед свойство каким-то значением.
в самом свойстве определяем ему default значение совпадающее с тем что в конструкторе. в дфм при этом ничего не попадет, если явно не указано что свойство следует сохранять всегда. Получаем:
после конструктора свойство приняло значение 8.
вызывается лоадед, в котором читается ресурс дфм и свойствам присваиваются значения выставленные в дизайне.
если там нет сохраненного значения, то значение не поменяется.
если что-то есть в дфм, то значение перепишется на хранимое в дфм.
← →
Kolan © (2008-05-26 20:37) [11]Ок, понял, благодарю.
← →
Юрий Зотов © (2008-05-26 22:34) [12]> Reindeer Moss Eater © (26.05.08 20:23) [10]
> вызывается лоадед, в котором читается ресурс дфм
Не читается DFM в Loaded. К моменту вызова Loaded DFM уже прочитан. В этом весь смысл Loaded и есть, что в нем уже после загрузки DFM можно произвести нужные дополнительные действия.
> и свойствам присваиваются значения выставленные в дизайне.
Вот это как раз происходит при чтении DFM. То есть, до вызова Loaded.
← →
Юрий Зотов © (2008-05-26 22:37) [13]> Kolan
Посмотри в коде VCL, зачем нужно и что делает ParentFont.
← →
Kolan © (2008-05-26 22:53) [14]При изменении посылает
CM_PARENTFONTCHANGED
с параметрами 0 0. При получении сообщения, из-за параметров, устанавливается фонт родителя.
Туда смотрю?
← →
Юрий Зотов © (2008-05-26 22:58) [15]> Kolan © (26.05.08 22:53) [14]
Угу, туда. Теперь прикинь, а не сбивает ли этот механизм при загрузке DFM тот размер фонта, что ты выставил в конструкторе? Проследи всю цепочку загрузки.
← →
Германн © (2008-05-27 01:06) [16]
> Юрий Зотов © (26.05.08 22:37) [13]
Я угадал, я угадал! Но не рискнул высказаться, ибо не достиг ещё 2-го уровня. :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.048 c