Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Непростое MDI-приложение   Найти похожие ветки 

 
fadeyev ©   (2004-01-20 20:00) [0]

Задача: приложение, у которого главная форма НЕ MDI, должно по одному из пунктов меню вызывать MDI-форму, в которой можно открыть несколько MDI-child"ов.
Пример: главная форма управляет вводом данных в таблицы и запускает расчет. Расчет выбрасывает кучу однотипных файлов, для просмотра которых хорошо подходит MDI-концепция. Такой вот MDI-просмотровщик хорошо работает отдельно, но после прицепления к основному проекту не может создать ни одного дочернего окна.

Проблема: TCustomForm при создании окна со стилем fsMDIChild пытается прицепить его к Application.MainForm.ClientHandle - то есть требует от MDI-формы быть главной. Но в MS SDK черным по белому написано: приложение может иметь сколько угодно окон верхнего уровня, содержащих Child-окошки. Запрещена только вложенность.

Вопрос: как обойти такое прискорбное ограничение VCL?


 
YuRock ©   (2004-01-20 21:45) [1]

> прискорбное ограничение VCL

Это прискорбное ограничение Windows


 
fadeyev ©   (2004-01-20 21:51) [2]

Нет, именно VCL!
<--------------cut>
PSS ID Number: Q74041

Authored 11-Jul-1991   Last modified 19-May-1995

The information in this article applies to:

- Microsoft Windows Software Development Kit (SDK) versions 3.1 and 3.0
- Microsoft Win32 SDK versions 3.5, 3.51, and 4.0

SUMMARY

The Microsoft Windows implementation of the multiple document
interface (MDI) does not support nested MDI client windows. In other
words, neither an MDI client window nor an MDI child window can have
an MDI client window as a child.

MORE INFORMATION

A Windows MDI client window is a member of the MDIClient window class,
and the Windows MDI model assumes that the parent of an MDIClient
window is a top-level frame window with a valid menu bar. This
assumption is necessary to implement the basic functionality defined
by the MDI interface, and it precludes the possibility of using nested
MDIClient windows. However, an application can have multiple top-level
windows, and each top-level window can have a separate MDIClient

window as a child.

Additional reference words: 3.00 3.10 3.50 3.51 4.00 95
KBCategory: kbprg
KBSubcategory: UsrMdi
<--------------cut>


 
YuRock ©   (2004-01-20 22:25) [3]

А можно перевести ключевые места?
> fadeyev ©   (20.01.04 21:51) [2]


 
Digitman ©   (2004-01-21 08:58) [4]

изменить св-во Application.MainForm можно след.образом :

Application.CreateForm(TNormalForm, NormalForm); //создание самой первой формы, она стала главной
...
Application.ControlDestroyed(MainForm); //FMainForm := nil;
Application.CreateForm(TMDIForm1, MDIForm1); //теперь MDI-форма MDIForm1 стала главной и св-во MainForm отныне = MDIForm1


 
fadeyev ©   (2004-01-21 19:11) [5]

Спасибо за советы!
Уже реализовал почти MDI из обычных окошек, правда правда пришлось ручками делать Cascade, Tile и т.п.
Еще раз спасибо, тема закрыта.



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-1079333578
Newb
2004-03-15 09:52
2004.04.04
Адрес офф.сайта Kuliba


14-1078948458
Step[B.M.]
2004-03-10 22:54
2004.04.04
Как и главное чем скомпилить файл ASM


3-1078816080
Russko
2004-03-09 10:08
2004.04.04
Как обозначить в DBGrid поле типа Boolean?


1-1079441862
zac
2004-03-16 15:57
2004.04.04
Как удалить нарисованное?


14-1078946455
***ghost***
2004-03-10 22:20
2004.04.04
Пароль в 98-м винде!