Главная страница
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.022 c
3-1078221353
Wild
2004-03-02 12:55
2004.04.04
Update DBF


3-1078233243
GrTik
2004-03-02 16:14
2004.04.04
Виснет ADO


14-1078889519
Думкин
2004-03-10 06:31
2004.04.04
С днем рождения! 10 марта.


3-1078330181
Ceval
2004-03-03 19:09
2004.04.04
два поля код и наимен как мне обьединить


7-1075055890
varfolomey
2004-01-25 21:38
2004.04.04
Помогите разобраться с COM портом!