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

Вниз

ToolBar,Menu,ToolButton, Font   Найти похожие ветки 

 
DevilDevil ©   (2007-07-12 14:36) [0]

Здравствуйте

Проблема вот какая.
Есть компонент ToolBar, ему присвоено MainMenu, появилось множество соответсвующих кнопок ToolButton. Проблема в цвете шрифта таких кнопок. По умолчанию он чёрный, нам надо сделать белым. Изменение шрифта у ToolBar не помогает. У ToolButton свойство Font не открыто. И даже такой танец не помогает:


for i := 0 to ToolBar1->ButtonCount-do
begin
   Button := ToolBar1->Buttons[i];
   THintWindow(Button).Font.Assigned(ToolBar1->Font);
end;

// THintWindow - это Control, свойство которого открыто.


Поиск по Сети не дал результата. Подскажите, подалуйста, что делать.

Заранее Спасибо!

P.S. понятно, конечно, что самому можно сэмитировать взаимодействие ToolBar и Menu, но всё же не хотелось бы делать такие кординальные изменения


 
Вася Правильный   (2007-07-12 15:58) [1]


> По умолчанию он чёрный, нам надо сделать белым.

он не черный, он системного цвета на системном фоне
а вот что будет с твоим белым, если юзер изменит системные цвета?


 
DevilDevil ©   (2007-07-12 16:41) [2]

Мне без разницы, какой там системный...
TToolButton - наследник TGraphicControl, стандартностью здесь как то не сильно пахнет... следовательно по идее, как то можно сменить шрифт на кнопке... вся проблема заключается в том, что по исходникам я не нашёл, где именно прорисовывается текст.


 
Amoeba ©   (2007-07-12 17:54) [3]

А может TToolBar это делает? Ведь TToolButton в отрыве от него не живет.


 
DevilDevil ©   (2007-07-12 17:56) [4]

Да я и там и там смотрел...
Вопрос открыт


 
Amoeba ©   (2007-07-12 18:08) [5]

Значит плохо искал.


 
Kolan ©   (2007-07-12 18:12) [6]

> for i := 0 to ToolBar1->ButtonCount-do
> begin

А что это за код такой?


 
Sdubaruhnul   (2007-07-13 00:24) [7]

>TToolButton - наследник TGraphicControl, стандартностью здесь как то не сильно пахнет... следовательно по идее, как то можно сменить шрифт на кнопке... вся проблема заключается в том, что по исходникам я не нашёл, где именно прорисовывается текст.

Название модуля ComCtrls не настораживает? Это виндовский контрол, она же его и рисует. Делфи общается со своим же тулбаром путём отправки сообщений. Сплошь и рядом в коде видишь Perform.

Тебе бы

 TTBCustomDrawBtnEvent = procedure(Sender: TToolBar; Button: TToolButton;
   State: TCustomDrawState; var DefaultDraw: Boolean) of object;

и UxTheme для стандартности.


 
DevilDevil ©   (2007-07-13 12:59) [8]


> Kolan ©   (12.07.07 18:12) [6]
> > for i := 0 to ToolBar1->ButtonCount-do> beginА что это
> за код такой?


Это я так невнимательно с Си на Delphi перевёл.

> Sdubaruhnul   (13.07.07 00:24) [7]
сейчас посмотрю...


 
DevilDevil ©   (2007-07-13 13:25) [9]

> Sdubaruhnul   (13.07.07 00:24) [7]

Спасибо тебе большое, то что нужно!

а что такое "UxTheme" ?

А если бы вы ещё подсказали, как изменить цвета закладок TTabControl, было бы вообще здорово!


 
Sdubaruhnul   (2007-07-13 15:10) [10]

>А если бы вы ещё подсказали, как изменить цвета закладок TTabControl, было бы вообще здорово!

Да никак в том смысле, в котором ты имеешь ввиду. Нет такого волшебного свойства, типа TabBackColor.

