Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ув. мастера помогите разобраться с MDI формами [D7, IB6.x]


konst ©   (2003-09-01 09:35:00) 

Простите за некоторый офтоп, но в соседнем форуме мне ничего толкогого не подсказали. Это моё первое более или менее серьёзное приложение (небольшая БД) и у меня остаются небольшие вопросы по интерфейсу. Я понаделал обычных форм(FormStyle=fmNormal), но дело в том что при таком подходе, как я понял, невозможно сделать раздел меню "Окна" с отображением там всех открытых окон и упорядовачинием их. Кроме того все формы равнозначны и подчинённые формы не вписываються в рамки главной (т.е. главная форма легко может закрыть собой подчинённую и пользователь её не увидит.) Вроде как я понял надо делать одну главную форму FormStyle=fmMDIform, и далее подчинённые FormStyle=fmMDIChild. Но как с ними работать? С простыми формами проходит Form.Close и Form.Open. А здесь они отображаются все вместе. Как их закрыть? А потом открыть? В примере MDI приложения (что в самом DELPHI) всё понятно там создаются новые формы, а потом удаляются и имена им присваиваются в процессе. А как быть если у меня формы уже есть, и их не надо создавать? Или я всё перепутал и MDI здесь не причём?


Zacho   (2003-09-01 10:16:00) [1]


> MMF © (01.09.03 10:13) [12]

Сорри, прогнал. AV не будет.
Но использование глобальных переменных - указателей на объект в методах этого же класса - все равно моветон. А если объектов типа TMyForm будет больше одного ?


MMF   (2003-09-01 10:13:00) [2]

>Zacho © (01.09.03 10:09) [11]
Поясни, откуда возьмется AV. При разрушении формы можно очистить переменную.


Zacho   (2003-09-01 10:09:00) [3]


> MMF © (01.09.03 10:04) [8]
> >dimm (01.09.03 09:59)
> Вставь в обработчик OnDestroy закрываемой формы строчку
> myForm:=nil;
> а в вызывающей форме: if not(assigned(myForm)) then myForm:=TmyForm.Create(Application);
> myForm.Show;

А вот это точно - моветон. Поле такого следующий вопрос в форуме может быть такой : " Почему у меня в программе переодически появляется ошибка Access Violation и как с ней бороться ? "


Vlad   (2003-09-01 10:08:00) [4]

>jocko © (01.09.03 10:06) [9]
>sorry а nil там нигде не нужен?...
Ты про что ? ТАМ - это где ?


jocko   (2003-09-01 10:06:00) [5]

sorry а nil там нигде не нужен?...


MMF   (2003-09-01 10:04:00) [6]

>dimm (01.09.03 09:59)
Вставь в обработчик OnDestroy закрываемой формы строчку myForm:=nil;
а в вызывающей форме: if not(assigned(myForm)) then myForm:=TmyForm.Create(Application);
myForm.Show;


GRAND   (2003-09-01 10:03:00) [7]

Если форма немодальная, то Form1.Show


Vlad   (2003-09-01 10:03:00) [8]

>dimm (01.09.03 09:59) [4]
Есть такая функция - ShowModal.
Тебе же Sergey. Masloff все объяснил ?
Делаешь форме Create,ShowModal,Free каждый раз когда ее необходимо открыть


konst   (2003-09-01 10:02:00) [9]

Во во и у меня.


dimm   (2003-09-01 09:59:00) [10]


> Чтобы корректно закрыть немодальную форму, надо в обработчик
> события OnClose прописать строчку:
> Action:=caFree

Это я уже делал, а потом как открыть форму?


имя   (2003-09-01 09:53:00) [11]

Удалено модератором


GRAND   (2003-09-01 09:50:00) [12]

Далее по поводу отображения списка окон в тебю...
1. Позаботься о том, чтобы все немодальные формы в проекте имели FormStyle=fsMDIChild
2. Создай пункт меню "Окна" (не путать с Нагиевым :))
3. Накидай туда подпунктов типа "Каскадом", "Разместить" и т.п. (обрабатывать эти действия надо вручную по одной строчке на каждое действие)
4. У главной формы натрави сво-во WindowMenu на ту самую, которая и есть "Окна".


GRAND   (2003-09-01 09:46:00) [13]

Чтобы корректно закрыть немодальную форму, надо в обработчик события OnClose прописать строчку:
Action:=caFree


Наверх

Титульная страница Поиск, карта сайта Написать письмо