Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-19378
otimist
2001-12-21 16:37
2002.03.07
WinAPI


14-19321
vajo
2002-01-22 12:49
2002.03.07
Win2000


3-19091
Guts
2002-02-07 16:17
2002.03.07
InterBase 6 and Delphi 5


14-19322
vajo
2002-01-22 15:56
2002.03.07
Время


6-19291
Люк
2001-12-18 11:51
2002.03.07
Работа с компонентом TServerSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский