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