Нормальные табы

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

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

Ответить
Аватара пользователя
mr.denton
новенький
Сообщения: 23
Зарегистрирован: 30.04.2006 03:23:07

Нормальные табы

Сообщение mr.denton »

Вопрос.
Потребовалось написать оконное приложение, вспомнил лазаря, поставил, начал кидать компоненты. Проблема. Нужны табы с кнопками закрытия на оных. В стандартной поставке таких нет, рисовать что-то на них самому - тоскливо, реализовывать логику табов из других компонентов - не тру. Может кто знает хорошее решение?
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Писать наследника от стандартного PageControl и добавлять Button или Image на каждый таб.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

у объектов TNotebook (закладка Additionals) и TExtendedNotebook (LazControls)
есть свойство Options, где nboShowCloseButtons нужно поставить в true.
.wOvAN
постоялец
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12
Контактная информация:

Сообщение .wOvAN »

скалогрыз писал(а):у объектов TNotebook (закладка Additionals) и TExtendedNotebook (LazControls)
есть свойство Options, где nboShowCloseButtons нужно поставить в true.


Это только QT и в GTK возможно работает, а вот win32 не реализовано.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

.wOvAN писал(а):Это только QT и в GTK возможно работает, а вот win32 не реализовано.

верное дополнение!
но:
1) что мешает реализовать? ;)
2) автор не обмолвился под какую систему он пишет. Да и Qt, и Gtk2 есть под винду.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Табы можно отрисовывать самому, это же просто. И щелчок на табе можно поймать.
Совсем ведь не сложно.
.wOvAN
постоялец
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12
Контактная информация:

Сообщение .wOvAN »

Ну реализовать сложнее чем в дельфи, так как событий отрисовки табов LCL не дает для обработки, нужно копаться в коде который плавно уходит в код виджетов, в общем чтобы раскопать и реализовать нужна большая лопата :)
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Ну, нужно ведь все равно сделать свою отрисовку. Функциональности то такой виджеты по-умолчанию не дают. :(
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

можно на каждую вкладку в отдельности нацепить по кнопочке, это проще всего. просто тогда юзверь сможет закрыть только ту вкладку, которая щас активна
Аватара пользователя
mr.denton
новенький
Сообщения: 23
Зарегистрирован: 30.04.2006 03:23:07

Сообщение mr.denton »

скалогрыз писал(а):у объектов TNotebook (закладка Additionals) и TExtendedNotebook (LazControls)
есть свойство Options, где nboShowCloseButtons нужно поставить в true.

Вот это уже интересно, попробую сегодня.
скалогрыз писал(а):
.wOvAN писал(а):Это только QT и в GTK возможно работает, а вот win32 не реализовано.

верное дополнение!
но:
1) что мешает реализовать? ;)
2) автор не обмолвился под какую систему он пишет. Да и Qt, и Gtk2 есть под винду.

Т.к. предполагается еще и винда, вопрос второй: как заставить lazarus использовать Gtk под виндами?
Timid писал(а):Табы можно отрисовывать самому, это же просто. И щелчок на табе можно поймать.
Совсем ведь не сложно.

Мы не ищем легких путей :)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

mr.denton писал(а):как заставить lazarus использовать Gtk под виндами?

Как минимум - поставить себе набор GTKашных библиотек и заново перекомпилировать Lazarus. Но вот именно в этом месте порылась хитрая, но весьма шелудивая собака. :) Если Вы захотите передать написанную на таком Лазарусе программу на другой компьютер, то вместе с программой придётся передавать и набор GTKашных библиотек.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

mr.denton писал(а):Т.к. предполагается еще и винда, вопрос второй: как заставить lazarus использовать Gtk под виндами?

Теоретически -- так:
1) Открываем консоль с текущей папкой path:\to\lazarus\lcl\interfaces\gtk2, делаем make.
2) В настройках проекта в Лазарусе указываем виджетсет gtk2
3) Собираем проект
4) Качаем gtk для windows, распаковываем (там куча архивов, включая компоненты самой gtk и сторонние библиотеки, от которых она зависит)
5) Запускаем наш проект
6) Смотрим названия библиотек, на которые он ругается, и копируем их из папки распакованного gtk в папку нашей программы.
7) После того как программа запускается, мучаемся с подключением нативного windows-скина для gtk. У меня это в своё время так и не получилось. В качестве источника вдохновения можно поковырять дистрибутив gimp или inkscape под windows, им это как-то удалось :)

Правда, если бы сильно приспичило использовать не win32 виджетсет, я бы собирал под windows с qt. Она на этой платформе выглядит попривычнее чем gtk, даже с учётом использования нативных скинов. Процедура сборки примерно такая же, только ещё понадобится библиотека-адаптер Qt4Pas, ссылки тут.

P.S.
1. Пересобирать весь Lazarus под gtk/qt смысла нет, достаточно пересобирать виджетсет (т.е. сделать make в его папке)
2. Приложение с пустой формой в сумме (исполняемый файл + библиотеки + конфиги, которые нужны gtk для поддержки скинов) выходит примерно в 38 МБайт для gtk и в 37 МБайт для qt. Это с учётом strip, без него ещё +10 МБайт :)
.wOvAN
постоялец
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12
Контактная информация:

Сообщение .wOvAN »

Где то у меня валялся компонент реализующий табы всякие цветные, но глючноват малость, пороюсь может найду.

Добавлено спустя 1 час 26 минут 57 секунд:
то, что хотел найти не нашел, но нашел другой табконтрол с оунердровом маленький пример накатал http://online-tv.net.ru/ExControls.7z
Ответить