Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизДочерняя форма в Dll Найти похожие ветки
← →
Kolyan (2002-02-12 17:30) [0]Люди, HELP ME!!!
Нужно из DLL вызывать хранящуюся там форму, которая имеет Style fsMDIChild, которая должна становиться дочерней к вызвавшему ее приложению (главная форма - MDIform)
В форумах покопался, в статьях тоже, но то что нужно не получается. :(((
HELP!
← →
McSimm (2002-02-12 17:40) [1]Основная проблема в описанной ситуации заключается в переназначении Application и Screen библиотеки на значения из основной программы (сохранив их оригинальные значения). Это должно быть сделано до создания MDIChild формы. Перед выгрузкой DLL надо восстановить значения этих переменных
← →
Kolyan (2002-02-15 10:50) [2]То есть мне нужно пердавать Application.Handle для создание формы Form1:=TForm1.Create(Application). Это я делаю.
А что делать со Screen ?
← →
McSimm (2002-02-15 10:59) [3]Не то. Этого не достаточно.
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;
← →
Алексей Петров (M) (2002-02-15 11:21) [4]> 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 11:30) [5]>if Hostapp is TApplication then
>else
Это конечно нужно, но не необходимо :)
Некорректно, согласен. Однако есть программы, которые реализуют MDI окна в DLL. И при этом не используют Bpl.
Этот метод проверен. По другому вероятнее всего - не получится.
Видел еще вариант - вместо самих переменных переназначались их Handle:
Application.Handle := HoasAppHandle;
Но этот вариант я не проверял, поэтому и не предлагал.
Возможно будут проблемы с интеграцией MDI меню в меню главного окна, в остальном метод работает.
← →
McSimm (2002-02-15 11:41) [6]К слову, если реализовывать exe и dll с использованием vcl.bpl, то передача Application и Screen не требуется, т.к. в этом случае эти переменные и так будут общими для обоих приложений.
← →
Алексей Петров (M) (2002-02-15 11:45) [7]Есть.
Но у них много шансов доставить авторам море удовольствия при отлове самых невероятных глюков.
А если один из модулей вдруг окажется собранным с другой версией Delphi - тогда вообще жуть...
Ну нельзя же так делать!!!!
← →
McSimm (2002-02-15 11:53) [8]Алексей. Полностью согласен.
Но посмотри на это с такой стороны:
1.У меня есть подобное рабочее приложение. Кроме того, есть чужие приложения нормально работающие с этим методом.
2.Человек задает вопрос.
3.А я ему отвечаю: Сделать такое можно, у меня есть рабочий вариант. Но делать так некорректно. Поэтому лучше откажитесь от этой идеи.
:)
← →
Алексей Петров (M) (2002-02-15 11:54) [9]Не возражаю.
Пусть делает человек как хочет. Его предупредили.
← →
Kolyan (2002-02-19 18:39) [10]Спасибо за информацию. Вроде со всем разбрался.
:)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c