Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-92811
Spy
2002-09-06 12:25
2002.10.28
Как узнать все открытые на компе mailslot ы?


1-92489
Mav
2002-10-18 12:35
2002.10.28
Работа с булевыми выражениями


1-92500
brestmarket
2002-10-18 14:27
2002.10.28
Как получить путь к приложению по его расширению?


4-92781
Melamed
2002-09-13 15:05
2002.10.28
Имя програмного модуля, который создал данное окно


1-92570
3d
2002-10-16 20:58
2002.10.28
Народ, нужна помощь с NMSMTP.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский