Опрос о новой компоненте для псевдо MDI

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

Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 29.09.2012 00:05:10

В текущей версии FBManager-а http://w7site.ru/fpc/fbm/ использую своеобразное MDI - что-то среднее между закладками и классическим MDI.
Во время разработки это ничем не отличается от дельфёвого MDI - те же стандартные окна.
А во время работы - автоматом окна прикрепляются к главной форме и управляются кнопками - закладками.
Сейчас эту технологию уже использую в нескольких своих рабочих проектах. В итоге практически готовы 3 визуальных компонент

1. MDI-панель - главная панель, на которой распологаются окна во время работы
2. MDI-закладки - закладки окон
3. MDI-копка закрытия окон.

Вопрос - включать эти компоненты в RxFPC. Будет ли это кому интересно?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение Ichthyander » 29.09.2012 00:20:11

Включай, IMHO очень полезно. Объединяет преимущества MDI и SDI
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Опрос о новой компоненте для псевдо MDI

Сообщение B4rr4cuda » 29.09.2012 00:42:18

Интересно.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 09.10.2012 14:41:24

Добавил компоненты в ревизии 2545.
Также добавлена демка на работу с компонентами.

Обзор:
На форму ложится 3 новых компоненты
TRxMDICloseButton - кнопка закрытия дочернего окна. Я её обычно ложу на паенель интрументов главного окна - прижимаю к правой стороне. Когда активно дочернее окно данная кнопка также отображает название дочернего окна.
TRxMDIPanel - панель, на которой находятся дочерние окна. Также через панель добавляются новые окна. Пример - в демке.
TRxMDITasks - панель навигации по открытым окнам. После открытия дочерних окон в данной панели появляются кнопки для каждого окна. Каждая кнопка имеет своё контекстное меню.

TRxMDIPanel имеет свойства для привязки панели навигации по открытым окнам (TRxMDITasks) и кнопки закрытия окна (TRxMDICloseButton). Перед начало работы необходимоустановить эти свойства.

Эти 3 компоненты позволяют настраивать интерфейс достаточно гибко.

Принимаю конструктивную критику и пожелания по доработке.

Добавлено спустя 1 минуту 13 секунд:
Если кто нарисует иконки для данных компонент - буду очень рад.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 17.10.2012 00:50:50

Небольшое обновление компонента.
Перевёл ресурсы на русскй язык.
Добавил у TRxMDIPanel метод CloseAll.
Также работают пункты контекстных меню кнопоко дочерных оконо - "Закрыть Всё" и "Закрыть всё, кроме этого"
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 14.06.2013 23:25:57

Доработки компоненты.
Исправил ошибку с не верной передачей нажатий клавиш. Теперь когда форма не видна - она прячется через метод Form.Hide.
Также исправил ошибки с востановлением фокуса после переключения между окнами. Ранее текущий фокус не востанавливался.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение ronin » 15.06.2013 13:33:14

Принимаю конструктивную критику и пожелания по доработке.


потыкал посидел, то что сделал под себя:

1. У форм убрал F.BorderStyle:=bsNone F.Align:=alClient, чтобы режим работы повторял MDI режим, чтоб окна можно было таскать и менять размер
2. TRxMDIPanel унаследовал от TScrollBox, таким образом режим работы повторяет стандартный MDI (есть полосы прокрутки), пришлось убрать свойства BevelInner BevelOuter панели
3. Добавил пункт меню кнопки "восстановить", который в случае если форма уползла за видимые границы панели, восстанавливает его в дефолтном месте с дефолтным размером, чтоб не скроллить до окна

таким образом получается вроде как стандартный MDI режим но с плюшками rxMDI, а вообще идея понравилась :)
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46

Re: Опрос о новой компоненте для псевдо MDI

Сообщение Kemet » 15.06.2013 14:06:26

Да, это то,чего мне не хватало, спасибо, alexs
Kemet
постоялец
 
Сообщения: 241
Зарегистрирован: 10.02.2010 19:28:32
Откуда: Временно оккупированная территория

Re: Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 15.06.2013 22:48:33

ronin
Ну а результатом поделиться?
PS
Я принципиально для себя не стал делать возможность изменения размера внутреннего окна - от этого только лишние проблемы. Да и работать это будет только в винде. В линухе во вложенном окне не отрисовывается заголовок окна. Надо самому его эмулировать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение ronin » 17.06.2013 22:43:18

в общем пришлось пока отказаться от форм с границами, F.BorderStyle:=bsNone вернул, проблема в сохранении/загрузке размеров форм, при прикреплении формы к RxMDIPanel её размер хаотично увеличивается, гугл сказал что это старая проблема, решить не получилось по быстрому

ещё возникла необходимость не уничтожать форму при закрытии, пришлось тоже городить костыли, в некоторых случаях access violation вылетает, изредка, пока тоже не разобрался

какой адрес svn библиотеки? а то на https://lazarus-ccr.svn.sourceforge.net ... ponents/rx последний коммит в апреле
ronin
постоялец
 
Сообщения: 174
Зарегистрирован: 27.01.2010 00:14:46

Re: Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 17.06.2013 22:53:13

URL: https://svn.code.sf.net/p/lazarus-ccr/svn/components/rx
Repository Root: https://svn.code.sf.net/p/lazarus-ccr/svn

Насчёт уничтожения - я специально сдел так. Если есть небходимость - то можно подумать. В принципе надо перед вызовом обработчика OnClose устанавливать флаг уничтожения формы. Тода ты в своём обработчике OnClose можешь именить флаг на Hide. Надо подумать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение sign » 23.10.2014 11:20:02

alexs писал(а): TRxMDITasks - панель навигации по открытым окнам. После открытия дочерних окон в данной панели появляются кнопки для каждого окна. Каждая кнопка имеет своё контекстное меню.

Не появляется контекстное меню.
Что не так у меня?

Лазарус 1.2.6.
FPS 2.6.4
{$DEFINE OLD_EDITBUTTON}
Поскольку с
{.$DEFINE OLD_EDITBUTTON}
не компилируется.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Опрос о новой компоненте для псевдо MDI

Сообщение alexs » 23.10.2014 16:32:53

Всё штатно
Правой кнопкой мышки на кнопке окна
Вложения
menu.png
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Опрос о новой компоненте для псевдо MDI

Сообщение sign » 24.10.2014 05:45:56

Я ступил.
Подумал о контекстном меню в режиме csDesigning in ComponentState.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в RxLib

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

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

Рейтинг@Mail.ru