|
Вопрос # 1 180/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Помогите пожалуйста обойти ошибку "Cannot creat form. No MDI forms are currently active". Я создаю приложение, в котором из главной формы1 (fsNormal) при нажатии на кнопку создается форма2 (fsMDIForm). Далее при нажатии кнопки на форме2 должна создаваться форма3 (fsMDIChild), однако выскакивает эта пресловутая ошибка. Получается, что MDI-форма обязана быть главным окном.
Приложение: Переключить в обычный режим-
- if (Application.MainForm = nil) or
- (Application.MainForm.ClientHandle = 0) then
- raise EInvalidOperation.Create(SNoMDIForm);
-
-
- unit basic;
- ...
- implementation
- uses WindowProject;
- type
- formProject = TfrmProject;
- var
- frmProject : formProject;
- ...
- procedure TfrmBasic.Button1Click(Sender: TObject);
- begin
- frmProject:= TfrmProject.Create (nil);
- with frmProject do
- begin
- Top := random (round(ClientWidth / 2));
- Left := random (round(ClientHeight / 2));
- FormStyle := fsMDIForm;
- Show;
- end;
- end;
-
-
- unit WindowProject;
- ...
- uses ...., basic;
- ...
- implementation
- uses WindowGL;
- type
- formGL = TfrmGL;
- var
- frmGL : formGL;
- ...
- procedure TfrmProject.Button1Click(Sender: TObject);
- begin
- frmGL := TfrmGL.Create (Self);
- with frmGL do
- begin
- ...
- FormStyle := fsMDIChild;
- Show;
- ...
- end;
- end;
-
-
- unit WindowGL;
- uses ..., WindowProject;
- ...
- procedure TfrmGL.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- Action := caFree;
- end;
-
- procedure TfrmGL.FormCreate(Sender: TObject);
- begin
- WindowS.SetParent(handle, frmProject.clientHandle)
- end;
 |
Вопрос задал: Cooler (статус: Посетитель)
Вопрос отправлен: 6 декабря 2007, 14:57
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Cooler!
На cc.borladn.com была когда то заметка на эту тему. MDI форма должна быть объязательно главной. Хотя создавая формы(окна) на чистом апи вроде как можно обойти эту неприятность. Да и приводились рекомендации Майкрософт, что такая компоновка приложения нежелательна.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 6 декабря 2007, 23:05
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 8 апреля 2011, 11:27; участников в обсуждении: 3.
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 6 декабря 2007, 22:58 [#1]:
Сдается мне, с присвоением родителя (и owner'а) перемудрил.
frmProject:= TfrmProject.Create (nil); - может лучше от Application хотя бы?
И WindowS.SetParent(handle, frmProject.clientHandle) смущает...
|
|
Cooler (статус: Посетитель), 7 декабря 2007, 15:22 [#2]:
Насчет frmProject:= TfrmProject.Create (nil); - может лучше от Application хотя бы?
Пробовал, конечно... результат одинаков.
|
|
Cooler (статус: Посетитель), 7 декабря 2007, 16:09 [#3]:
Всем спасибо за обсуждение.
Всё, я разрешил свою проблему. Всё прекрасно работает. Я создаю приложение, в котором из главной формы1 (fsNormal) при нажатии на кнопку создается форма2 (fsMDIForm). Далее при нажатии кнопки на форме2 создается форма3 (fsMDIChild). Уря!
Вопрос закрыт.
|
|
Valart (статус: Посетитель), 8 апреля 2011, 11:27 [#4]:
Cooler: ты молодец конечно!!! А написать каким образом решил проблему было слабо?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|