Главная страница
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.051 c
1-1089801256
r0bert
2004-07-14 14:34
2004.07.25
проблема с запоминанием размеров окна


3-1088573748
Ratiborr
2004-06-30 09:35
2004.07.25
На сколько облегчает DLL


1-1089227480
arcoant
2004-07-07 23:11
2004.07.25
Проблема с выделением текста


1-1089266877
EvgeniyR
2004-07-08 10:07
2004.07.25
Форматированный текс


1-1089790611
AlexeyITN
2004-07-14 11:36
2004.07.25
Подскажите ссылками на Borland(Interprise)