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

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

Форма из DLL в отдельном потоке


al3xey ©   (2009-06-12 23:07:00) 

Доброго времени суток!
Мне нужно написать DLL с формой.
В длл 4 функции.
Start,SendData,GetData,Finish.
Использоваться должно так:
Программа загружает DLL и вызывает Start. Далее в цикле она выполняет SendData и GetData.
SendData шлет постоянно изменяющиеся данные в DLL (на форме они отображаются). А GetData считывает данные из длл (функция возвращает число DOUBLE), которые зависят от того, какие галочки на форме в данный момент поставлены.
Finish закрывает форму и очищает память. Вроде всё ясно и просто.

Но как мне реализовать это, как вынести рисование формы и обработку её сообщений в отдельный поток?

Заранее спасибо!


Юрий Зотов   (2009-06-14 22:09:00) [1]

DLL:

library Project2;

uses
 Forms,
 Unit2 in 'Unit2.pas' {Form2}; // В Unit2 - самая обычная форма

var
 Form: TForm2;

procedure Start;
begin
 if Form = nil then
   Application.CreateForm(TForm2, Form);
 Form.Show
end;

procedure Finish;
begin
 Form.Free;
 Form := nil
end;

{$R *.res}

exports
 Start,
 Finish;

begin

end.<
/CODE>
Тестовый проект:

type
 TProc = procedure;
var
 HLib: THandle;
 Start, Finish: TProc;

procedure TForm1.FormCreate(Sender: TObject);
begin
 HLib := LoadLibrary('Project2.dll');
 Start := GetProcAddress(HLib, 'Start');
 Finish := GetProcAddress(HLib, 'Finish')
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 FreeLibrary(HLib)
end;

procedure TForm1.btnStartClick(Sender: TObject);
begin
 Start
end;

procedure TForm1.btnFinishClick(Sender: TObject);
begin
 Finish
end;


Германн   (2009-06-13 01:08:00) [2]


> al3xey   (13.06.09 00:57) [4]
>
> спасибо за очень содержательные ответы! особенно Amoeba
> =)))
>
> > Ибо перечисленные тобой 4 функции не нуждаются в форме.
>
>
> Да?
>
> > GetData считывает данные из длл (функция возвращает число
> > DOUBLE), которые зависят от того, какие галочки на форме
> > в данный момент поставлены.
>
> А это как тогда реализовать?
> Я пишу DLL для сторонней программы, еслиб у меня были её
> исходники, никаких DLL я б не придумывал
>

1. Да. Не нуждаются.
2. GetData вполне может считывать данные, учитывая "галочки " в форме/окне самой программы.

P.S. Если ты пишешь "DLL для сторонней программы", то твои возможности явным образомограничены тем, что тебе предоставляет та самая сторонняя. И уж тогда вопросы к её авторам, а уж никак не к нам.


al3xey   (2009-06-13 00:57:00) [3]

спасибо за очень содержательные ответы! особенно Amoeba =)))

> Ибо перечисленные тобой 4 функции не нуждаются в форме.

Да?

> GetData считывает данные из длл (функция возвращает число
> DOUBLE), которые зависят от того, какие галочки на форме
> в данный момент поставлены.

А это как тогда реализовать?
Я пишу DLL для сторонней программы, еслиб у меня были её исходники, никаких DLL я б не придумывал


Германн   (2009-06-13 00:48:00) [4]


> al3xey   (12.06.09 23:23) [1]
>
> По-сути мне нужно сделать немодальную форму...

По сути тебе нужно сделать DLL без форм. Что, кстати более чем естественно для dll. Ибо перечисленные тобой 4 функции не нуждаются в форме.


Amoeba   (2009-06-13 00:26:00) [5]


> Доброго времени суток!
> Мне нужно написать DLL с формой.
>

А нафига? Проблем не хватает?


al3xey   (2009-06-12 23:23:00) [6]

По-сути мне нужно сделать немодальную форму...


Наверх

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