Главная страница
    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.46 MB
Время: 0.033 c
14-1109313006
вредитель
2005-02-25 09:30
2005.03.20
МРОС (читать заадомм наа пеередд) не дремлет


3-1108932186
VitGun
2005-02-20 23:43
2005.03.20
Формы Excel -> FastReport


14-1109335093
Cosinus
2005-02-25 15:38
2005.03.20
Никак не могу найти подробного описания на ScanLine...


1-1109860385
SAI
2005-03-03 17:33
2005.03.20
Memo


1-1110129911
ser35
2005-03-06 20:25
2005.03.20
DBEdit как Maskedit





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