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

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

Как работать с формами в DLL? [D3, D5, Win95/98, Win2k]


Art1 ©   (2002-02-28 12:24:00) 

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


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

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

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

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

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


drpass   (2002-02-28 14:34:00) [2]

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


SDS   (2002-02-28 12:50:00) [3]

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

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("Кнопка");


SDS   (2002-02-28 12:47:00) [4]

В 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;


Наверх

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