![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов одной формы из другой, которые находятся в одной DLL [D7, Win95/98, WinXP]
killer © (2004-07-11 12:21:00)У меня в одной DLL находятся две формы, Form1 и Form2 в двух экспортируемых функциях (чтобы вызвать окна) ShowForm1 и ShowForm2... Так вот как можно вызвать одно окно из другого при нажатии на кнопку например?
killer (2004-07-11 19:10:00) [1]Да не... :) Я понял что не так...
надо вот как записать и все будет нормуль:
В первой форме:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
end;
Форму создать надо :)
jack128 (2004-07-11 18:39:00) [2]
> Что то не работает... вот код...
прям таки вываливается окошко с текстом "Что то не работает" ???
killer (2004-07-11 17:51:00) [3]Что то не работает... вот код...
Первая форма в DLL:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure ShowForm(Handle: HWnd); stdcall;
implementation
uses Unit2;
{$R *.dfm}
procedure ShowForm(Handle: HWnd); stdcall;
var
Form1: TForm1;
begin
Application.Handle:=Handle;
Form1:=TForm1.Create(Application);
Form1.ShowModal;
Form1.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
end.
Вторая форма в DLL:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
end.
DLL:
library DLLForms;
uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas',
Unit2 in 'Unit2.pas';
{$R *.res}
Exports
ShowForm;
begin
end.
Программа:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
DLLForms: LongWord;
ShowForm: procedure(Handle: HWnd); stdcall;
begin
DLLForms:=LoadLibrary('DLLForms.dll');
if DLLForms=0 then
begin
Application.MessageBox('DLLForms.dll not found.', 'Error', mb_IconStop+mb_Ok);
end
else
begin
@ShowForm:=GetProcAddress(DLLForms, 'ShowForm');
ShowForm(Application.Handle);
FreeLibrary(DLLForms);
end;
end;
end.
jack128 (2004-07-11 16:40:00) [4]
> ] killer © (11.07.04 16:33)
сорри - я не внимательно прочитал вопрос.
Так же как и в обычной программе подключаешь нужный модуль
uses
uShowForm2;
procedure TShowForm1.Button1Click(Sender: TObject);
begin
ShowForm2.ShowModal;
end;
killer (2004-07-11 16:33:00) [5]jack128Т.е. мне нужно импортировать функцию, которая находится в этойже DLL? т.е. из самой в себя???
jack128 (2004-07-11 16:29:00) [6]
> А как подключить его
кого его? модуль с формой? да не нужно его подключатьть! просто импортируй эти функции и вызывай их...
killer (2004-07-11 16:28:00) [7]я пишу это в модуле Unit1...
killer (2004-07-11 16:26:00) [8]А как подключить его?
пишу в uses Unit2 - неправильно, пишу Unit2 in 'Unit2.pas' - тоже неправильно...
Гаврила (2004-07-11 16:22:00) [9]Функция, которая показывает форму, уже подразумевает подключенный модуль с формой.
killer (2004-07-11 16:13:00) [10]просто вызвать эту фонкцию? Т.е. форму как модуль ненадо подключать???
Гаврила (2004-07-11 16:11:00) [11]как и не в DLL
killer (2004-07-11 15:42:00) [12]Help!!!