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

Вниз

Как работать с формами в DLL?   Найти похожие ветки 

 
Art1   (2002-02-28 12:24) [0]

Как создать форму в DLL? Как вызвать эту форму из программы и получить доступ ко всем объектам (компонентам), находящимся на форме?


 
SDS ©   (2002-02-28 12:47) [1]

В DLL добавляешь форму (FILE|NEW|Form), пишешь например такую функцию

function GetFormFromDLL(AHandle: THandle) : longint; stdcall;
var
fmForm : TfmForm;

begin
Application.Handle := AHandle;
fmForm := TfmForm.Create(Application);
Result := longint(fmForm);
end;

Она возвращает указатель (в виде целочисленного значения) на форму, созданную в DLL
Эту функцию экспрортируешь
exports
GetFormFromDLL;

В программе описываешь функцию как внешнюю
и пишешь код

procedure TfmMainForm.Button1Click(Sender: TObject);
var
Form : TForm;
i : integer;
begin
Form : TForm;

begin
Form := TForm(GetFormFromDLL(Application.Handle);
for i := 0 to Form.ComponentCountend do
if Form.Components is TButton then
ShowMessage("Кнопка");
Form.Free;
end;


 
SDS ©   (2002-02-28 12:50) [2]

Ошибка, спешил
Вместо

Form : TForm;
i : integer;
begin
Form : TForm;
begin

Form := TForm(GetFormFromDLL(Application.Handle);
for i := 0 to Form.ComponentCountend do


for i := 0 to Form.ComponentCountend do
if Form.Components is TButton then
ShowMessage("Кнопка");

Нужно

Form : TForm;
i : integer;
begin
Form := TForm(GetFormFromDLL(Application.Handle);
for i := 0 to Form.ComponentCount - 1 do
if Form.Components[i] is TButton then
ShowMessage("Кнопка");


 
drpass ©   (2002-02-28 14:34) [3]

В Delphi6 передавать указатель на Application из главной программы необязательно.


 
Art1   (2002-02-28 16:03) [4]

Ха. Спасибо. Кое-что пришлось переделать, но суть ясна и всё работает.
Если не тяжело, подскажите пожалуйста как из загруженной (динамически) DLL-ки передать значение (к примеру TEdit1.Text или CheckBox1.Checked) в основную программу, а то

for i := 0 to Form.ComponentCount - 1 do
if Form.Components[i] is TButton then
ShowMessage("Кнопка");

ничего не дает.

И ещё, можно ли добраться до обработчика ситуаций (к примеру CheckBox1.OnClick) формы DLL-ки из программы?



Страницы: 1 вся ветка

Текущий архив: 2002.03.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
1-43063
Юля_Орлова
2002-02-26 14:37
2002.03.14
Как написать функцию, возвращающую 3 значения?


3-42958
EAlexander
2002-02-15 17:57
2002.03.14
DOA


1-43107
Miwa
2002-02-21 03:38
2002.03.14
Версия приложения.


1-43014
pusrg
2002-02-28 20:29
2002.03.14
Изначальное масштабирование в QuickReport


4-43213
_SnAke_
2002-01-15 12:31
2002.03.14
TRegIniFile (реестр Windows)