Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

XP Themes and TToolBar.AdvancedCustomDrawButton   Найти похожие ветки 

 
Tirex   (2005-03-04 19:21) [0]

создайте новое приложение, новую форму, киньте
TToolBar на форму
Создайте 3-4 кнопки на toolbar (щелчок правой кнопкой, New Button).
создайте обработчик AdvancedCustomDrawButton для toolbar:
procedure TForm1.ToolBar1AdvancedCustomDrawButton(Sender: TToolBar;
 Button: TToolButton; State: TCustomDrawState; Stage: TCustomDrawStage;
 var Flags: TTBCustomDrawFlags; var DefaultDraw: Boolean);
var tr : TRect;
begin
 if Stage=cdPostPaint then
 with Sender.Canvas do
 begin
   tr:=Button.BoundsRect;
   Pen.Color:=clBlue;
   MoveTo(tr.Left+2,tr.Top+2);
   LineTo(tr.Right-2,tr.Bottom-2);
 end;
end;
Это код рисует синую линию поперек кнопки.
Запустим приложение, все нормально работает.
на всех кнопках есть синяя линия.
Теперь доваьте поддержку XP стилей - бросьте XPManifest на форму.
запустите программу. Теперь синей линии нет.
ее можно увидеть только если быстро поводить мышкой по панели.

Как дорисовать такие кнопки на панели с поддержкой XP тем?
в частности хотелось бы сделать сове состояние hot(указатель над кнопкой) для кнопок.


 
Gero ©   (2005-03-04 22:36) [1]

Попробуй поставить DefaultDraw := False.


 
Tirex   (2005-03-05 05:48) [2]

я забыл дописать что за рисунком кнопками, появляется черный фон (только при включенном XP манифесте)

если я вставляю defaultDraw:=false; кнопка отображается полностью черная. то мне прийдется отрисовывать кнопку полностью, определять положение рисунка на кнопке (чтобы он был в центре). когда как таким споосбом можно было только "подрисовать нужное" (дорисовать другую рамку вокруг активных кнопок) передав работу под дорисовке рисунка delphi


 
Gero ©   (2005-03-05 08:23) [3]


> если я вставляю defaultDraw:=false; кнопка отображается
> полностью черная. то мне прийдется отрисовывать кнопку полностью,

Скорее всего, другого варианта нет.


 
Tirex   (2005-03-05 15:38) [4]

Ну все таки если кто-нибудь знает в чем дело отзовитесь.


 
Gero ©   (2005-03-05 22:33) [5]


> Ну все таки если кто-нибудь знает в чем дело

Кривая реализация в VCL.
Не думаю, что это ошибка CommonControls.


 
Tirex   (2005-03-06 23:33) [6]

Как выйти из ситуации (кроме отрисовки) может есть какой заменитель tolbara?


 
Gero ©   (2005-03-06 23:41) [7]


> Tirex   (06.03.05 23:33)

Да их тучи.
А что, отрисовка кнопки составляет проблему?


 
Tirex   (2005-03-07 15:23) [8]

Вообщем отрисовал я как надо, даже сам не ожидал что так легко будет.
Сдедал так
в TForm1.ToolBar1AdvancedCustomDraw
рисую всю панель на bmptoolbar и копирую
а в
ToolBar1AdvancedCustomDrawButton рисую нужную кнопку в состоянии
cdsHot и cdsSelected.
Все работает как надо (по крайней мере отображается). Сначала вся панель а потом поверх нее активная кнопка.
Теперь новая проблема, всю эту возню я затеял только из-за того манифеста. Решил проверить без него (дабы увидеть как программа будет отображаться например на win98). Отключаю.
Отображается только главная панель, при поднесении к кнопке что сквозь нее мерцает но остается без изменений. Такое ощущение что меняется порядок процедур.
Если отключить
TForm1.ToolBar1AdvancedCustomDraw
т.е. рисование всей панели и оставить рисование только активной кнопки то все ок, она рисуется также как и при манифесте. Что теперь мне еще и версию ОС определять придется?



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
4-1107734223
Fessio
2005-02-07 02:57
2005.03.20
Папка "Мой компьютер"


3-1108621131
Sour
2005-02-17 09:18
2005.03.20
Можно ли в условии запроса использовать хранимую процедуру


3-1108812877
Борис
2005-02-19 14:34
2005.03.20
Выбор СУБД для БД на 1 млн. записей


1-1110362767
rolex
2005-03-09 13:06
2005.03.20
Зачем нужны DLL???


1-1109827376
leonidus
2005-03-03 08:22
2005.03.20
Глюки MainMenu в XP