PageControl изменить стиль заголовка TabSheet

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

PageControl изменить стиль заголовка TabSheet

Сообщение Dane » 17.04.2013 17:59:13

Есть несколько листов на форме PageControl. Надо изменить начертание (например, сделать жирным шрифт) заголовка одного из листов. Не смог найти решения. Свойства а-ля TabDraw не нашел. Помогите, пожалуйста, советом или примером кода.
Lazarus 1.0.8, FPC 2.6.6
Dane
новенький
 
Сообщения: 27
Зарегистрирован: 02.02.2008 23:49:44

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 22.07.2013 18:04:30

Тема еще актуальна? Собственно тоже интересует вопрос по TabSheet в PageControl, плюс ко всему хотелось бы узнать как меняется цвет фона закладки (только ярлычка).
Или может есть альтернатива компоненту?
Lazarus 1.0.10, FPC 2.6.2
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение amateur » 22.07.2013 19:11:25

Посмотрите, гдет валялась альтернатива. Кажись на вики компонентах, плюс мелькало и на сайте freepascal.ru (кажись прикрепленная тема по компонентам).
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 22.07.2013 20:47:50

Тут по форуму посмотрел, кто-то какое-то решение вроде нашел, но датируется вроде 2008 годом и ссылка на решение уже не рабочая.
(уже потерял этот топик)

Ох, не могу найти ни где, может ссылкой поделитесь?
Кстати в rxLib есть этот компонент?
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение amateur » 22.07.2013 22:10:04

:)
подобие да но смысл другой...

то что я имел ввиду - http://wiki.freepascal.org/TGradPageControl

Ну и есть в Codetyphon "прикольные" компоненты (3Д вид :)). Лава кажись. Ооочень понравилось - но смысла не вижу.

Добавлено спустя 50 минут 29 секунд:
https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/gradcontrols так точнее :).
В пакете кнопки и табконтрол. В принципе только что запустил у себя норм. работает что кнопки что таб. Таб только ламерски подправил, в рантайме создал таб и отладчик направил на что ругается и закоментил в unit ugradtabcontrol;

Код: Выделить всё
procedure TGradTabControl.AlignPage(APage : TGradTabPage; ARect : TRect);
begin
     if APage <> nil then
     with APage do
     begin
         Left:=ARect.Left;
         Top :=ARect.Top;
{         Width := 40;//ARect.Right;
         Height:= 20;//ARect.Bottom; }
     end;
end;


Хотя может и не правильно, но он мне не интересен :)

Лазарь 1.1 фпс 2.7.1
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 23.07.2013 00:23:24

спасибо. попробую на версии 1.1, т.к. на версии 1.0.10 выдает ошибку типа loop detected при добавлении закладки (без разницы, в рантайме или через конструктор)
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 25.07.2013 13:19:51

Хмм... ну в общем попробовал на 1.1 / fpc 2.7.1
ошибка такая, даже не могу понять куда копнуть
Изображение
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение amateur » 25.07.2013 16:08:23

1. Код видели? Просто закоментируйте Width и Height в процедуре TGradTabControl.AlignPage(. Модуль в сорцах компонента. И очистить и пересобрать компонент.

2. Установить CodeTyphon и забыться от переизбытка набора компонентов в нем. Там есть и парочка реализаций красивых табов.

"прикольные" компоненты (3Д вид :)). Лава кажись
эх, пардон - не лава а ORCE (кажись их переименовали, ранее был Lava). Смысл этого набора - нечто похоже на "огненную обезьяну" в наборе дельфи.
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 25.07.2013 18:26:55

Да конечно, видел ;) комментил как сказали
Ну в общем там всё равно ошибка loop detected, но уже после того как кинешь компонент на форму, IDE зависает на минутку и потом ругается ошибкой

Изображение

ну в общем ладно, похоже что эта бетка не работает, но, всё-равно спасибо. а тифон посмотрю на досуге
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение amateur » 25.07.2013 19:59:16

т.е. Вы изменили исходник, пересобрали пакет, а потом и лазарь и у Вас выскакивает диалог? Мдя- бывает :lol: . Компонент работал очень много лет назад и некоторые вещи уж очень не сильны. Ну меняет цвет владки, ну еще пару вещиц.

А тифон, впринципе, для начала сойдет (если нравиться с большим кол-вом компонентов "шерстить") А так, свн версия лазаря куда нормальнее тифона ( хотя: х.з. на вкус и цвет...).

а тифон посмотрю на досуге
уделите внимание ORCE демкам, кажись оно Вам подойдет :). Мне бы туда браузер впихнуть и для личной красивости очень неплохо будет.

Добавлено спустя 23 минуты 4 секунды:
но с цветом надо играть аккуратно. Однажды у себя разукрасил чуток прогу. А потом в лине запустил и ощутил прелесть :mrgreen: . Перешел к стандарту. А если надо простенькое и красивое - МСЕ (оно кругом одинаково будет, ели не забывать некоторые вещи).
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 28.07.2013 12:54:58

amateur писал(а):т.е. Вы изменили исходник, пересобрали пакет, а потом и лазарь и у Вас выскакивает диалог?
ага

amateur писал(а):если нравиться с большим кол-вом компонентов "шерстить"
много не надо. надо лишь цвет фона "ярлыка". остальное всё устраивает :)
а насчет посмотреть тифон, так это я имел ввиду возможность выдрать от-туда что-либо для своих целей.

amateur писал(а):но с цветом надо играть аккуратно. Однажды у себя разукрасил чуток прогу. А потом в лине запустил и ощутил прелесть :mrgreen: . Перешел к стандарту.
с этим вкурсе, поэтому минимально всё.

В любом случае спасибо за подсказки.
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 27.08.2013 13:08:40

Возвращаясь, к теме, всё ни как не могу успокоиться
Вот небольшие результаты:
amateur писал(а):Установить CodeTyphon и забыться от переизбытка набора компонентов в нем. Там есть и парочка реализаций красивых табов.

amateur писал(а):эх, пардон - не лава а ORCE (кажись их переименовали, ранее был Lava). Смысл этого набора - нечто похоже на "огненную обезьяну" в наборе дельфи.


установил версию 4.41, к сожалению не нашел парочки :)
Есть один более-менее красивый (в стиле metro), но и тот коряво работает
возможность задать цвета в нем есть, для наименования самого контрола работает, есть даже при наведении мыши цвет меняется и т.п.
но для самих табов - не работает., называется FZControl
Разработчик http://forum.lazarus.freepascal.org/index.php?topic=20204.0 попросил чтобы выложили на гуглкод (собственно что народ и сделал)

ORCE или лаву в тифоне не обнаружил (может пропустил?)

Нашел замечательный (бесплатный для СНГ) проект http://www.alphaskins.com/ но он для дельфи :(

Кстати, думал копнуть в сторону самостоятельной отрисовки табов, но почему-то не нашел у PageControl свойства OwnerDraw и события OnDrawTab. WTF?! :(

В общем, для меня тема еще актуальна
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Dane » 27.08.2013 18:09:07

Хотелось бы поддержать Вас в Вашем поиске. Для меня тема тоже еще актуальна. Для текущего проекта я, конечно, нашел другое воплощение замысла, но хотелось бы получить правильную реализацию, а не выход из положения. Тем более, что в родственнике (delphi), данный функционал давно уже есть.
Dane
новенький
 
Сообщения: 27
Зарегистрирован: 02.02.2008 23:49:44

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 27.08.2013 19:51:02

Случайно откопал ссылку по некой лаве http://www.delphiaccess.com/forum/lazar ... a-lazarus/
но честно :) нифига не понял. всё на заморском языке. но картинки выглядят красиво :)

Добавлено спустя 48 минут 8 секунд:
Итак.
Всё-таки нашел в тифоне компонент, путем пробы.
В общем называется он не ORCE а ORCA (у меня это самая последняя вкладка оказалась среди компонентов)
привычных иконок там нету, а есть что-то напоминающее работу с 2D и 3D графикой.
В общем закинул на форму TD2Scene, а в нем уже по правой кнопке можно добавлять итемы
Вот примерно накидал. Одну из вкладок я закрасил красным градиентом. В общем, надо ковырять этот компоненты, выглядит довольно красиво.
В том числе, у этого компонента, есть некий редактор темы оформления (или стиль оформления). тоже по-правой кнопке.

Осталось выяснить, будет ли это всё работать под линуксом, а также какой будет размер исполняемого файла (хотя для меня это не критично, т.к. "почти" делаю для себя :) )

Добавлено спустя 4 часа 7 минут 3 секунды:
Установил этот ORCA в Lazarus (также потребовалось воткнуть компоненты directx и opengl), собрал аналогичный проект (что на картинке), exe занимает 27 MB :)
Что-то мне подсказывает, что в лине эта штука не заведется (... пока некогда проверять, если кто пробовал - отпишитесь)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Re: PageControl изменить стиль заголовка TabSheet

Сообщение Zak » 02.09.2013 17:19:32

Вот что еще отрыл на просторах интернета, про подсветку табов http://stackoverflow.com/questions/9340940/is-it-possible-to-change-the-colour-of-ttabsheet-tabs
собственно вкратце, там говориться про only windows и отключенный манифест.
If it's enough for you to get a little bit tricky solution working only on Windows with themes disabled then try the following:
Un-check the Use manifest file to enable themes (Windows only) option from Project / Project Options ... project settings dialog and paste the following code into your unit with page control. It uses the interposed class, so it will work only in units where you paste this code

и пример кода с картинкой (результатом). может кому пригодиться
Код: Выделить всё
uses
  ComCtrls, Windows, LCLType;

type
  TPageControl = class(ComCtrls.TPageControl)
  private
    procedure CNDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

implementation

procedure TPageControl.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    if not (csDesigning in ComponentState) then
      Style := Style or TCS_OWNERDRAWFIXED;
  end;
end;

procedure TPageControl.CNDrawItem(var Message: TWMDrawItem);
var
  BrushHandle: HBRUSH;
  BrushColor: COLORREF;
begin
  with Message.DrawItemStruct^ do
  begin
    case itemID of
      0: BrushColor := RGB(235, 24, 33);
      1: BrushColor := RGB(247, 200, 34);
      2: BrushColor := RGB(178, 229, 26);
    else
      BrushColor := ColorToRGB(clBtnFace);
    end;
    BrushHandle := CreateSolidBrush(BrushColor);
    FillRect(hDC, rcItem, BrushHandle);
    SetBkMode(hDC, TRANSPARENT);
    DrawTextEx(hDC, PChar(Page[itemID].Caption), -1, rcItem, DT_CENTER or
      DT_VCENTER or DT_SINGLELINE, nil);
  end;
  Message.Result := 1;
end;

код не проверял, т.к. для меня это не вариант
Zak
новенький
 
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru