![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закладки PageControl
Oleg © (2010-07-13 00:53:00)Здравствуйте.
Выявилась такая проблема:
Есть на форме компонент TPageControl, иногда свойство OwnerDraw выставляется в false, чтобы вручную выводить надписи на закладках определенным шрифтром и цветом. При работе программы в операционной системе Windows7 иногда событие OnDrawTabs компонента не вызывается, вызов этого события не происходит.
Это происходит не на любом компьютере, на котором установлена Window7, преимущественно на тех, где 64-х битная система, но встретилось и на одном с 32-х битной. Еще такое же поведение было замечено на компьютере с системой Windows 2008 Server 64-х битной (при проверке на других компьютерах с такой же системой не воспроизводимо).
Вопрос: как можно попытаться решить данную проблему? Какое событие, может быть, нужно отловить, чтобы сделать ручной вывод требуемых надписей на заголовках панелей TPageControl?
PS проект написан на Delphi 7.
PPS ошибка не плавающая. В смысле, На отдельно взятом компьютере с перечисленными ОС либо работает как надо всегда, либо не работает никогда (закладки остаются пустыми при установке свойства OwnerDraw в false).
Deltas (2010-07-15 13:59:00) [1]
> KilkennyCat © (15.07.10 01:18) [8]
> это высказывание применимо всегда и ко всему, а не только
> к "D7 и виста"
В D7 и Vista - это вполне определенный набор проблем при работе с графическим интерфейсом, которые заложены в исходных текстах отладочных библиотек (Source), и которые достаточно легко устранить.
KilkennyCat (2010-07-15 01:18:00) [2]
> проблема Delphi 7, которая, конечно, не поддерживает версии Windows
> Vista и выше
ну конечно. особенно учитывая TPageControl и доступ к генофонду.
> программы работают, но встречаются проблемы
это высказывание применимо всегда и ко всему, а не только к "D7 и виста"
Deltas (2010-07-13 13:10:00) [3]Если все-таки это проблема Delphi 7, которая, конечно, не поддерживает версии Windows Vista и выше (программы работают, но встречаются проблемы), попробуйте обрабатывать событие WM_DRAWITEM, оно приходит, когда нужно отрисовать закладку и не только.
P.S. Сначала вызывается виртуальный WndProc(), а отдельные обработчики сообщений потом. Так что в WndProc() сообщение будет обработано раньше.
Deltas (2010-07-13 12:53:00) [4]
> Oleg (13.07.10 00:53) [0]
> ...иногда свойство OwnerDraw выставляется в false...
> ...иногда событие OnDrawTabs компонента не вызывается...
>
Так что Вам кажется в этом странным?
Anatoly Podgoretsky (2010-07-13 08:44:00) [5]> Oleg (13.07.2010 00:53:00) [0]
Ну дык 64 бита же, это в два раза большим количеством надо ворочать, вот и
не успевает.
Leonid Troyanovsky (2010-07-13 08:04:00) [6]
> Oleg (13.07.10 00:53)
> Есть на форме компонент TPageControl, иногда свойство OwnerDraw
> выставляется в false
Что значит "иногда"? Умерла, так умерла.
> В какой момент?
В OnDrawTab, вестимо.
--
Regards, LVT.
Германн (2010-07-13 01:16:00) [7]
> иногда свойство OwnerDraw выставляется в false, чтобы вручную
> выводить надписи на закладках определенным шрифтром и цветом.
>
Ничего не перепутал?
Oleg (2010-07-13 01:09:00) [8]
> KilkennyCat © (13.07.10 01:00) [1]
В какой момент? Я сам не знаю, когда должна перерисоваться какая-то из закладок, которая, например, была "закрыта" куском окна другого приложения, или часть окна утащили за край рабочего стола, а потом вернули обратно.
KilkennyCat (2010-07-13 01:00:00) [9]не отлавливать, а вызывать перерисовку вручную.