Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизНепростое 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.024 c