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

Вниз

Форма и DLL   Найти похожие ветки 

 
Vitek ©   (2005-11-30 14:34) [0]

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

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


 
Alexandr Bydantcev ©   (2005-11-30 14:48) [1]

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


 
Digitman ©   (2005-11-30 15:12) [2]


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


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


 
gdaujk ©   (2005-11-30 15:27) [3]

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

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: создание немодальной формы несколько отличается от того, что написанно выше...


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

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


 
gdaujk ©   (2005-12-01 06:22) [5]

Зачем грузить немодальную форму из 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 06:47) [6]

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


 
gdaujk ©   (2005-12-01 10:41) [7]

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

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


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



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

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

Наверх




Память: 0.48 MB
Время: 0.059 c
5-1118656499
Subdigger
2005-06-13 13:54
2005.12.25
TDataset


1-1133161766
MadGhost
2005-11-28 10:09
2005.12.25
Как завершить второй поток, работая с СОМ портом.


1-1133366543
legeyda
2005-11-30 19:02
2005.12.25
Ошибка dib.dcu в делфи


3-1131379841
linx
2005-11-07 19:10
2005.12.25
Получить строчку с максимальным значением


2-1134234102
Alexious
2005-12-10 20:01
2005.12.25
Много одинаковых объектов