powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / сделать вкладки pagecontrol более контрастными
8 сообщений из 8, страница 1 из 1
сделать вкладки pagecontrol более контрастными
    #39548077
forward12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзаю вышеуказанный компонент, и пользователи жалуются что не хватает контраста между вкладками, не всегда они понимают какая вкладка сейчас активна. Пытался нагуглить решения, тут уже были темы когда камрады разукрашивали или сам ярлык закладки или саму закладку через ondraw, и дальше рисовали на канве. Но в тех примерах которые я видел все таки отрисовка прямоугольников была и не шибко красиво было когда остальные вкладки заокругленные а тут контрастного цвета прямоугольник с рубленными краями. Можно ли менее радикально сделать ярлык более заметным, текст его подсветить или сделать жирным, или эффект тени?
Знаю что можно поставить скины и за счет скинов можно будет добиться более контрастных вкладок но не хочу связываться со скинами ибо прога будет больше тормозить.
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548085
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548343
forward12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Спасибо за код и за анимашку. Можно весь код скинуть? Я код перенабрал, но подсветки пока нет. Вот событие которое перед PageControl1DrawTab, там где в одну строку задается свойство для пейджконтрола.
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548348
forward12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
погуглил похожий код
http://www.cyberforum.ru/delphi-beginners/thread599815.html
тут ребята обсуждали похожу задачу, разукрашка ярлыков при наведении мышки. И пишут о том что что в Д7 на Win7 x64 событие DrawTab не срабатывает в принципе. Я начал дебажить, поставил брекпоинт внутри этого события и начал переключать вкладки - входа в это событие нет. Как раз под 64 битной виндой, и под 7-кой и под 2012 сервером.
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548399
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

внизу прилагается код, выдранный из моего проекта на Delphi 6, работает правильно на любых Windows

Собственно, у меня TMyPageControl=class(TPageControl), новый компонент установленный в IDE.
Но в единичном случае можно обойтись без создания и инсталляции в палитру нового компонента, а воспользоваться хаком с подменой класса.



Код: pascal
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.
43.
44.
45.
46.
47.
48.
uses Controls, ComCtrls 

type
   
   TPageControl=class(ComCtrls.TPageControl) //хак с подменой класса
   protected
      procedure CreateParams(var Params: TCreateParams); override;
   private
      procedure CNDrawItem(var Msg: TWMDrawItem); message CN_DRAWITEM;
   end;
   
//------------------------------------------------------------------------------   
procedure TPageControl.CreateParams(var Params: TCreateParams);
begin
   inherited CreateParams(Params);
   Params.Style:=Params.Style or TCS_OWNERDRAWFIXED;
end;   
//------------------------------------------------------------------------------      
procedure TPageControl.CNDrawItem(var Msg: TWMDrawItem);
var
   R                 : TRect;
   Page              : TTabSheet;
   iVisibleID        : integer;
   i                 : integer;
begin
   inherited;

   R:=Msg.DrawItemStruct.rcItem;

   Page:=nil;
   iVisibleID:=-1;
   for i:=0 to PageCount-1 do
   begin
      if Pages[i].TabVisible then
         iVisibleID:=iVisibleID+1;

      if iVisibleID=Msg.DrawItemStruct.itemID then
      begin
         Page:=Pages[i];
         break;
      end;
   end;
  
   //далее делаем что нужно, используя:
   // - R
   // - Canvas
   // - Page
end;
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548402
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
тип TWMDrawItem определен в юните Messages
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548416
forward12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

спасибо за очень развернутый ответ, буду тестить.
...
Рейтинг: 0 / 0
сделать вкладки pagecontrol более контрастными
    #39548449
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
forward12DimaBr,

Можно весь код скинуть?
Код весь виден, больше кода нет. Свойство OwnerDraw = true
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / сделать вкладки pagecontrol более контрастными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]