Форум: "Основная";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизВопрос про DLL и свойство Application.Handle Найти похожие ветки
← →
KSergey (2003-08-26 08:48) [0]Как все знаю, в книжках по Delphi при описании создания DLL указано, что если DLL содержит формы, то необходимо свойству Application.Handle DLL-библиотеки присваивать аналогичное свойство вызывающего ее приложения.
Все бы прикольно, вот только дальше обязательно пишут, что DLL - это круто, ее можно вызывать из любого приложения, написанного на любом языке. Это, безусловно, верно, вот только маленький нюанс: а чего же тогда в эту самую Application.Handle DLL-библиотеки пихать-то? Например, при вызове из Access?
Я даже больше скажу. DLL у меня вызывает приложение вообще без форм, по сути маленький такой пускачек подгружающий библиотеку и передаещий ей управление. Даже окна нет. А что в этом случае пихать в этот Handle, при том, что тип его - HWND? Где ж я ему этот хендл окна-то возьму? Или придется создать невидимое окно?
А без этого (наверное без этого) каждая модальная форма из DLL (если их несколько последовательно открывается) отображается на панели задач, что не здорово...
Как быть? Подскажите...
← →
y-soft (2003-08-26 09:10) [1]Совсем необязательно, даже при вызове из Dll немодальных форм - работать будет ничем не хуже, только форму будет видно в панели задач...
← →
KSergey (2003-08-26 09:13) [2]y-soft © (26.08.03 09:10)
Совсем необязательно, даже при вызове из Dll немодальных форм - работать будет ничем не хуже, только форму будет видно в панели задач...
Очень даже верно, вто только вот этого отображения на панели задач и хочется как раз избежать...
← →
VAleksey (2003-08-26 09:26) [3]У тебя нет объекта Application?
← →
Camus (2003-08-26 09:34) [4]> вот этого отображения на панели задач и хочется как раз
> избежать...
У форм в DLL заместите CreateParams, а в нем напишите:
inherited;
with Params do
ExStyle := ExStyle and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW
← →
Vlad (2003-08-26 09:38) [5]Не проще у формы поставить BorderStyle=bsToolWindow ?
← →
KSergey (2003-08-26 09:55) [6][3] VAleksey © (26.08.03 09:26)
У тебя нет объекта Application?
В DLL конечно же есть, но вот в вызывающем приложении - не факт. Пример: приложение на Access или самописанное без окон (и дверей ;).
Не, правда: вот что по задумке создателей VCL я должен запихивать в Application.Handle DLL-ки, если вызываю эту библиотеку не из дельфийского приложения? В хелпе мне не попалось такое, написано лишь, что зыпихать значение из Application.Handle хост-приложения. Типа кроме дельфи ничего нет ;)
[4] Camus © (26.08.03 09:34)
[5] Vlad © (26.08.03 09:38)
Хм, я попробую. Хоть проблемы это не решит, но скроет ее.
Поясню: боюсь, вылезет другая: присваивать что-то этому полю надо для того, чтобы при свертывании хост-приложения корректно обрабатывались формы, созданные в DLL...
← →
KSergey (2003-08-27 08:21) [7]Неужели больше нет мыслей, люди?
← →
y-soft (2003-08-27 09:00) [8]Можно добиться такого же эффекта, какой дает присвоение Application.Handle просто вызывая в OnCreate
SetWindowLong(Self.Handle, GWL_HWNDPARENT, ParentHWND);
Отличие от стандартной методики - влияет только на одну создаваемую форму, т.е. не вызовет непоняток при использовании Dll разными процессами...
Второе - где этот самый ParentHWND взять, если в хост-приложении нет Application? Application-то действительно может не быть, но главное окно, а значит и его HWND обычно есть (можно вообще передавать HWND любого окна, не обязательно главного). А раз язык позволяет работать с Dll, то значит и средства для получения этого HWND с большой вероятностью в нем присутствуют.
Ну а если нет, то смело можно передавать 0 - родителем станет Desktop...
Можно передавать ParentHWND как параметр в функцию создания окна, а можно и вычислить в Dll, используя тот факт, что всегда можно получить HProcess...
← →
KSergey (2003-08-28 09:46) [9]> y-soft © (27.08.03 09:00) [8]
Не, не получается у меня пойти путем использования HProcess... Может еще подсказочку дадите: куда его приткнуть и где его взять ;)
← →
www (2003-08-28 10:03) [10]вообще-о у акцессовских форм есть свойство hwnd -
You can use the hWnd property to determine the handle (a unique Long Integer value) assigned by Microsoft Windows to the current window. Read/write Long.
м.б. это решит проблему?
← →
KSergey (2003-08-28 10:57) [11][10] www (28.08.03 10:03)
вообще-о у акцессовских форм есть свойство hwnd -
Однако это вполне устроит.
Спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c