Главная страница
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.015 c
7-65260
ЗЛ
2002-03-22 08:17
2002.06.20
Как вырубить клаву, а потом снова включить, оставив работать толь мышь. И как заставить винт шуметь на определенное время


8-65186
APTEMKA
2002-02-06 16:56
2002.06.20
Помогите пожалуста с DelphiX


3-64997
Cyrus
2002-05-29 10:46
2002.06.20
IBDataSet


3-64907
Garry
2002-05-25 15:28
2002.06.20
Как узнать количество строк в наборе данных?


1-65024
Exploited
2002-06-09 11:37
2002.06.20
Как одним махом определить выполнение нескольких функций?