Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 180

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Помогите пожалуйста обойти ошибку "Cannot creat form. No MDI forms are currently active". Я создаю приложение, в котором из главной формы1 (fsNormal) при нажатии на кнопку создается форма2 (fsMDIForm). Далее при нажатии кнопки на форме2 должна создаваться форма3 (fsMDIChild), однако выскакивает эта пресловутая ошибка. Получается, что MDI-форма обязана быть главным окном.

Приложение:
  1.  
  2. if (Application.MainForm = nil) or
  3. (Application.MainForm.ClientHandle = 0) then
  4. raise EInvalidOperation.Create(SNoMDIForm);
  5.  
  6.  
  7. unit basic;
  8. ...
  9. implementation
  10. uses WindowProject;
  11. type
  12. formProject = TfrmProject;
  13. var
  14. frmProject : formProject;
  15. ...
  16. procedure TfrmBasic.Button1Click(Sender: TObject);
  17. begin
  18. frmProject:= TfrmProject.Create (nil);
  19. with frmProject do
  20. begin
  21. Top := random (round(ClientWidth / 2));
  22. Left := random (round(ClientHeight / 2));
  23. FormStyle := fsMDIForm;
  24. Show;
  25. end;
  26. end;
  27.  
  28.  
  29. unit WindowProject;
  30. ...
  31. uses ...., basic;
  32. ...
  33. implementation
  34. uses WindowGL;
  35. type
  36. formGL = TfrmGL;
  37. var
  38. frmGL : formGL;
  39. ...
  40. procedure TfrmProject.Button1Click(Sender: TObject);
  41. begin
  42. frmGL := TfrmGL.Create (Self);
  43. with frmGL do
  44. begin
  45. ...
  46. FormStyle := fsMDIChild;
  47. Show;
  48. ...
  49. end;
  50. end;
  51.  
  52.  
  53. unit WindowGL;
  54. uses ..., WindowProject;
  55. ...
  56. procedure TfrmGL.FormClose(Sender: TObject; var Action: TCloseAction);
  57. begin
  58. Action := caFree;
  59. end;
  60.  
  61. procedure TfrmGL.FormCreate(Sender: TObject);
  62. begin
  63. WindowS.SetParent(handle, frmProject.clientHandle)
  64. end;


Cooler Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Cooler (статус: Посетитель), 7 декабря 2007, 15:22 [#2]:

Насчет frmProject:= TfrmProject.Create (nil); - может лучше от Application хотя бы?
Пробовал, конечно... результат одинаков.
Cooler

Cooler (статус: Посетитель), 7 декабря 2007, 16:09 [#3]:

Всем спасибо за обсуждение.
Всё, я разрешил свою проблему. Всё прекрасно работает. Я создаю приложение, в котором из главной формы1 (fsNormal) при нажатии на кнопку создается форма2 (fsMDIForm). Далее при нажатии кнопки на форме2 создается форма3 (fsMDIChild). Уря!

Вопрос закрыт.
Valart

Valart (статус: Посетитель), 8 апреля 2011, 11:27 [#4]:

Cooler: ты молодец конечно!!! А написать каким образом решил проблему было слабо?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.03 сек.