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

Вниз

Главное MDI-окно в DLL. Возможно ли?   Найти похожие ветки 

 
Viking   (2003-12-10 15:17) [0]

Добрый день, господа!

Столкнулся вот с какой проблемой:

Вызывается MDI-приложение из DLL-библиотеки.
Главная форма создаётся с типом fsMDIForm.
Но при вызове дочерних форм получаю следующую ошибку:
"Cannot create form. No MDI forms are currently active".

Причем дело не в передаче MDI-child"у
параметра Application!
Как то неправильно ведёт себя именно ГЛАВНАЯ форма!

Вот как я её создаю в DLL.

procedure RunMyForm(параметры);StdCall;
var
MainForm:TMainForm;
begin
MainForm := TMainForm.Create(Application);
with MainForm do
begin
try
Caption := TD_PC;
Show;
except
on e:exception do
ShowExceptionMsg(E);
end;
end;

end;

Создание MDI-child формы приводит к ошибке.

procedure TMainForm.CreateChildClick(Sender: TObject);
var
TestMDIChild:TTestMDIChildForm;
begin
inherited;
TestMDIChild := TTestMDIChildForm.Create(Self);

ChildForm.Caption := "Окно № "+IntToStr(MDIChildCount));

end;

Причем когда всё это делается в EXE-файле - всё работает нормально!

В чем может быть дело?
Заранее спасибо!


 
Viking   (2003-12-10 15:46) [1]

Уточняю вопрос.

Цитата
"Когда вы пытаетесь отобразить дочернюю форму MDI, VCL проверяет, является ли действительным свойство MainForm объекта Application."

А для DLL - Application.MainForm пустое!
Что же получается?!
Приплыли?!

И форма откуда вызывается моя DLL-тоже не MDI.

То есть просто нельзя запустить MDI-приложение из DLL?!
Как же так?!!!!


 
cdadmitriy ©   (2003-12-10 16:48) [2]

попробуй

procedure RunMyForm(Var Application:TApplication);StdCall;
....
Application.MainForm:=MainForm;

....


 
Viking   (2003-12-10 17:06) [3]

2 cdadmitriy:

Просто так
Application.MainForm:=MainForm;
нельзя, т.к.

Application.MainForm "read only" свойство!

Но!
Я кажется разобрался!

Вместо
// MainForm := TMainForm.Create(Application);
использую
Application.CreateForm(TMainForm, MainForm);

И всё работает!
При первом вызове
Application.CreateForm как раз и устанавливается значение
Application.MainForm!

Правда почему то теперь "отвалились" стандартные action (типа WindowsCoscad, TileHorizontally e.t.c.) для работы с MDI - окнами... :-(

Пришлось их рисовать вручную...

Но это уже совсем другая история...


 
Viking   (2003-12-11 13:09) [4]

Вопрос в догонку!

Всё вышеуказанное работает, но... только когда MDIMain форма вызавается из DLL через ShowModal !

Как вызвать эту же форму не в модальном режиме?
Чтобы можно было переключиться обратно в родительскую форму после запуска!

Нелп миии!!!



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
1-75226
jonni
2003-12-10 01:17
2003.12.23
минимизирование и активирование TForm


4-75460
Дремучий
2003-10-24 12:52
2003.12.23
Как поставить глобальный хук на смену языка ввода под NT?


4-75452
Dimonn
2003-10-28 11:19
2003.12.23
VirtualAlloc


8-75282
Maks
2003-08-25 12:18
2003.12.23
Размер изображения


14-75364
Шишкин Илья
2003-11-28 16:24
2003.12.23
Как вам программка?