многодокументное окно в Lazarus

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

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

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

многодокументное окно в Lazarus

Сообщение wofs »

Добрый день!
Не разобрался, возможно ли в лазарус создать многодокументное окно (аналог MIDI в Delphi ) ?
Помогите пожалуйста.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Нет. Поддержка MDI в Lazarus пока (будем надеяться) не реализована.
Есть правда компонент MultiDoc, но он очень сырой...
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

а чем Tab-ы не устраивают?! =)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

скалогрыз писал(а):а чем Tab-ы не устраивают?! =)

Табы конечно хорошо, но не для всех целей они годятся ИМХО :wink:
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

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

Сообщение wofs »

табами щас и реализовано за неимением лучшего, но это не очень удобно.
например - расположить 2 окна рядом (к примеру список банковских выписок и список накладных)
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

не совсем понятно зачем тут MDI нужно, потому что на одной форме (табе/панельке) это легко делается:
Два списка (TListView или TStringGrid), разделённых сплиттером.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

скалогрыз писал(а):на одной форме (табе/панельке) это легко делается:

+1 насоздавай себе понелек и кидай их себе по форме как хочешь. можно даже к ним кнопочки свернуть\закрыть прикрутить.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Multidoc + LMDI вполне пригоден к применению в мирных целях.

http://br.geocities.com/hipernetjr/lmdi/index_en.html
Аватара пользователя
wofs
постоялец
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань
Контактная информация:

Сообщение wofs »

т.е. вы хотите сказать, что табами и панельками можно реализовать нечто подобное?
Изображение

Добавлено спустя 2 минуты 40 секунд:
svk12 писал(а):Multidoc + LMDI вполне пригоден к применению в мирных целях.

http://br.geocities.com/hipernetjr/lmdi/index_en.html

спасибо, посмотрим что за зверь :)
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

ну может конечно это дело привычки, но ИМХО данной картинкой только попонтоваться можно, так как работать в таком многообразии не возможно.

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

Сообщение wofs »

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

пример не подкинешь?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

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

wofs писал(а):т.е. вы хотите сказать, что табами и панельками можно реализовать нечто подобное?
Изображение

нет конечно! =) табы и панельки это же не MDI!

я к чему! скриншот, конечно скриншот, но об идиеологии (интерфейса) программы они ничего не говорит!

на скриншоте:
* есть оторванное окошко с TreeView. зачем оно? если я выберу пункт в нём, содержимое другого окна поменяется? если да, то почему бы их не объединить в одно окно.
* плавающая "панелька" могла быть присоединена к верхнему меню с кнопками. Так ещё проще найти, потому что она не затеряется среди других окошек, и её координаты всегда точно находятся относительно верхнего-левого угла экрана. Допустим нужно чтобы оно было плавающим: не вопрос - fsStayOnTop для окошек никто не отменял!
* почему "О программе" тоже сделано MDI - загадка. Неписанный стандард - About делать отдельным окном, возможно даже модальным.
* ну и в "основном окне" (то которое с таблицами, заголовок нечитаемый), так содержимое окна сделано табами!

Вообще, данный скриншот, хорошо символизирует почему MDI не нужно использовать.
Что такое MDI - это возможность ограничивать область N-количества окон программы, некой областью. При работе с MDI программами, обычно возникает желание раскинуть всю это область на весь экран, потому что места не хватает.
В итоге MDI программа превращается в обычное "много оконное" приложение, как, например, Лазарус.

Так вот: зачем делать MDI, вместо многооконного приложения?! Чтобы одной кнопочкой сворачивать "все окна программы"? так они и так сворачиваются, а если нет, то никто не мешает у Main-form-ы сделать обработчик:

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

procedure ГлавнаяФорма.OnMinimize;
begin
  for себя to последнее_окошко do
    окно.свернись();
end;

Даже MS уже давно отказалось от MDI интерфейсов (см Offic-ы, MS Studio) в пользу табов и многооконности.
Аватара пользователя
Light13
постоялец
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Сообщение Light13 »

под Ubuntu наблюдал такую картину (хотел добится чтобы в гноме на таскбаре всегда отображалось только одно окно программы)
проверить негде поэтому пишу по памяти ;)

в контексте главной формы:

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

  Application.CreateForm(TChildForm, ChildForm);
  ChildForm.Parant:=Self;
  ChildForm.Show;


и в итоге дочернее окно выводилось в области родительского
только уж очень неудобно - пришлось отказаться :)
Аватара пользователя
carrots
постоялец
Сообщения: 138
Зарегистрирован: 28.03.2008 01:13:02

Сообщение carrots »

wofs писал(а):т.е. вы хотите сказать, что табами и панельками можно реализовать нечто подобное?

Естественно можно, можно и удобнее.
Можно формы ставить на любой TWinControl что удобнее чем MDI Child.

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

  
  frm := TForm.Create(Self);
  frm.Parent := ScrollBox1;
  frm.Show; 

Только наверное придется для них самому рамочки и заголовки делать. (Можно сделать потомка TForm который будет включать свою рамку автоматически если есть Parent)

Но как для меня - было-бы на много удобнее сделать его разными окнами. :roll: В таком случае их будет легко переключать на панели задач, можно будет размещать на разных рабочих столах (в линухе) и на разных мониторах, думаю не стоит от такого отказываться.
Ответить