Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
ВнизTControl.SetFont Найти похожие ветки
← →
Batiskaf (2002-10-14 17:19) [0]Уважаемые мастера, обьясните как и когда вызывается метод базового класса TControl.SetFont? Дело в том что я изменил поведение этой ф-ции для того что бы добиться соответствующей инициализации шрифтов всех контролов, находящихся на форме. Т.е. каждая форма, созданная в приложении получит необходимый фонт, согласно дифолтному фонту операционной системы ( ну и все контролы ), и форма, собранная на английском Виндовс будет получать правильный фонт при запуске на Русском Виндовс, например. Все это работало хорошо ( не считая того что размеры контролов отличались от размеров в дизайн тайм ), до тех пор пока не появился контрол со свойством ParentFont = false, и при этом этот единственный контрол ( в частности Лейбл ), не получал необходимого мне фонта, не проходил через мою имплементацию в TControl классе, и брал тот фонт, который вычитан был из рессурсного стрима. Вопрос: как бороться с этим безобразием, очень хочется чтобы лейбл мог изображать нормально как русские так и английские надписи, не колдуя при этом с рессурсами данной программы.
С уважением, Батискаф.
← →
han_malign (2002-10-14 17:25) [1]Font:=...;
{ property Font: TFont read FFont write SetFont stored IsFontStored;
}
Вообще перекрывать/изменять приватный статический метод базового класса не есть рулез
← →
Batiskaf (2002-10-14 17:36) [2]Дык я не перекрываю, я в исходниках борландовских изменения делаю, а потом этот измененный файл ложу в моем проэкте и компилирую со всеми формами, просто путь на этот файл нужно дать первым в диалоге Project Options/Directories в поле Search Path.
Вопрос в другом, почему когда форма десериализует свои контролы, устанавливает фонты для контролов через TControl.SetFont, а когда контрол не использует фонт владельца ( ParentFont = False ), то этого вызова не происходит, Как с этой бедой бороться? Изменять исходники VCL я могу смело - так что прошу, ваши предложения.
← →
Юрий Зотов (2002-10-14 18:03) [3]См. CM_FONTCHANGED и CM_PARENTFONTCHANGED.
А исходники VCL лучше не править. Опасное это дело.
← →
han_malign (2002-10-14 18:06) [4]Вот, на самом деле, не знаю как компоненты из ресурса грузятся - по идее должны через те же проперти и пролезать, но судя по всему не пролезают (в случае ParentFont=True - владелец явно фонты проставляет), не исключено - опять преславутая дельфийская оптимизация. Единстенное что могу посоветовать, сделать в конструкторе(или правильнее наверное в OnShow) явное Font:=Font; (SetFont(FFont)).
← →
Юрий Зотов (2002-10-14 18:18) [5]Владелец (точнее, Parent) явно фонты НЕ проставляет. Он просто делает Broadcast(CM_PARENTFONTCHANGED), а каждый контрол разбирается с этим самостоятельно.
← →
Batiskaf (2002-10-14 18:48) [6]To Юрий Зотов.
Большое спасибо за ответ, но я в Дельфях не спец, если можно ткнуть пальцем в тот код, которым явно устанавливается фонт контрола, у которого ParentFont = False, хотелось бы и его поменять так же как SetFont. А мессаги эти фигурируют вчастности для генерации самого SetFont, что меня и смутило, не проходят некоторые контролы через него. Правда как я догадываюсь что то страшное происходит в ReadData у ридера, где и вынимаются все свойства из стрима и через PropInfo делается какой-то неявный кол как бы по адресу штоли.
To han_malign.
Да многовато у меня форм, около двух сотен мне досталось в наследство, замучаюсь прорисывать все в ручную, поэтому и решил такой вот прикол с базовым классом применить.
← →
Batiskaf (2002-10-14 20:45) [7]To Юрий Зотов.
Вобщем насколько я понял в TControl.ReadState происходит кол в TComponent.ReadState, где через TReader.ReadData происходит заполнение свойств данного компонента ( там чего то в ассемблере через VMT вызывается ), ну а в конце как то через процедуру окна выходит на BroadCast, где в список обходится и вызов метода происходит. Только вот по всей логике должен прийти вызов в SetFont, но не приходит. Можт подмогнете чуток, я уже не состоянии всю цепочку вызовов понять.
← →
Batiskaf (2002-10-16 12:10) [8]Юрий, вся надежда только на вас...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c