Главная страница
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.013 c
3-42921
tmp_user
2002-02-14 03:50
2002.03.14
Замена редактора в DBGrid e


1-43038
GFD
2002-02-26 15:15
2002.03.14
Не могу установить курсор мыши на нужную кнопку


3-42955
Руст
2002-02-08 08:16
2002.03.14
Как упаковать таблицу


14-43154
fliz
2002-01-30 13:10
2002.03.14
2 Merlin : заметил ОЧЕПЯТКУ на этой странице (причем давно...)


1-43071
cahek2000
2002-02-27 09:56
2002.03.14
Синхронный скролинг