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

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

Многодокументальное прило жение . Создание новой нестан. формы


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.


Наверх

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