Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1089538115
sashok
2004-07-11 13:28
2004.07.25
Подключение DLL по ходу выполнения програмы.


14-1089105504
Lex
2004-07-06 13:18
2004.07.25
Borland Delphi 6. Руководство разработчика. Ксавье, Пачеко


6-1085751039
ГудБой
2004-05-28 17:30
2004.07.25
Как в TTcpCLient указать таймаут.


14-1088723413
Defen
2004-07-02 03:10
2004.07.25
глубиные ошибки


1-1089720193
mOOx_
2004-07-13 16:03
2004.07.25
Сравнение строк для сортировки (Алгоритм)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский