Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/57: Рейтинг темы: голосов - 57, средняя оценка - 4.77
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,439
1

Цвет вкладок в pagecontrol

08.06.2012, 10:07. Показов 11599. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как изменить цвет вкладки в pagecontrol при наведении на нее мыши?То есть я навожу курсор на любую вкладку и она выделяется(подсвечивается) каким-либо цветом.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2012, 10:07
Ответы с готовыми решениями:

Прокрутка вкладок PageControl'a
Всем Привет!:) Есть PageControl с вкладками расположенными справа, но не простой, а...

Открытие вкладок PageControl
У меня есть PageControl с созданными вкладками. При выборе из списка TreeView становиться активной...

Добавление вкладок на PageControl
Здравствуйте! Мне необходимо добавить вкладку на PageControl, и с эти впринципе проблем нет. Но я...

Pagecontrol количество вкладок
У меня такая проблема, мне необходимо что бы программа посчитала сколько вкладок у pagecontrol,...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
08.06.2012, 11:50 2
1) у PageControl-а свойства OwnerDraw и DoubleBuffered устанавливаешь в True (я предпочитаю делать это в RunTime):
Delphi
1
2
3
4
5
6
procedure TForm1.FormCreate(Sender: TObject);
begin
   tab_index := -1; // Это описано в классе формы, потом поймешь зачем
   PageControl1.OwnerDraw := true;
   PageControl1.DoubleBuffered := true;
end;
2) делаем обработчики событий OnDrawTab/OnMouseMove для этого же PageControl-а:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Здесь определяем, над какой закладкой сейчас мышь
procedure TForm1.PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
   hti : TC_HITTESTINFO;
   P : TPoint;
   prev : Integer;
   pc : TPageControl;
begin
   pc := Sender as TPageControl;
   prev := tab_index;
 
   GetCursorPos(P);
   P := pc.ScreenToClient(P);
   hti.pt.x := P.x;
   hti.pt.y := P.y;
   tab_index := pc.Perform(TCM_HITTEST, 0, @hti);
   if prev <> tab_index then 
      // Если мыша перешла на другую закладку - отрисовываем новое положение вещей
      pc.Invalidate;
end;
 
// А тут, собственно, красим вкладку в нужный цвет (можно и цвет текста поменять)
// и рисуем вкладку и Caption для таба (сам Caption отображаться не будет, потому как OwnerDraw)
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
   s : string;
   R : TRect;
begin
   if TabIndex = tab_index then
   begin
      Control.Canvas.Brush.Color := clDkGray // Вот он, цвет, которым будет выделяться таб
   end
   else Control.Canvas.Brush.Color := clBtnFace;
 
   Control.Canvas.FillRect(Rect);
   s := (Control as TPageControl).Pages[TabIndex].Caption;
   CopyRect(R, Rect);
   DrawText(Control.Canvas.Handle, PChar(s), Length(s), R,
            DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
Это надо было?
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
28.01.2015, 14:01 3
Ругается на hti : TC_HITTESTINFO;
Ундеклеред идентифиер

Добавлено через 2 часа 7 минут
HITTESTINFO нашел гуглом...
Теперь на
Delphi
1
 tab_index := pc.Perform(TCM_HITTEST, 0, @hti);
ругается: Incompatible types: 'Integer' and 'tagTCHITTESTINFO'

Добавлено через 5 минут
печалька! чего такие коды выкладывают где не работает ничего
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
30.01.2015, 19:27 4
Цитата Сообщение от kavasaka Посмотреть сообщение
печалька!
Если где-то и есть печалька, то это в том, что даже в готовых кодах человек разобраться не может. Я не выкладываю непроверенных программ. Вообще. Запомни это раз и навсегда. И если уж я код выложил, это значит, он мало того, что нормально компилируется, он работает.

Цитата Сообщение от kavasaka Посмотреть сообщение
HITTESTINFO нашел гуглом...
Не знаю, чего ты там нашел, было достаточно в Uses подключить CommCtrl. Где может возникать подобная ошибка - я даже не могу представить себе. В указанной строке ее в принципе быть не может. А что ты сделал с TCM_HITTEST (не имея модуля CommCtrl в наличии) мне даже представить страшно. На самом деле это обычная целочисленная константа, описанная в CommCtrl... Так что, ошибки в зеркале ищи...
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
30.01.2015, 20:19 5
Отмечу, что в Д7 на Win7 x64 событие DrawTab не срабатывает в принципе.
0
W
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
02.02.2015, 09:21 6
Цитата Сообщение от volvo Посмотреть сообщение
было достаточно в Uses подключить CommCtrl
Вот это и нашел гуглом. Надо же где-в коментах писать бы что это надо было или как догадываться?

А в той строчке компилятор похоже на @hti ругается, если его на 0 или 1 заменить, то нормально компилирует. Может тоже этот @hti описать как-то надо? @hti: integer так?))))

А то что в зеркале это точно, програмеры все такие))) тыр.. пыр.. мыр.. вот и все коменты (и это еще хорошо!), через время смотришь и сам ничего на поймешь в своих кодах))

Цитата Сообщение от FIL Посмотреть сообщение
Win7 x64 событие DrawTab не срабатывает в принципе
это плохо! ((( Вкладки какие-то плоские и серые получаются, думал может как-то повеселее видок будет
Ну и ладно не работает, значит приспособятся как-то эти юзеры то их проблемы))

Добавлено через 42 минуты
Цитата Сообщение от volvo Посмотреть сообщение
даже в готовых кодах!!!!

Не по теме:

Кто-то здесь на форуме писал что это и есть встроенная в делфи защита от студентов и чайников, Ctrl-C ctrl-v ничего работать не будет в принципе

0
02.02.2015, 09:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2015, 09:21
Помогаю со студенческими работами здесь

Динамическое создание вкладок в PageControl
Я пишу html-редактор..использовал конпонент PageControl..на котором 2 вкладки (визуальный режим и...

Программное удаление вкладок PageControl
Уважаемые программисты помогите пожалуйста. Как удалять закладки TabSheet в PageControl...

В PageControl отключить отображение заголовков вкладок
Как в компоненте PageControl отключить отображение заголовков вкладок??? тоесть чтобы их вообще не...

PageControl в Delphi (динамическое создание вкладок)
Уважаемые, разверните и пните в нужную сторону... Никак не могу придумать каким образом осуществить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru