![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте. Два дня поисков и экспериментов пролетели впустую, поэтому обращаюсь к вам, надеюсь поможете.
Так вот, есть главная форма и две дочерних. Хочу добиться такого результата: 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
|
||||
|
||||
|
А если просто кинуть две панели и разместить на них нужные компоненты? При необходимости можно делать панель невидимой. И тогда твои шесть пунктов сразу становятся выполнимы без всякого мучения.
|
| Этот пользователь сказал Спасибо Kailon за это полезное сообщение: | ||
Stanei (21.12.2015)
| ||
|
#3
|
|||
|
|||
|
Ну, как уже сказали, данная проблема решается либо панелями, либо чем-то подобным.
В качестве сайд-бара можно использовать любой подходящий компонент, не только панель. Это может быть, например, ListBox с ручной отрисовкой содержимого. Или готовый компонент, как например TcxSideBar (кажется так) из набора DevExpress. Для правой части тогда у тебя тоже есть много вариантов. Первый - панель с размещением на ней наследника TFrame. так же это может быть MDIClild-окно (оно нормально будет работать с расположенным на главной форме компонентом-контейнером, т.е. будет занимать все СВОБОДНОЕ пространство при максимизации) |
|
#4
|
|||
|
|||
|
Цитата:
Вот как сказали про панели, сразу всё само собой в голову пришло ![]() Ничего мудрить не стал, просто создал две обычные формы, на первой форме панельками разметил "территорию", и на создание второй формы написал это: Код:
if not Assigned (Form2) then form2:=tform2.Create(application); form2.Parent:=form1.Panel2; Form2.Align := alClient; Form2.Show; И убрал бордеры, получилось идеально, даже лучше чем я хотел. Только вот вопрос, формы можно расположить в *.dll? И от туда их так же вызывать? С длл не работал не разу, поэтому спрашиваю. Т.к. форм будет много, около 50, и все их хранить в *.exe не хочется, да и обновлять легче программу будет. |
|
#6
|
|||
|
|||
|
Цитата:
Да пока сам не знаю что получится, пока только наброски. Вот что я не могу допетрить как это сделать. Шарил по форумам, искал, толком ничего не нашёл. В общем форма из dll вызывается, но она открывается вне первой формы, а как сделать, что бы она открылась на панели первой формы? Вот исходник, всё что я нашёл на форумах. asd.rar |
|
#7
|
||||
|
||||
|
При вызове формы из библиотеки её нужно "удочерить" главной формой приложения, у "мамки" нужно установить FormStyle в fsMDIform, а у "деток" это свойство задать как fsMDIChild
|
|
#8
|
|||
|
|||
|
Цитата:
То есть без этого всё же никак? Как я сейчас сделал, с dll такое не выйдет? Если не трудно, можете пример написать? Я что-то не так делаю, появляется ошибка, что форма(мать) не активна |
|
#9
|
||||
|
||||
|
Цитата:
|
|
#10
|
|||
|
|||
|
Цитата:
Да все выйдет, просто формы надо создавать не через Create, а через CreateParented. а еще лучше, все-таки: 1. Делать не формы, а фреймы. 2. Если уж хочется вытащить их в отдельные модули, то в BPL, а не в DLL. Последний раз редактировалось lmikle, 22.12.2015 в 19:57. |
|
#11
|
|||
|
|||
|
Цитата:
Почитал о фреймах, вот это то что нужно. Наилучший для меня вариант. Только вот не могу найти как их из bpl кинуть на панель программы? Застрял на подключении пакета к программе, что то не доходит до меня. Может сделаете пожалуйста небольшой пример выгрузки фрейма на панель из bpl. Желательно с комментариями, а я чувствую так до нового года буду искать решение |
|
#12
|
|||
|
|||
|
народ ну помогите пожалуйста, это же вроде не трудно, по крайней мере для вас
|