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

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

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

Dane
новенький
Сообщения: 27
Зарегистрирован: 02.02.2008 22:49:44

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

Сообщение Dane »

Есть несколько листов на форме PageControl. Надо изменить начертание (например, сделать жирным шрифт) заголовка одного из листов. Не смог найти решения. Свойства а-ля TabDraw не нашел. Помогите, пожалуйста, советом или примером кода.
Lazarus 1.0.8, FPC 2.6.6
Zak
новенький
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Сообщение Zak »

Тема еще актуальна? Собственно тоже интересует вопрос по TabSheet в PageControl, плюс ко всему хотелось бы узнать как меняется цвет фона закладки (только ярлычка).
Или может есть альтернатива компоненту?
Lazarus 1.0.10, FPC 2.6.2
Аватара пользователя
amateur
энтузиаст
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Сообщение amateur »

Посмотрите, гдет валялась альтернатива. Кажись на вики компонентах, плюс мелькало и на сайте freepascal.ru (кажись прикрепленная тема по компонентам).
Zak
новенький
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Сообщение Zak »

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

Ох, не могу найти ни где, может ссылкой поделитесь?
Кстати в rxLib есть этот компонент?
Аватара пользователя
amateur
энтузиаст
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Сообщение amateur »

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

то что я имел ввиду - 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
Zak
новенький
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Сообщение Zak »

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

Сообщение Zak »

Хмм... ну в общем попробовал на 1.1 / fpc 2.7.1
ошибка такая, даже не могу понять куда копнуть
Изображение
Аватара пользователя
amateur
энтузиаст
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Сообщение amateur »

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

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

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

Сообщение Zak »

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

Изображение

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

Сообщение amateur »

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

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

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

Добавлено спустя 23 минуты 4 секунды:
но с цветом надо играть аккуратно. Однажды у себя разукрасил чуток прогу. А потом в лине запустил и ощутил прелесть :mrgreen: . Перешел к стандарту. А если надо простенькое и красивое - МСЕ (оно кругом одинаково будет, ели не забывать некоторые вещи).
Zak
новенький
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Сообщение Zak »

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

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

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

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

Сообщение Zak »

Возвращаясь, к теме, всё ни как не могу успокоиться
Вот небольшие результаты:
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?! :(

В общем, для меня тема еще актуальна
Dane
новенький
Сообщения: 27
Зарегистрирован: 02.02.2008 22:49:44

Сообщение Dane »

Хотелось бы поддержать Вас в Вашем поиске. Для меня тема тоже еще актуальна. Для текущего проекта я, конечно, нашел другое воплощение замысла, но хотелось бы получить правильную реализацию, а не выход из положения. Тем более, что в родственнике (delphi), данный функционал давно уже есть.
Zak
новенький
Сообщения: 31
Зарегистрирован: 16.06.2013 07:24:39
Откуда: морозная Сибирь

Сообщение Zak »

Случайно откопал ссылку по некой лаве 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
Откуда: морозная Сибирь

Сообщение Zak »

Вот что еще отрыл на просторах интернета, про подсветку табов 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;

код не проверял, т.к. для меня это не вариант
Ответить