Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизВызов одной формы из другой, которые находятся в одной DLL Найти похожие ветки
← →
killer © (2004-07-11 12:21) [0]У меня в одной DLL находятся две формы, Form1 и Form2 в двух экспортируемых функциях (чтобы вызвать окна) ShowForm1 и ShowForm2... Так вот как можно вызвать одно окно из другого при нажатии на кнопку например?
← →
killer © (2004-07-11 15:42) [1]Help!!!
← →
Гаврила © (2004-07-11 16:11) [2]как и не в DLL
← →
killer © (2004-07-11 16:13) [3]просто вызвать эту фонкцию? Т.е. форму как модуль ненадо подключать???
← →
Гаврила © (2004-07-11 16:22) [4]Функция, которая показывает форму, уже подразумевает подключенный модуль с формой.
← →
killer © (2004-07-11 16:26) [5]А как подключить его?
пишу в uses Unit2 - неправильно, пишу Unit2 in "Unit2.pas" - тоже неправильно...
← →
killer © (2004-07-11 16:28) [6]я пишу это в модуле Unit1...
← →
jack128 © (2004-07-11 16:29) [7]
> А как подключить его
кого его? модуль с формой? да не нужно его подключатьть! просто импортируй эти функции и вызывай их...
← →
killer © (2004-07-11 16:33) [8]jack128 Т.е. мне нужно импортировать функцию, которая находится в этойже DLL? т.е. из самой в себя???
← →
jack128 © (2004-07-11 16:40) [9]
> ] killer © (11.07.04 16:33)
сорри - я не внимательно прочитал вопрос.
Так же как и в обычной программе подключаешь нужный модуль
uses
uShowForm2;
procedure TShowForm1.Button1Click(Sender: TObject);
begin
ShowForm2.ShowModal;
end;
← →
killer © (2004-07-11 17:51) [10]Что то не работает... вот код...
Первая форма в 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 18:39) [11]
> Что то не работает... вот код...
прям таки вываливается окошко с текстом "Что то не работает" ???
← →
killer © (2004-07-11 19:10) [12]Да не... :) Я понял что не так...
надо вот как записать и все будет нормуль:
В первой форме:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
end;
Форму создать надо :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c