Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дочерняя форма в Dll [D5, Win95/98, WinME]


Kolyan ©   (2002-02-12 17:30:00) 

Люди, HELP ME!!!
Нужно из DLL вызывать хранящуюся там форму, которая имеет Style fsMDIChild, которая должна становиться дочерней к вызвавшему ее приложению (главная форма - MDIform)
В форумах покопался, в статьях тоже, но то что нужно не получается. :(((
HELP!


Kolyan   (2002-02-19 18:39:00) [1]

Спасибо за информацию. Вроде со всем разбрался.
:)


Алексей Петров (M)   (2002-02-15 11:54:00) [2]

Не возражаю.
Пусть делает человек как хочет. Его предупредили.


McSimm   (2002-02-15 11:53:00) [3]

Алексей. Полностью согласен.

Но посмотри на это с такой стороны:

1.У меня есть подобное рабочее приложение. Кроме того, есть чужие приложения нормально работающие с этим методом.
2.Человек задает вопрос.
3.А я ему отвечаю: Сделать такое можно, у меня есть рабочий вариант. Но делать так некорректно. Поэтому лучше откажитесь от этой идеи.

:)


Алексей Петров (M)   (2002-02-15 11:45:00) [4]

Есть.
Но у них много шансов доставить авторам море удовольствия при отлове самых невероятных глюков.

А если один из модулей вдруг окажется собранным с другой версией Delphi - тогда вообще жуть...

Ну нельзя же так делать!!!!


McSimm   (2002-02-15 11:41:00) [5]

К слову, если реализовывать exe и dll с использованием vcl.bpl, то передача Application и Screen не требуется, т.к. в этом случае эти переменные и так будут общими для обоих приложений.


McSimm   (2002-02-15 11:30:00) [6]

>if Hostapp is TApplication then
>else
Это конечно нужно, но не необходимо :)

Некорректно, согласен. Однако есть программы, которые реализуют MDI окна в DLL. И при этом не используют Bpl.
Этот метод проверен. По другому вероятнее всего - не получится.
Видел еще вариант - вместо самих переменных переназначались их Handle:
Application.Handle := HoasAppHandle;

Но этот вариант я не проверял, поэтому и не предлагал.

Возможно будут проблемы с интеграцией MDI меню в меню главного окна, в остальном метод работает.


Алексей Петров (M)   (2002-02-15 11:21:00) [7]

> McSimm © (15.02.02 10:59)
Этого тоже мало.

Спроси в IntMyDll:

if Hostapp is TApplication then
else


или даже

if Hostapp is TObject then
else


Между exe и dll можно передовать объект только в том случаи, если оба модуля собраны с использованием пакета, в котором этот объект описывается.Иначе это не корректно.


McSimm   (2002-02-15 10:59:00) [8]

Не то. Этого не достаточно.

var
OldApp: TApplication;
OldScr: TScreen;

При инициализации DLL передаем в нее из EXE переменные Appplication и Screen.

procedure InitMyDll(Hostapp: TApplication; HostScr: TScreen)
begin
OldApp := Application;
OldScr := Screen;

Application := HostApp;
Screen := HostScr;
// .....
end;

Перед выгрузкой DLL, но после закрытия MDIChild формы:
Application := OldApp;
Screen := OldScr;


Kolyan   (2002-02-15 10:50:00) [9]

То есть мне нужно пердавать Application.Handleдля создание формы Form1:=TForm1.Create(Application). Это я делаю.
А что делать со Screen?


McSimm   (2002-02-12 17:40:00) [10]

Основная проблема в описанной ситуации заключается в переназначении Application и Screen библиотеки на значения из основной программы (сохранив их оригинальные значения). Это должно быть сделано до создания MDIChild формы. Перед выгрузкой DLL надо восстановить значения этих переменных


Наверх

Титульная страница Поиск, карта сайта Написать письмо