Главная страница
    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.033 c
1-1089232054
killer
2004-07-08 00:27
2004.07.25
В Edit только числа...


8-1083839500
Григорий Поваров
2004-05-06 14:31
2004.07.25
извлечение иконки 48x48 из ресурсов


3-1088685364
Ceval
2004-07-01 16:36
2004.07.25
Подскажите как с помощью ADOTable связать две таблицы ?


14-1088762912
ArMellon
2004-07-02 14:08
2004.07.25
Нужен русификатор 3ds max 5.1 кто знает киньте


1-1089728961
Studentik
2004-07-13 18:29
2004.07.25
Стиль XP в XP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский