![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Плагины и MDI формы. [D5]
Дмитрий Баранов © (2002-04-24 15:31:00)Вот озадачился:
===mdi.dll==
...
function ExportChild: pointer;
begin
Form2:=TForm2.Create(Application);
result:=@Form2;
end;
{ Form2 должна быть MDIChild }
...
exports
ExportChild;
===Parent===
// сканируем каталог с плагинами, находим в нем все dll ->
// LoadLibrary ->
// из каждой dll вызываем ExportChild:
type
TFunc = function: pointer;
...
var Func: TFunc;
var H : THandle;
...
H:=LoadLibrary("mdi.dll");
if (H = 0) then
begin
error();
exit;
end;
@Func := GetProcAddress(H, "ExportChild");
P:=Func();
MDI:=TForm(P);
Так вот, форма из Dll создается, если ее флаг FormStyle - fsNormal.
Если fsMDIChild (что в design-time его выставлять, что в Run-time менять) - возбуждается exception EInvalidOperation с сообщением "Cannot create form. No MDI forms are currently active".
А мне вот позарез нужны MDI :) Чего делать?
Дмитрий Баранов (2002-04-24 16:09:00) [1]Большое спасибо, заработало.
ZZ (2002-04-24 16:08:00) [2]Вроде на Королевстве Дельфи была статья на эту тему. Поищи.. ( http://www.delphikingdom.com).
Там как раз Application и передается (по моему).
Игорь Шевченко (2002-04-24 15:53:00) [3]День добрый,
Да, целиком, так как ошибка выдается, если Application.MainForm = nil или Application.MainForm.FormStyle <> fsMDIForm
С уважением,
Дмитрий Баранов (2002-04-24 15:41:00) [4]На первую строчку не обращайте внимания :) Забыл стереть :)
Дмитрий Баранов (2002-04-24 15:40:00) [5]Там ведь один хрен в dll пишу
Application целиком? Или достаточно его хэндл?
Игорь Шевченко (2002-04-24 15:36:00) [6]День добрый,
Проще всего перейти на пакеты (BPL)
Если не получается, то передавать Application и Screen в DLL.
С уважением,