Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.12.2015, 12:58
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию MDI приложение. Отображение дочерних форм

Здравствуйте. Два дня поисков и экспериментов пролетели впустую, поэтому обращаюсь к вам, надеюсь поможете.

Так вот, есть главная форма и две дочерних. Хочу добиться такого результата:
1. Дочернии формы сами подгоняются по размеру главной.
2. Сортировка по вертикали.
3. У левой формы максимальная ширина например 600рх.
4. Запретить перемещение форм.
5. Правая форма подгоняется по всему размеру свободного места на главной. То есть от правого внешнего края левой формы до правого внутреннего края главной.
6. Форм2 всегда отображается слева (она подобием сайдбара будет), а форм3 справа.

пункты 1, 2, 3, 4 кое как решил.
Но вот только если у форм2 максимальная ширина 600 или сделать 300, то между формами образуется пустое место. И если сделать форм3 активной, то при сортировке (tilemode), она переносится к левому краю и наоборот.

2015-12-20_181321.png
вот скрин с желаемым результатом

mdi2.rar
и исходник


Пожалуйста помогите
Ответить с цитированием
  #2  
Старый 21.12.2015, 00:36
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

А если просто кинуть две панели и разместить на них нужные компоненты? При необходимости можно делать панель невидимой. И тогда твои шесть пунктов сразу становятся выполнимы без всякого мучения.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
Этот пользователь сказал Спасибо Kailon за это полезное сообщение:
Stanei (21.12.2015)
  #3  
Старый 21.12.2015, 04:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, как уже сказали, данная проблема решается либо панелями, либо чем-то подобным.
В качестве сайд-бара можно использовать любой подходящий компонент, не только панель. Это может быть, например, ListBox с ручной отрисовкой содержимого. Или готовый компонент, как например TcxSideBar (кажется так) из набора DevExpress.
Для правой части тогда у тебя тоже есть много вариантов. Первый - панель с размещением на ней наследника TFrame. так же это может быть MDIClild-окно (оно нормально будет работать с расположенным на главной форме компонентом-контейнером, т.е. будет занимать все СВОБОДНОЕ пространство при максимизации)
Ответить с цитированием
  #4  
Старый 21.12.2015, 09:59
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, как уже сказали, данная проблема решается либо панелями, либо чем-то подобным

Вот как сказали про панели, сразу всё само собой в голову пришло
Ничего мудрить не стал, просто создал две обычные формы, на первой форме панельками разметил "территорию", и на создание второй формы написал это:
Код:
if not Assigned (Form2) then form2:=tform2.Create(application);
form2.Parent:=form1.Panel2;
Form2.Align := alClient;
Form2.Show;

И убрал бордеры, получилось идеально, даже лучше чем я хотел.

Только вот вопрос, формы можно расположить в *.dll? И от туда их так же вызывать? С длл не работал не разу, поэтому спрашиваю. Т.к. форм будет много, около 50, и все их хранить в *.exe не хочется, да и обновлять легче программу будет.
Ответить с цитированием
  #5  
Старый 21.12.2015, 14:47
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от Stanei
Только вот вопрос, формы можно расположить в *.dll?
Можно
Цитата:
Сообщение от Stanei
Т.к. форм будет много, около 50,
Ух, это, что будет?
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #6  
Старый 22.12.2015, 07:46
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
Ух, это, что будет?

Да пока сам не знаю что получится, пока только наброски.

Вот что я не могу допетрить как это сделать. Шарил по форумам, искал, толком ничего не нашёл. В общем форма из dll вызывается, но она открывается вне первой формы, а как сделать, что бы она открылась на панели первой формы?

Вот исходник, всё что я нашёл на форумах.
asd.rar
Ответить с цитированием
  #7  
Старый 22.12.2015, 08:34
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

При вызове формы из библиотеки её нужно "удочерить" главной формой приложения, у "мамки" нужно установить FormStyle в fsMDIform, а у "деток" это свойство задать как fsMDIChild
Ответить с цитированием
  #8  
Старый 22.12.2015, 10:27
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
При вызове формы из библиотеки её нужно "удочерить" главной формой приложения

То есть без этого всё же никак? Как я сейчас сделал, с dll такое не выйдет?
Если не трудно, можете пример написать? Я что-то не так делаю, появляется ошибка, что форма(мать) не активна
Ответить с цитированием
  #9  
Старый 22.12.2015, 16:07
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Stanei
...можете пример написать? Я что-то не так делаю, появляется ошибка, что форма(мать) не активна
У них с "дочкой" просто разные понятия про глобальных "папань" (Application анд Screen)
Вложения
Тип файла: zip childwnd.zip (3.2 Кбайт, 4 просмотров)
Ответить с цитированием
  #10  
Старый 22.12.2015, 19:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Stanei
То есть без этого всё же никак? Как я сейчас сделал, с dll такое не выйдет?
Если не трудно, можете пример написать? Я что-то не так делаю, появляется ошибка, что форма(мать) не активна

Да все выйдет, просто формы надо создавать не через Create, а через CreateParented.
а еще лучше, все-таки:
1. Делать не формы, а фреймы.
2. Если уж хочется вытащить их в отдельные модули, то в BPL, а не в DLL.

Последний раз редактировалось lmikle, 22.12.2015 в 19:57.
Ответить с цитированием
  #11  
Старый 24.12.2015, 05:15
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
а еще лучше, все-таки:
1. Делать не формы, а фреймы.

Почитал о фреймах, вот это то что нужно. Наилучший для меня вариант.

Только вот не могу найти как их из bpl кинуть на панель программы? Застрял на подключении пакета к программе, что то не доходит до меня.

Может сделаете пожалуйста небольшой пример выгрузки фрейма на панель из bpl. Желательно с комментариями, а я чувствую так до нового года буду искать решение
Ответить с цитированием
  #12  
Старый 26.12.2015, 08:22
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 55
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

народ ну помогите пожалуйста, это же вроде не трудно, по крайней мере для вас
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter