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

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

Опять про Mdi формы, теперь проблема с открытием [D6]


maxim2 ©   (2002-06-07 13:30:00) 

Привет опять!
Благодаря человеку с ником Kaif разобрался как закрывать MdiChild. Но у меня до этого было всего две формы одна MDIForm а другая MdiChild и вызывалась только она а теперь у меня их несколько и как вызвать нужную я непонял.
Помогите кто еще не устал.


kaif   (2002-06-07 14:14:00) [1]

Показывать формы в MDI это и есть создавать их экземпляры. Пока не создашь - не покажутся. В случае обычного (не MDI) проекта, окно может быть невидимым, хотя и созданным при запуске проекта. Тогда его показывают методом Show. А в MDI если окно не видно - значит его экземляра вообще не существует, так как MDIChild окно невозможно скрыть. Посмотри сам файл .dpr через Project|View Source. Это сама программа как таковая. Если там окна не создаются, то их нужно создавать руками с помощью методов Create.


maxim2   (2002-06-07 13:50:00) [2]

Не у меня готовые формы на них всякие DbGrid и т.д их не нужно создавать программно их просто нужно показать а типа Form2.show не работает выдает ошибку.


kaif   (2002-06-07 13:42:00) [3]

Любая форма в приложении может быть fsMDIChild. Для этого нужно только вписать обработчик OnClose, как уже говорилось и установить свойство этой формы FormStyle = fsMDIChild. Желательно еще убрать ее из списка AutoCreated Forms проекта, чтобы это окно не появлялось сразу внутри главного при запуске программы.
Чтобы потом его создать RunTime я лично использую такой подход. Добавляю в главное меню пункт и в его обработчик вписываю:

if Application.FindComponent("MyForm") <> nil then
MyForm.Show
else
MyForm := TMyForm.Create(Application);

Тогда, если это окно уже существует, то оно выйдет на передний план, а если его нет - то будет создано.

Если же нужно штамповать одинаковые окна одного типа, например, TMyForm, то нужно придумать, как их отличать друг от друга. Можно после создания каждого в процессе работы программы назначать ему какое-то имя (Name) и потом искать точно так же с помощью Application.FindComponent(<имя>). А можно перебирать список MDIChildren[i] главного окна и, приводя элементы к классу формы TMyForm, анализировать их свойства, хотя бы то же Name.


Fiend   (2002-06-07 13:41:00) [4]

шо значит вызвать нужную?
У тя теперь Несколько классов MDI окон?

TMDIForm1=class .....

TMDIForm2=class .....

TMDIForm3=class .....


по нажатии батона делается
TMDIForm1.Create(Application)

или TMDIForm2.Create(Application)

а какое окно создавать, я думаю ты сам решиш?!


Наверх

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