Форум: "Основная";
Текущий архив: 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