Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизЗакрытие окна згружаемого из dll Найти похожие ветки
← →
Kostafey © (2006-10-14 22:52) [0]Прошу помощи в следующем вопросе.
Необходимо разработать dll которая будет использовать свои окна, при этом закрывая эти окна не должно закрываться окно основного приложения.
Это текст dll (за основу взял пример с вычислением сумммы)
library DLL_WinForm;
uses
SysUtils,
Classes,
Forms,
Unit1 in "Unit1.pas" {FormDll};
{$R *.res}
/////////////////////////////////////////
function getSum(const n1: integer; const n2: integer): integer;
begin
Result := n1 + n2;
Application.CreateForm(TFormDll, FormDll);
FormDll.Show;
end;
/////////////////////////////////////////
exports
getSum;
begin
end.
В Unit1 (окно, вызываемое из dll) изменений нет - пустое окно.
Код формы приложения, вызывающего dll:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hModule: THandle;
// объявляем переменную типа "указатель на функцию"
pGetSum: function(const n1, n2: integer): integer;
n: integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
hModule := LoadLibrary("DLL_WinForm.dll");
assert(hModule <> 0, "Can""t load DLL!");
pGetSum := GetProcAddress(hModule, "getSum");
assert(@pGetSum <> nil, "Can""t find the getSum function!");
n := pGetSum(10, 20);
Label1.Caption:="n = "+ inttostr(n);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (hModule<>0) then
begin
FreeLibrary(hModule);
hModule:=0;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if (hModule<>0) then
begin
FreeLibrary(hModule);
CanClose:=false;
hModule:=0;
end;
end;
end.
На форме 2 кнопки:
Button1 - запускает dll и отображается окно (из dll)
Button2 - выгружает dll (окошко благополучно закрывается, но приложение продолжает работать)
А если щелкнуть по кнопке (X) закрытия окна dll, то происходит закрытие не только окна dll, но и окна самого приложения.
ВОПРОС: как сделать так чтобы при закрытии dll-окна проложение бы не закрывалось.
← →
vain © (2006-10-14 23:18) [1]Я тебе на мыло скинул пример к книге Фаронова по работе с dll с формами. Я думаю, разобраться сможешь.
← →
Kostafey © (2006-10-14 23:24) [2]> [1] vain © (14.10.06 23:18)
Спасибо огромное, похоже это то что нужно !
← →
Leonid Troyanovsky © (2006-10-15 10:04) [3]
> vain © (14.10.06 23:18) [1]
> Я тебе на мыло скинул пример к книге Фаронова по работе
> с dll с формами. Я думаю,
И мне скинь, плиз, lv.t@rambler.ru
Или, если он невелик, то сюда.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c