![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по DLL [D6, WinXP]
Pegas © (2002-10-22 14:26:00)Мастера, мне очень нужно вызвать форму из DLL, и чтобы она отабражалась как MDIChild?
Помогите примером!
Alx2 (2002-10-22 15:37:00) [1]Когда-то давно это обсуждалось. Вот что выросло:
Вот, что сидит в DLL:
Function createMDIChild(App: TApplication; Scr: TScreen): TForm; Stdcall;
Begin
If SaveApp = Nil
Then SaveApp := Application; // Запоминаем старую APP
If SaveScr = Nil
Then SaveScr := SCREEN; // Запоминаем старую Screen
Application := App;// Важно
Screen := Scr;// тоже Важно
Result := TMDIform1.Create(App);// Неважно - просто custom форма
End;
Вот чти сиддит в хосте:
procedure TForm1.NewMDI1Click(Sender: TObject);
Var
MyFunc : TMyFunc;
begin
hLib := LoadLibrary("mdi.dll");
if hLib<>0 then
begin
MyFunc := GetProcAddress(hLib,"createMDIChild");
with MyFunc(Application,Screen) do
begin
FormStyle :=fsMDIChild;
BorderStyle := bsNone; // Для разнообразия
end;
end;
end;
Игорь Шевченко (2002-10-22 15:12:00) [2]Pegas © (22.10.02 14:47)
Открою страшную тайну: у DLL есть свой объект TApplication, у него есть свойство MainForm. Для того, чтобы создавались MDIChild формы, надо чтобы эта MainForm была со стилем fsMDIForm.
А у тебя это условие не выполняется.
Pegas (2002-10-22 14:47:00) [3]Нет, лавная форма создается нормально, затем я динамически загружаю ДЛЛ, а уже потом пытаюсь вызвать это окно и происходит вот такая ошибка!
Skier (2002-10-22 14:45:00) [4]>Pegas
Странные желания...
Но в любом случае сначала
нужно создать главную форму
MDI-приложения.
Через Application.CreateForm(...)
Pegas (2002-10-22 14:41:00) [5]Когда я начинаю вызывать из главного приложения форму из ДЛЛ, то мне выдается ошибка, что ни одна форма в данный момент не активна, как правильно вызывать дочернее окно из ДЛЛ?
Игорь Шевченко (2002-10-22 14:30:00) [6]www.delphikingdom.com
Skier (2002-10-22 14:29:00) [7]>Pegas
А в чём косяк-то ?
Подробнее...