![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многодокументальное прило жение . Создание новой нестан. формы
NKT © (2007-07-25 10:18:00)Всем добрый день ! Пробую создать многодокументальное прило жение . Решила создать новую форму - Form1 , указала в св-ве
Formstyle = MDIChild , при вызове формы :
Form1 := TForm1.Create(Application);
Form1.Show;
MainMenu1.Merge(Form1.MainMenu1);
на операторе Form1 := TForm1.Create(Application); ругается :
Cannot create form . No MDI forms are currently active .
Нужна нестандартная форма и не одна . Как правильно создать нестандартные формы .
Всем спасибо .
Юрий Зотов (2007-07-25 17:16:00) [1]> NKT (25.07.07 15:47) [12]
Проблема была не в этом, а в том, что форма заставки создавалась неверно (через Application.CreateForm) и поэтому становилась главной. А чтобы она главной не становилась, создавайте ее так:
FormAboutBox = TFormAboutBox.Create(Application);
NKT (2007-07-25 15:47:00) [2]Проблема была в том , что первой формой я вызывала заставку (ABoutBox) .
Удалила заставку . первой стала вызываться главная форма и все получилось , дочерняя форма создается и вызывается как положено , и метод Show не нужен .
Всем спасибо за советы .
clickmaker (2007-07-25 14:50:00) [3]
> "скрытный" объект TClientArea
это где такой?
и в методе SetWindowToMonitor нет никакой проверки на fsMDIForm
Только в WM_ACTIVATE если есть активная "дочка", фокус ей передается
Игорь Шевченко (2007-07-25 14:13:00) [4]
> Метод Show для MDI интерфейса работает "несколько" иначе,
> чем у обычного (SDI)
Вроде точно также...
MsGuns (2007-07-25 12:32:00) [5]Метод Show для MDI интерфейса работает "несколько" иначе, чем у обычного (SDI)
В основе лежит "скрытный" объект TClientArea, который собственно и управляет прорисовкой "дочек" - именно через него "мама" керует "дочками". Непонимание этого часто приводит к недоразумениям у неопытных программистов.
У "мамы" есть два св-ва: ActiveMDIChild и MDIChildCount и коллекция MDIChildren, с помощью который собственно и нужно "управлять" дочками.
Плохиш (2007-07-25 12:04:00) [6]
> Может быть в MDI нельзя создавать нестандартные формы
Что-такое в вашем понимании "нестандартная форма"
> а можно работать только как описано в литературе ?
MDI - это интерфейс пользователя, работа которого подчиняется определённому алгоритму, который за много лет очень подробно описан во всякой документации...
sniknik (2007-07-25 12:03:00) [7]> А первое предложение в [1] по какой причине было не замечено?
имхо, причина(оно же правило) у них всех одна - все что не понимается то игнорируется.
> Или так нельзя или где-то не учтена какая-то мелочь , вопрос - какая .
образование.
Плохиш (2007-07-25 11:59:00) [8]
> Пробовала шаблон проекта SDI, менялa стиль форм на Formstyle
> = MDIForm и Formstyle = MDICHildForm
Да, вижу, вам читать ещё рано...
NKT (2007-07-25 11:44:00) [9]И первое предложение сделано .
Может быть в MDI нельзя создавать нестандартные формы , а можно работать только как описано в литературе ?
Пробовала шаблон проекта SDI , менялa стиль форм на Formstyle = MDIForm и
Formstyle = MDICHildForm , эффект тот же .
Или так нельзя или где-то не учтена какая-то мелочь , вопрос - какая .
Плохиш (2007-07-25 11:38:00) [10]
> NKT (25.07.07 11:32) [3]
А первое предложение в [1] по какой причине было не замечено?
Пора уже и почитать чего...
NKT (2007-07-25 11:32:00) [11]> Динамичски создаваемую "дочку" надр убрать из списка автосоздаваемых (Project->Options->Forms) - сделано .
Убрала Show - эффект тот же .
MsGuns (2007-07-25 10:52:00) [12]Динамичски создаваемую "дочку" надр убрать из списка автосоздаваемых (Project->Options->Forms)
Loginov Dmitry (2007-07-25 10:39:00) [13]Главная форма должна иметь Formstyle = MDIForm и создаваться она должна раньше, чем создается дочерняя форма.
> Form1.Show;
Show тут лишнее. Дочерние формы появляются автоматически после выполнения Create.