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

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

MDIChild [D5, D7, Win95/98, WinME, NT4, Win2k, WinXP]


Dr.Karter ©   (2004-06-26 07:24:00) 

Вот по мере изучения Дельфи, и написания на ней программ, столкнулся с проблемой:

Есть окно MDIForm и ряд других обычных окон.
Я методом тыка нашел выход по открытию их ввиде MDIChild

  Form2.FormStyle:=fsMDIChild;
  Form2.Show;
Все замечательно, только закрывать не получается!!!
Я это делаю пока (пока вы не подскажете как это делать правильно)
спомощью
Событие OnClose     Form2.Destroy;
Но соответственно я открыть это окно больше не могу

Подскажите как это сделать правильно


1   (2004-06-26 17:52:00) [1]

Action:=caFree;
Form2:=nil;


Dr.Karter   (2004-06-26 13:17:00) [2]

Все! :D теперь СУПЕР! Спасибо огромное!


YurikGL   (2004-06-26 13:02:00) [3]

меню Project-options- убери нужные формы из auto-create


Dr.Karter   (2004-06-26 12:53:00) [4]

Так все здорово работает! Только Child-форма на передний план вываливается при запуске программы (т.е запускается параллельно MDIForm), а таких форм у меня много.
Что сделать надо для этого?

Я делал превращение из Normal формы в MDIChild при обработке события нажатия на кнопку, но у меня получалось выводить это окно один раз.

Что делать чтобы эта(и) формы при запуске не отображались?


YurikGL   (2004-06-26 09:54:00) [5]

1) задаем то, что окно MDIChild сразу в Инспекторе
2) в OnClose action:=cafree
3) Если необходимо отразить MDIChild-форму пишем FkbDetal:=TFkbDetal.create(application)


Dr.Karter   (2004-06-26 09:52:00) [6]

Получилось так:

При том что форма в панеле контроля задана уже как MDIChild

procedure TFMain.nDetalClick(Sender: TObject);
begin
  TFkbDetal.Create(Application);
end;

А если как в моем случае, что форма по началу имеет вид Normal, а уже в программе я меняю на MDIChild
Или тогда выход из ситуации что при запуске программы сразу открываются Child окна?


Dr.Karter   (2004-06-26 09:37:00) [7]

Суть я понял! Я спрашиваю как эту суть в программный код конвертировать? :)
(: -А суть-то где?
  -А суть они сюда...прямо в песок! :)

Т.е где этот FkbDetal.Create(Application);
писать? (В обработчик нажатии на кнопку или OnCreate той формы)

Покажите плиз. код создания формы (То что у меня было я привел в Dr.Karter   (26.06.04 09:18) [7] )


YurikGL   (2004-06-26 09:19:00) [8]


> Dr.Karter   (26.06.04 09:08) [6]

Суть в том, что заранее в инспекторе задать MDI окно или нет, потом при необходимости его отразить, - создавать его заново. А при закрытии - удалять


Dr.Karter   (2004-06-26 09:18:00) [9]

Если можно войдите в ситуацию:
вот что я написал: (это обработка кнопки)

procedure TFMain.nDetalClick(Sender: TObject);
begin
// Это до получения информации про    FkbDetal.Create(Application);

  FkbDetal.FormStyle:=fsMDIChild;
  Fkbdetal.Show;

end;

КУда теперь нужно впихнуть этот    FkbDetal.Create(Application);
???


Dr.Karter   (2004-06-26 09:08:00) [10]

C Закрытием формы разобрался! Спасибо!
Как быть с

> jb   (26.06.04 07:54) [3]
> Вообще, MDIChild окно, следует создавать заново, при каждом
> создании (или открытии) документа, на то он и MDI.


тихий вовочка   (2004-06-26 09:07:00) [11]

Обобщаю все вышесказанное.
Перед каждым выводом MDI-окна его надо создавать, например так:
TForm2.Create(Application), а для того, чтобы окошко у тебя закрывалось, а не минимизировалось, в обработчике TForm2.OnClose указывай Action := caFree;


Dr.Karter   (2004-06-26 08:56:00) [12]

Если можно напишите код для создания(открытия формы), а то я писал так:

Form2.FormStyle:=fsMDIChild; (FormStyle до этого был Normal)
Form2.Show;

И закрытия формы.

На каманду action:=cafree в OnClose

!Выдает ошибку Incompatible types: 'TBasicAction' and 'TCloseAction'


jb   (2004-06-26 07:54:00) [13]

Вообще, MDIChild окно, следует создавать заново, при каждом создании (или открытии) документа, на то он и MDI.


YurikGL   (2004-06-26 07:38:00) [14]

в OnClose action:=cafree а в следующий раз надо будет его создавать заново.


Dr.Karter   (2004-06-26 07:32:00) [15]

В FAQе я нашел эту функцию только как её реализовать у меня не получилось компилятор Выдает ошибку


Наверх

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