Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / сделать вкладки pagecontrol более контрастными / 8 сообщений из 8, страница 1 из 1
05.11.2017, 20:51:03
    #39548077
forward12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
Юзаю вышеуказанный компонент, и пользователи жалуются что не хватает контраста между вкладками, не всегда они понимают какая вкладка сейчас активна. Пытался нагуглить решения, тут уже были темы когда камрады разукрашивали или сам ярлык закладки или саму закладку через ondraw, и дальше рисовали на канве. Но в тех примерах которые я видел все таки отрисовка прямоугольников была и не шибко красиво было когда остальные вкладки заокругленные а тут контрастного цвета прямоугольник с рубленными краями. Можно ли менее радикально сделать ярлык более заметным, текст его подсветить или сделать жирным, или эффект тени?
Знаю что можно поставить скины и за счет скинов можно будет добиться более контрастных вкладок но не хочу связываться со скинами ибо прога будет больше тормозить.
...
Рейтинг: 0 / 0
05.11.2017, 21:11:02
    #39548085
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
...
Рейтинг: 0 / 0
06.11.2017, 12:50:29
    #39548343
forward12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
DimaBr,

Спасибо за код и за анимашку. Можно весь код скинуть? Я код перенабрал, но подсветки пока нет. Вот событие которое перед PageControl1DrawTab, там где в одну строку задается свойство для пейджконтрола.
...
Рейтинг: 0 / 0
06.11.2017, 13:11:15
    #39548348
forward12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
погуглил похожий код
http://www.cyberforum.ru/delphi-beginners/thread599815.html
тут ребята обсуждали похожу задачу, разукрашка ярлыков при наведении мышки. И пишут о том что что в Д7 на Win7 x64 событие DrawTab не срабатывает в принципе. Я начал дебажить, поставил брекпоинт внутри этого события и начал переключать вкладки - входа в это событие нет. Как раз под 64 битной виндой, и под 7-кой и под 2012 сервером.
...
Рейтинг: 0 / 0
06.11.2017, 15:22:53
    #39548399
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
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
06.11.2017, 15:26:02
    #39548402
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
P.S.
тип TWMDrawItem определен в юните Messages
...
Рейтинг: 0 / 0
06.11.2017, 15:59:25
    #39548416
forward12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сделать вкладки pagecontrol более контрастными
Кроик Семён,

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

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


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