![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вызвать форму из dll? [D6, D7, 95/98, XP]
_Lucifer_ © (2005-12-14 14:22:00)Местный FAQ не очень-то информативен по этому поводу. Поиск в Интернете столь же результативен.
В дополнение хочу заметить, что моя dll это COM Add-ins для MS Word.
_Lucifer_ (2005-12-14 16:36:00) [1]Размещение модальных форм в dll.
library ModelF;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,
Unit1 in 'Unit1.pas' {Form1};
function ShowMyDialog(Msg: PChar): Boolean; stdcall;
begin
{Создаем экземпляр Form1 формы TForm1}
Form1 := TForm1.Create(Application);
{В Label1 выводим сообщение Msg}
Form1.Label1.Caption := StrPas(Msg);
{Возвращаем True если нажата OK (ModalResult = mrOk)}
Result := (Form1.ShowModal = mrOk);
Form1.Free;
end;
exports ShowMyDialog;
begin
end.
http://delphi.olympus.ru/dk/helloword/usesdll.htm
http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/md_dll.htm
http://www.superq.ru/comments.php?id=2062_0_1_0_C1
И ещё в Тейксера, Пачеко.
А что тогда такое "Application"? Plotnick У dll есть свой Application. Смело можешь указать. Смысла правда в этом особого нет, но не возбраняется. _Lucifer_ © http://rubooks.jino-net.ru/books/book-05.11.28-Delphi-COM.htm _Lucifer_ © А ларчик просто открывался:
Form1:=TForm1.Create(Form1);Leonid Troyanovsky ©
Form1.ShowModal();
> _Lucifer_ © (15.12.05 11:56) [20]
> А ларчик просто открывался:
> Form1:=TForm1.Create(Form1);
Странно как-то открывается.
Вполне достаточно nil.
--
Regards, LVT. Джо ©
> [20] _Lucifer_ © (15.12.05 11:56)
> А ларчик просто открывался:
> Form1:=TForm1.Create(Form1);
> Form1.ShowModal();
Ой. _Lucifer_ © Leonid Troyanovsky © (15.12.05 12:49) [21]
Это была не моя идея. Но лучшее из найденого/предложеного.
Джо © (15.12.05 12:57) [22]
Что? Джо © Сам то понял, что написал и какой в этом смысл? Leonid Troyanovsky ©
> _Lucifer_ © (15.12.05 13:05) [23]
> Это была не моя идея. Но лучшее из найденого/предложеного.
Ладно уж, заучивай наизусть:
with TForm1.Create(nil) do
try
..
x := ShowModal;
..
finally
Free;
end;
--
Regards, LVT. Leonid Troyanovsky ©
> _Lucifer_ © (14.12.05 16:15) [15]
> "Delphi и COM" нет, а мнение о статье Тенцера скорее негативное.
Это, пардон, почему?
--
Regards, LVT. _Lucifer_ © Джо © (15.12.05 13:08) [24]
Вроде да.
Leonid Troyanovsky © (15.12.05 13:12) [25]
Пожалуй будем использовать ваш вариант. _Lucifer_ © Leonid Troyanovsky © (15.12.05 13:14) [26]
Не понравилась. С первого разу не пошло.
Vlad (2005-12-14 16:29:00) [2]
> _Lucifer_ © (14.12.05 16:15) [15]
> "Delphi и COM" нет
А зря, советую приобрести. Там Add-ins целая глава посвящена, причем подробно и доступным языком.
_Lucifer_ (2005-12-14 16:15:00) [3]Игорь Шевченко © (14.12.05 16:12) [13]
"Delphi и COM" нет, а мнение о статье Тенцера скорее негативное.
Digitman (2005-12-14 16:14:00) [4]
> _Lucifer_ © (14.12.05 16:02) [11]
> Из обнаруженных в Интернете статей следует, что я должен
> располагать указателем (handle) на приложение, которому
> будет принадлежать сия форма
укажи и цитируй хотя бы один источник, где ты прочел сию несуразность ..
Игорь Шевченко (2005-12-14 16:12:00) [5]_Lucifer_ © (14.12.05 15:51) [9]
Надо понимать, что указанную в [1] литературу ты уже прочитал ?
_Lucifer_ (2005-12-14 16:09:00) [6]Form1:=TForm1.Create(<указатель>);
Как получить указатель на MS Word? Есть у меня Host, которое у меня WordApplication. Но у этого Host нету параметра handleю
_Lucifer_ (2005-12-14 16:02:00) [7]Из обнаруженных в Интернете статей следует, что я должен располагать указателем (handle) на приложение, которому будет принадлежать сия форма. Мне что теперь указатель на MS Word получать требуется?
Digitman (2005-12-14 15:58:00) [8]в обработчике события нажатия этой самой кнопки как обычно написать нечто вида
SomeForm := TSomeForm.Create(владелец);
или VCL-объекты-формы нынче стало не модно таким образом создавать ?)
или у тебя иные проблемы ?
_Lucifer_ (2005-12-14 15:51:00) [9]Так:
1. Есть dll - COM Add-in
2. В этой dll есть процедура создания кнопки на панели инструментов MS Word
3. В этой dll есть форма
Надо:
1. вызвать форму из dll процедурой/функцией/чем-то иным, которая находится в dll
Digitman (2005-12-14 15:50:00) [10]
> _Lucifer_ © (14.12.05 15:47) [7]
ну вот теперь худо ли бедно ли понятно)...
так, собственно, в чем загвоздка при сем раскладе ?
_Lucifer_ (2005-12-14 15:47:00) [11]Мне нужно, чтобы в dll, в обработчике нажатия на созданную мной кнопку на панели инструментов MS Word, была некая конструкция, вызывающая форму, которая хранится в этом же dll.
Digitman (2005-12-14 15:44:00) [12]
> Местный FAQ не очень-то информативен по этому поводу. Поиск
> в Интернете столь же результативен
откуда ж они возьмутся, "информативность" и "результативность", если ты даже не сподобился конкретизировать, то ли DLL-код вызывает что-то там где-то там (в рез-те чего начинает фигурировать понятие "объект-форма"), то ли наоборот
Vlad (2005-12-14 15:30:00) [13]
> _Lucifer_ © (14.12.05 15:03) [4]
Форму из этой dll можно вызвать разными способами, например, с помощью экспортируемой функции (через обычный механизм работы с dll) или с помощью метода некого COM объекта. Определись, как тебе нужно.
_Lucifer_ (2005-12-14 15:03:00) [14]Вообще она COM сервер. Но мне надо вызвать форму с настройками из этой dll (сама форма в dll + вызывается она dll-кой).
Vlad (2005-12-14 14:57:00) [15]
> _Lucifer_ © (14.12.05 14:49) [2]
Так как ты собираешься использовать свою dll - как COM сервер или как простую библиотеку?
_Lucifer_ (2005-12-14 14:49:00) [16]То, что это add-in это вторично. Первично это то, что мне надо вызвать из dll форму, которая находится в dll.
Игорь Шевченко (2005-12-14 14:27:00) [17]
> В дополнение хочу заметить, что моя dll это COM Add-ins
> для MS Word.
Елманова, Трепалин, Тенцер - Delphi 6 и COM
Статьи Тенцера на сайте http://www.podgoretsky.com