Главная страница
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.042 c
1-1110189852
randomize
2005-03-07 13:04
2005.03.20
Keylogger


1-1109932176
AngelOKES
2005-03-04 13:29
2005.03.20
Нужен алгоритм работы с огромными числами (до 200 десятичных зна)


1-1109808256
SpiDeE
2005-03-03 03:04
2005.03.20
TURBO POWER ASYNC PROFESSIOANAL v (ниже 4.06)


1-1110273056
ser35
2005-03-08 12:10
2005.03.20
отображение даты


14-1109566131
ex080D:07BBh
2005-02-28 07:48
2005.03.20
What the hell is going on?