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

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

Форма и DLL [D6, D7, Win2k, WinXP]


Vitek ©   (2005-11-30 14:34:00) 

Здрасти!
Ситуаия следующая:
в dll (например MyDll) находится форма. В приложении показываю форму из MyDll без проблем. А как сделать чтобы показать эту форму с помощью функции/процедуры которая находится в этом же MyDll???

Помоги мастера.
Заранее благодарен!


gdaujk   (2005-12-01 10:41:00) [1]

>>vitek ©   (01.12.05 06:47) [6]

>Заранее благодарен


В смысле: "Еще очень рано, 06:47, но я уже очень вам благодарен."?


vitek   (2005-12-01 06:47:00) [2]

Заранее благодарен


gdaujk   (2005-12-01 06:22:00) [3]

Зачем грузить немодальную форму из DLL? Просвятите, а ?

Суть метода почти что таже. Надо изменить функцию вызова:

function ShowYourForm(AppHandle: THandle; aCaption: string; aName: array of string;
                       aValue: array of Real): Longint; stdcall;
var
 YourForm: TYourForm;
begin
 Application.Handle := AppHandle;
 YourForm := TYourForm.Create(Application);
 Result := Longint(YourForm);
 with YourForm do
   begin
     Caption := aCaption;
     Icon.Handle := LoadIcon(0, IDI_ASTERISK);
     Show;
   end;
end;


Дописать функцию закрытия формы:

procedure CloseYourForm(aForm: Longint); stdcall;
begin
 if aForm > 0
   then TYourForm(aForm).Release;
end;


При вызове ShowYourForm надо сохранить результат, а при желини закрыть форму воспользоваться им в качестве параметра CloseYourForm.

PS: сам не пробовал :-)))


Vitek   (2005-12-01 05:14:00) [4]

а как загрузить форму не модально???


gdaujk   (2005-11-30 15:27:00) [5]

Для модальнойформы. В модуле, посвящённом собственно форме:

procedure ShowYourForm(AppHandle: THandle; aCaption: string); stdcall;

implementation

procedure ShowYourForm;
var
 YourForm: TYourForm;
begin
 Application.Handle := AppHandle;
 ErrorForm := TForm3.Create(Application);
 with YourForm do
   try
     Caption := aCaption;
     Icon.Handle := LoadIcon(0, IDI_ASTERISK);
     ShowModal;
   finally
     Free;
   end;
end;


В проекте DLL, содержацей эту форму:

exports
 ShowYourForm;


И наконец в твоём приложении:

  ShowErrorForm(MainFormHandle, Caption);

Ну а про явную загрузку DLL и импорт из неё функций я писать не буду, в вопросе этого нет.

PS: создание немодальной формы несколько отличается от того, что написанно выше...


Digitman   (2005-11-30 15:12:00) [6]


> В приложении показываю форму из MyDll без проблем


показывай в коде, как именно ты это делаешь ..


Alexandr Bydantcev   (2005-11-30 14:48:00) [7]

Э..... не понял вопроса..... А как показать форму из dll, не используя её????


Наверх

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