Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.988 c
6-75302
XeON
2003-10-24 12:50
2003.12.23
Файлы http


6-75295
Юстос
2003-10-27 10:21
2003.12.23
Как обработать данныек из формы в webservice application


14-75325
Вованчик
2003-12-01 11:22
2003.12.23
Сервер БД


14-75386
Igorek
2003-11-27 21:15
2003.12.23
Что делать, когда все в лом?


6-75296
Sergey_Plotkin
2003-10-22 21:45
2003.12.23
HTML-содержимое Web-страницы




   Наверх