Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов одной формы из другой, которые находятся в одной 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!!!


Наверх

Титульная страница Поиск, карта сайта Написать письмо