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

Вниз

Вызов одной формы из другой, которые находятся в одной 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
8-1083874883
Sanek_metaller
2004-05-07 00:21
2004.07.25
Position


14-1088889770
ИМХО
2004-07-04 01:22
2004.07.25
Марлон Брандо скончался


6-1085670241
half_litre
2004-05-27 19:04
2004.07.25
Причина ClientDisconnect ??


1-1089280005
Anisa
2004-07-08 13:46
2004.07.25
Delphi>Excel


14-1089031958
panov
2004-07-05 16:52
2004.07.25
Цифровой фотоаппарат.