Опрос о новой компоненте для псевдо MDI
Модераторы: alexs, Модераторы
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Опрос о новой компоненте для псевдо MDI
В текущей версии FBManager-а http://w7site.ru/fpc/fbm/ использую своеобразное MDI - что-то среднее между закладками и классическим MDI.
Во время разработки это ничем не отличается от дельфёвого MDI - те же стандартные окна.
А во время работы - автоматом окна прикрепляются к главной форме и управляются кнопками - закладками.
Сейчас эту технологию уже использую в нескольких своих рабочих проектах. В итоге практически готовы 3 визуальных компонент
1. MDI-панель - главная панель, на которой распологаются окна во время работы
2. MDI-закладки - закладки окон
3. MDI-копка закрытия окон.
Вопрос - включать эти компоненты в RxFPC. Будет ли это кому интересно?
Во время разработки это ничем не отличается от дельфёвого MDI - те же стандартные окна.
А во время работы - автоматом окна прикрепляются к главной форме и управляются кнопками - закладками.
Сейчас эту технологию уже использую в нескольких своих рабочих проектах. В итоге практически готовы 3 визуальных компонент
1. MDI-панель - главная панель, на которой распологаются окна во время работы
2. MDI-закладки - закладки окон
3. MDI-копка закрытия окон.
Вопрос - включать эти компоненты в RxFPC. Будет ли это кому интересно?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Включай, IMHO очень полезно. Объединяет преимущества MDI и SDI
Интересно.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Добавил компоненты в ревизии 2545.
Также добавлена демка на работу с компонентами.
Обзор:
На форму ложится 3 новых компоненты
TRxMDICloseButton - кнопка закрытия дочернего окна. Я её обычно ложу на паенель интрументов главного окна - прижимаю к правой стороне. Когда активно дочернее окно данная кнопка также отображает название дочернего окна.
TRxMDIPanel - панель, на которой находятся дочерние окна. Также через панель добавляются новые окна. Пример - в демке.
TRxMDITasks - панель навигации по открытым окнам. После открытия дочерних окон в данной панели появляются кнопки для каждого окна. Каждая кнопка имеет своё контекстное меню.
TRxMDIPanel имеет свойства для привязки панели навигации по открытым окнам (TRxMDITasks) и кнопки закрытия окна (TRxMDICloseButton). Перед начало работы необходимоустановить эти свойства.
Эти 3 компоненты позволяют настраивать интерфейс достаточно гибко.
Принимаю конструктивную критику и пожелания по доработке.
Добавлено спустя 1 минуту 13 секунд:
Если кто нарисует иконки для данных компонент - буду очень рад.
Также добавлена демка на работу с компонентами.
Обзор:
На форму ложится 3 новых компоненты
TRxMDICloseButton - кнопка закрытия дочернего окна. Я её обычно ложу на паенель интрументов главного окна - прижимаю к правой стороне. Когда активно дочернее окно данная кнопка также отображает название дочернего окна.
TRxMDIPanel - панель, на которой находятся дочерние окна. Также через панель добавляются новые окна. Пример - в демке.
TRxMDITasks - панель навигации по открытым окнам. После открытия дочерних окон в данной панели появляются кнопки для каждого окна. Каждая кнопка имеет своё контекстное меню.
TRxMDIPanel имеет свойства для привязки панели навигации по открытым окнам (TRxMDITasks) и кнопки закрытия окна (TRxMDICloseButton). Перед начало работы необходимоустановить эти свойства.
Эти 3 компоненты позволяют настраивать интерфейс достаточно гибко.
Принимаю конструктивную критику и пожелания по доработке.
Добавлено спустя 1 минуту 13 секунд:
Если кто нарисует иконки для данных компонент - буду очень рад.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Небольшое обновление компонента.
Перевёл ресурсы на русскй язык.
Добавил у TRxMDIPanel метод CloseAll.
Также работают пункты контекстных меню кнопоко дочерных оконо - "Закрыть Всё" и "Закрыть всё, кроме этого"
Перевёл ресурсы на русскй язык.
Добавил у TRxMDIPanel метод CloseAll.
Также работают пункты контекстных меню кнопоко дочерных оконо - "Закрыть Всё" и "Закрыть всё, кроме этого"
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Доработки компоненты.
Исправил ошибку с не верной передачей нажатий клавиш. Теперь когда форма не видна - она прячется через метод Form.Hide.
Также исправил ошибки с востановлением фокуса после переключения между окнами. Ранее текущий фокус не востанавливался.
Исправил ошибку с не верной передачей нажатий клавиш. Теперь когда форма не видна - она прячется через метод Form.Hide.
Также исправил ошибки с востановлением фокуса после переключения между окнами. Ранее текущий фокус не востанавливался.
Принимаю конструктивную критику и пожелания по доработке.
потыкал посидел, то что сделал под себя:
1. У форм убрал F.BorderStyle:=bsNone F.Align:=alClient, чтобы режим работы повторял MDI режим, чтоб окна можно было таскать и менять размер
2. TRxMDIPanel унаследовал от TScrollBox, таким образом режим работы повторяет стандартный MDI (есть полосы прокрутки), пришлось убрать свойства BevelInner BevelOuter панели
3. Добавил пункт меню кнопки "восстановить", который в случае если форма уползла за видимые границы панели, восстанавливает его в дефолтном месте с дефолтным размером, чтоб не скроллить до окна
таким образом получается вроде как стандартный MDI режим но с плюшками rxMDI, а вообще идея понравилась
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
ronin
Ну а результатом поделиться?
PS
Я принципиально для себя не стал делать возможность изменения размера внутреннего окна - от этого только лишние проблемы. Да и работать это будет только в винде. В линухе во вложенном окне не отрисовывается заголовок окна. Надо самому его эмулировать.
Ну а результатом поделиться?
PS
Я принципиально для себя не стал делать возможность изменения размера внутреннего окна - от этого только лишние проблемы. Да и работать это будет только в винде. В линухе во вложенном окне не отрисовывается заголовок окна. Надо самому его эмулировать.
в общем пришлось пока отказаться от форм с границами, F.BorderStyle:=bsNone вернул, проблема в сохранении/загрузке размеров форм, при прикреплении формы к RxMDIPanel её размер хаотично увеличивается, гугл сказал что это старая проблема, решить не получилось по быстрому
ещё возникла необходимость не уничтожать форму при закрытии, пришлось тоже городить костыли, в некоторых случаях access violation вылетает, изредка, пока тоже не разобрался
какой адрес svn библиотеки? а то на https://lazarus-ccr.svn.sourceforge.net ... ponents/rx последний коммит в апреле
ещё возникла необходимость не уничтожать форму при закрытии, пришлось тоже городить костыли, в некоторых случаях access violation вылетает, изредка, пока тоже не разобрался
какой адрес svn библиотеки? а то на https://lazarus-ccr.svn.sourceforge.net ... ponents/rx последний коммит в апреле
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
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. Надо подумать.
Repository Root: https://svn.code.sf.net/p/lazarus-ccr/svn
Насчёт уничтожения - я специально сдел так. Если есть небходимость - то можно подумать. В принципе надо перед вызовом обработчика OnClose устанавливать флаг уничтожения формы. Тода ты в своём обработчике OnClose можешь именить флаг на Hide. Надо подумать.
alexs писал(а): TRxMDITasks - панель навигации по открытым окнам. После открытия дочерних окон в данной панели появляются кнопки для каждого окна. Каждая кнопка имеет своё контекстное меню.
Не появляется контекстное меню.
Что не так у меня?
Лазарус 1.2.6.
FPS 2.6.4
{$DEFINE OLD_EDITBUTTON}
Поскольку с
{.$DEFINE OLD_EDITBUTTON}
не компилируется.
Я ступил.
Подумал о контекстном меню в режиме csDesigning in ComponentState.
Подумал о контекстном меню в режиме csDesigning in ComponentState.
