Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.20;
Скачать: CL | DM;

Вниз

форма + dll   Найти похожие ветки 

 
keymaster ©   (2002-04-19 23:18) [0]

Нужно закопать модальную форму в dll
Поискал я это в faq, но не нашёл...
кто в курсе, поделитесь рецептом, плиз.
И ещё вопрос: а можно в одну длл спрятать несколько
модальных форм?


 
Sirus ©   (2002-04-20 09:55) [1]

> И еще вопрос:
Можно... можно туда прятать сколько угодно форм и даже модальных... пока памяти хватит.. :))

Пример:
пример проекта DLL
library DLLForm;

uses
SysUtils, StdCtrls, Controls, Forms, Classes,
main in "main.pas" {MainForm};

Function ShowLibForm:Boolean; stdcall;
Begin
MainForm:=TMainForm.Create(Application);
Result:=(MainForm.ShowModal = mrOk);
if Result then Begin
FreeAndNil(MainForm);
End;
End;

{$R *.RES}

Exports
ShowPaysForm;

begin
end.


Код формы в DLL
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TMainForm = class(TForm)
CloseButton: TButton;
procedure CloseButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

uses dmunit;

{$R *.DFM}

procedure TMainForm.CloseButtonClick(Sender: TObject);
begin
MainForm.ModalResult:=mrOk;
Close;
end;

end.


А теперь вызов формы в DLL из программы:

unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus;

type
TMainForm = class(TForm)
button1:TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;
LibHandle: THandle; //Хендл библиотек
ShowLibForm: function:Boolean; stdcall;

implementation

{$R *.DFM}

procedure TMainForm.Button1Click(Sender: TObject);
begin
@ShowLibForm := nil;
LibHandle := LoadLibrary("dllform.dll");
if LibHandle >= 32 then begin
@ShowLibForm := GetProcAddress(LibHandle,"ShowLibForm");
if @ShowLibForm <> nil then begin
MainForm.Hide;
ShowLibForm;
MainForm.Show;
end;
end;
@ShowLibForm:=nil;
FreeLibrary(LibHandle);
end;

End.


Вот и все... я тоже когда искал ответ на этот вопрос... и вот результат... Удачи в программировании...

With best regards Diamond Sirus Ringer



Страницы: 1 вся ветка

Текущий архив: 2002.06.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
14-65222
mvg_first
2002-05-16 19:44
2002.06.20
Помогите с инфой по написанию техзаданий


1-65089
MVova
2002-06-06 16:50
2002.06.20
Текстовая печать


14-65213
Miwa
2002-05-16 01:30
2002.06.20
Распознавание голоса в компютере.


1-65099
Tahion
2002-06-03 20:25
2002.06.20
Как узнать путь к иконке файла с определенным расширением в реест


1-65083
Reticent
2002-06-10 16:08
2002.06.20
Sender?!