![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дочерняя форма в 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 надо восстановить значения этих переменных