Windows рисует эти стандартные контролы. Они хранятся в comctl32.dll, а ComCtrls.pas есть обёртка вокруг неё.

Как быть? Многие контролы поддерживают рисование себя пользователем (Custom Draw) при помощи событий (это уже в VCL-обёртке, если быть точным). Но так как ты сам не нарисуешь виндовские кнопки, табы, заголовки, чек-боксы (ты под увеличением посмотри то - там и градиентики, и тени), предлагается использовать UxTheme - стандартный модуль в Delphi начиная с 7-ого (наверное). Это менеджер тем винды, точнее, как можно опять догадаться, обёртка вокруг соответствующей библиотеки. Винда сама тоже её использует. Да, сейчас глянул: UxTheme - по сути заголовочный файл, Themes.pas - обёртка.

Ну так вот. В менеджере тем ты сначала выбираешь, что рисовать при помощи ThemeServices.GetElementDetails, а потом рисуешь ThemeServices.DrawElementBackground и ThemeServices.DrawElement.


 
DevilDevil ©   (2007-07-13 15:27) [11]

хммм. нашёл файл "ThemesSupport.pas"

Ты не подскажешь статью какую-нибудь, как этим пользоваться. Или может быть пример?


 
Sdubaruhnul   (2007-07-13 16:08) [12]

http://www.shorterpath.com/develop/zonearticles/VisualStyles.asp


 
DevilDevil ©   (2007-07-13 16:12) [13]

спасибо. постараюсь разобраться


 
DevilDevil ©   (2007-07-13 16:50) [14]

Удалено модератором
Примечание: Личная переписка


 
DevilDevil ©   (2007-07-16 15:28) [15]

1) не понимаю, как можно изменить текущую тему. Методов получить параметры темы - множество (GetElementDetails). А как их изменить? Как присвоить?

2) даже если мне удастся менять тему на необходимую мне... Будет ли это работать на ранних версиях Windows?

3) со StatusBar-ом те же самые проблемы. Можно ли как то изменить цвет шрифта без изменения тем? Проведённые опыты с OnDrawPanel никаих результатов не принесли.

Буду рад любой помощи.


 
Sdubaruhnul   (2007-07-16 22:34) [16]

>DevilDevil ©   (16.07.07 15:28) [15]

На примере 3-его, работаю в Delphi 7 SE.

Кидаешь StatusBar и подключаешь манифест. У СтатусБара делаешь панель, в ней пишешь свой текст и делаешь её Style равным psOwnerDraw. В OnDrawPanel пишешь:


procedure TformMain.StatusBarDrawPanel(StatusBar: TStatusBar;
 Panel: TStatusPanel; const Rect: TRect);
begin
 if (Panel.Index = 0) then
   begin
     StatusBar.Canvas.Font.Color := clRed;
     StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, Panel.Text);
   end;
end;


И будет красный текст.

Тему если поменяешь, то все контролы будут по-другому рисоваться. Увы, в Delphi нет темы для отдельного контрола (а вот в VS.NET есть). Поэтому тебе нужно не тему менять, а рисовать по-своему с учётом текущей темы.


 
DevilDevil ©   (2007-07-17 09:58) [17]

> Sdubaruhnul   (16.07.07 22:34) [16]

Спасибо, то что нужно!

Жалко, табы перерисовывать похоже сложнее.
А если у кого нибудь есть хороший пример перерисовки табов - было бы вообще здорово!



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

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

Наверх




Память: 0.51 MB
Время: 0.027 c
2-1188983561
kyro
2007-09-05 13:12
2007.09.30
Как убрать подчеркивание у label


2-1188371743
novill
2007-08-29 11:15
2007.09.30
Туплю после отпуска. Помогите с SQL запросом


1-1185019258
Makhanev Alexander
2007-07-21 16:00
2007.09.30
Совместимость с вистой...


2-1188993958
Странник81
2007-09-05 16:05
2007.09.30
Вывод файла на экран


2-1188977192
DimOk
2007-09-05 11:26
2007.09.30
TXMLDocument