PageControl как отследить клик на заголовке страницы.

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

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

Ответить
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

PageControl как отследить клик на заголовке страницы.

Сообщение wofs »

Добрый день!
В силу нелюбви мной отдельных окон в своей утилите интерфейс организовал табами, через PageControl.
Но так же хотелось бы иметь возможность быстро и просто эти самые табы открепить в отдельные окна (как в браузере, если потянуть за вкладку).
С откреплением в отдельное окно и возвратом разобрался, но вот с простотой действия проблемы.

Подскажите, как отследить клик и перемещение мыши на заголовке страницы PageControl? То есть - как узнать, что пользователь схватил и потащил заголовок?

Изображение
Последний раз редактировалось wofs 08.09.2017 22:51:19, всего редактировалось 3 раза.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

хм... а зачем PageControl? Можно взять или схожее. Ведь в браузере не используется PageControl :wink:
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

pupsik писал(а):хм... а зачем PageControl?

Хотел по максимому использовать стандартные компоненты.
Утилиту пишу для себя и, через лет 10-15, когда захочется чего-нить добавить не хочется искать и устанавливать сторонние компоненты.
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

Обрабатывай onMouseMove, он срабатывает на заголовке таба. Проверяй, зажата ли кнопка мыши и если зажата то выполняй нужные действия.
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

WAYFARER писал(а):брабатывай onMouseMove, он срабатывает на заголовке таба.

Ага.... Спасибо! Будут вопросы - вернусь :)
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

wofs, я вообще подобный интерфейс реализовал кнопками. Правда, без вытягивания наружу... но мысль интересная. А почему вытягивать вкладку за заголовок? Если вытягивать текущую вкладку за ее рабочу. область, то можно использовать обычный Drag'n'Drop.

pupsik, если использовать сторонний, не идущий в стандартной поставке компонент, то придется его прикладывать к исходникам... здесь есть на форуме пример, когда компонент используемый мной не встал у человека.
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

Лекс Айрин писал(а):wofs, я вообще подобный интерфейс реализовал кнопками.

Кнопками это я разобрался :)
Лекс Айрин писал(а):А почему вытягивать вкладку за заголовок?

Ну... как то логичнее. Хочешь вкладку в сторону убрать - взял, потянул и вуаля - в отдельном окне.
wofs писал(а):Ага.... Спасибо! Будут вопросы - вернусь :)

Кординаты я получил - могу определить, что кликнули и тянем, а что тянем то?
Не смог сообразить - как узнать над каким заголовком находится мышь?

Добавлено спустя 29 минут 9 секунд:
Собственно все равно кликаем же, значит просто смотрим индекс активного таба...

Код: Выделить всё

PageControl1.TabIndex
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Лекс Айрин распространять с сорцами - не существенная проблема, а то что у человека не установился компонент - бывает всякое.

wofs TExtendedNotebook не смотрели? Из LazControls в компонентах лазаря. Может велики и найс... но...

п.с.
Хотя: если уж клеить похожее на поведение браузера то своё писать будете, или основываться на том что выше кинул ссыль(или схожем).
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

pupsik писал(а):wofs TExtendedNotebook не смотрели?

Не смотрел - пока устраивает PageControl. Но гляну.
Итак вот что получилось, не без шероховатостей, но работает.
https://yadi.sk/d/VawwN9MG3Mj94a

А теперь вопрос - как продолжить "тащить" уже новое окно?
То есть взяли, потащили - оторвали и продолжаем тащить? Подскажите решение, пожалуйста. Желательно кроссплатформенное.

Добавлено спустя 3 минуты 13 секунд:
И как мне свернуть конструкцию условий?

Код: Выделить всё

if ((X<mX-mXYdelta) or (X>mX+mXYdelta) or (Y<mY-mXYdelta) or (Y>mY+mXYdelta)) then 

Выглядит ужасно :(

Добавлено спустя 1 минуту 42 секунды:
pupsik писал(а):если уж клеить похожее на поведение браузера то своё писать будете

Да мне не то, чтоб поведение браузера - хочется комфортной работы в утилитке.

Добавлено спустя 2 часа 23 минуты 56 секунд:
Обнаружил странное поведение решения под Mac OS X - окно не встраивается... Буду разбираться...
И вопрос про то как продолжить тащить форму после открепления актуален...

Добавлено спустя 5 часов 49 минут 41 секунду:
Решил проблему в маке.
Продолжение здесь:
viewtopic.php?f=5&t=25398
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

wofs писал(а):Ну... как то логичнее. Хочешь вкладку в сторону убрать - взял, потянул и вуаля - в отдельном окне.

Все зависит от оси. В никсах проще таскать за само окно, что, кстати, тоже легко реализуется.
wofs писал(а):И как мне свернуть конструкцию условий?

либо макросом (не уверен), либо функцией.
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

Лекс Айрин писал(а):Все зависит от оси. В никсах проще таскать за само окно, что, кстати, тоже легко реализуется.

Принял на заметку, спасибо!
Лекс Айрин
Не подскажете, как реализовать задуманое?
viewtopic.php?f=5&t=25398
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

IndexOfPageAt
раньше он вроде звался
TabIndexAtClientPos
но в транке активно чистят всё deprecated, такчто первый вариант предпочтительнее
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

zub писал(а):IndexOfPageAt

Код: Выделить всё

IndexOfTabAt 

Это мы уже получили просто через индекс активной вкладки - все одно кликаем на нее. Но за вариант спасибо - есть задумка, где он пригодиться.
Ответить