Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
14-1109675305
Layner
2005-03-01 14:08
2005.03.20
А можно ли сделать так, при закрытии Delphi7, она помнила


1-1109696271
Dyusha
2005-03-01 19:57
2005.03.20
Проблема при поиске в ADOQuery


1-1110033485
ПроНыРа
2005-03-05 17:38
2005.03.20
ToolBar


3-1108833569
Leonardo
2005-02-19 20:19
2005.03.20
Как получить верный результат используя SUM()


4-1107710603
Лёха
2005-02-06 20:23
2005.03.20
Owner Draw





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский