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

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

DLL немодальный вызов, MDI [D7, Win2k, WinXP]


Страницы:   1 2 3 4

IntruderLab ©   (2008-03-11 15:32:00) 

Задачка такова, необходимо разработать MDI приложение, все формы хранятся в dll. Не получается вызов формы как Child формы, как сделать?
Привожу кусочек из DLL
var
 DLLForm  : TDLLForm;
 CallForm : THandle;
implementation

 {$R *.DFM}
//******************************************************************************
function ShowModalForm: Integer;
//Modal Call
begin
 DllForm := TDllForm.Create(Application);
 Result  := DLLForm.ShowModal;
 DLLForm.Free;
end;
//******************************************************************************
procedure ShowForm(Appl, Form: THandle);
//NonModal Call
begin
 Application.Handle := Appl;
 DllForm            := TDllForm.Create(Application);
 DLLForm.FormStyle  := fsMDIChild;
 DLLForm.Color      := clMoneyGreen;
 CallForm           := Form;
 DLLForm.Show;
end;
//******************************************************************************

и кусочек из приложения
procedure TTestMain.Button1Click(Sender: TObject);
// Модальный вызов
begin
  Button2.Enabled := False;
  label1.Caption := 'ModalResult = '+IntToStr(ShowModalForm);
  label1.Show; // Показываем результат вызова
  Button2.Enabled := True
end;

procedure TTestMain.Button2Click(Sender: TObject);
// Немодальный вызов
begin
 Button1.Enabled := False;
 Button2.Enabled := False;
 Button3.Enabled := True; label1.Hide;
 ShowForm(Application.Handle, Self.Handle) ;
end;


IntruderLab   (2008-03-13 14:07:00) [41]

То есть в этом случае уже не надо в dll передавать хендлы Application и Screen?


Сергей М.   (2008-03-13 14:06:00) [42]


> это exe? а как указать в dll?


Сказка про белого бычка)

Говорили-говорили про единыйобъект Application - и все впустую)

Ты пойми, что при BwRTP-опции объект Application и, соотв-но, объект Application.MainForm и в ехе и в длл - это один и тот жеобъект !


Maxick   (2008-03-13 13:54:00) [43]

В свойствах формы: FormStyle ставишь MDiForm. А как делается если все находится в экзэ? точно также и тут.


IntruderLab   (2008-03-13 13:50:00) [44]


> Сергей М. ©   (13.03.08 13:38) [31]
>
>
> > не в MDi режиме работает
> >
>
>
> Убедись, что Application.MainForm.FormStyle = fsMDIForm


это exe? а как указать в dll?


Сергей М.   (2008-03-13 13:38:00) [45]


> не в MDi режиме работает
>


Убедись, что Application.MainForm.FormStyle = fsMDIForm


IntruderLab   (2008-03-13 13:22:00) [46]

дак млин не в MDi режиме работает


Сергей М.   (2008-03-13 12:50:00) [47]


> IntruderLab   (13.03.08 12:38) [28]


Зачем ?
Все уже указано и все работает, ты сам же это сказал в [27].


IntruderLab   (2008-03-13 12:38:00) [48]

Как мне указать для форм, находящихся в dll что exe форма является для них материнской?


IntruderLab   (2008-03-13 12:37:00) [49]

Вобщем все перебьюлдил, все работает, теперь что делать?


Сергей М.   (2008-03-13 12:32:00) [50]


> как мне теперь реализовать MDI?


Ты его уже реализовал - Application.MainForm у тебя fsMDIForm, что и является осн.условием для создания MDI-приложения при поддержке VCL.


IntruderLab   (2008-03-13 12:29:00) [51]

Сергей М. ©   (13.03.08 09:06) [23]

> как с этим работать?

С чем ?

Сказано же - простейшее решение проблемы состоит из двух простейших же пунктов:

1. В исх.кодах своих exe- и dll-проектов убираешь все касаемое параметра Appl, т.е. передача этого параметра не нужна вообще.

2. Во всех своих проектах устанавливаешь крыжик
Project->Options..->Packages->Build With Run-Time Packages
и после этого полностью ребилдишь эти проекты.

Все !! Больше никаких телодвижений делать не нужно.

Что еще не понятно ?)

Вобщем - то сделал.... как мне теперь реализовать MDI?


IntruderLab   (2008-03-13 10:14:00) [52]

Попробую


Сергей М.   (2008-03-13 09:06:00) [53]


> как с этим работать?


С чем?

Сказано же - простейшее решение проблемы состоит из двух простейших же пунктов:

1. В исх.кодах своих exe- и dll-проектов убираешь всекасаемое параметра Appl, т.е. передача этого параметра не нужна вообще.

2. Во всехсвоих проектах устанавливаешь крыжик
 Project->Options..->Packages->Build With Run-Time Packages
и после этого полностью ребилдишь эти проекты.

Все !! Больше никаких телодвижений делать не нужно.

Что еще не понятно ?)


IntruderLab   (2008-03-13 08:52:00) [54]


> Сергей М. ©   (12.03.08 16:18) [21]
>
>
> > Жду руководящих действий
>
>
> Уже даны в достаточном объеме в [10]


Есть вводная информация как с этим работать? Или лучше элементарные примерчики?


Сергей М.   (2008-03-12 16:18:00) [55]


> Жду руководящих действий


Уже даны в достаточном объеме в [10]


IntruderLab   (2008-03-12 16:15:00) [56]


> Сергей М. ©   (11.03.08 19:25) [16]
>
>
> > если имеется ввиду bpl
>
>
> Касаемо твоей вожделенной "dll с формой" - нет, не имеется)
>
> Форма твоя как родилась в твоей dll, так там и будет жить,
>  не волнуйся)


Жду руководящих действий или ссылок на то как :)


IntruderLab   (2008-03-12 16:14:00) [57]


> Amoeba ©   (12.03.08 01:23) [17]
>
> О загрузке дочерней формы (MDIChild) из DLL:
> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=276
>


Плохое распределение памяти, глубина вложений форм не более одного, а у меня  дочерняя форма может вызывать до 3 модальных (линейных) формы. Так что видимо придется работать с BPL


IntruderLab   (2008-03-12 09:20:00) [58]


> Amoeba ©   (12.03.08 01:23) [17]
>
> О загрузке дочерней формы (MDIChild) из DLL:
> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=276
>


спасибо, посмотрю


Amoeba   (2008-03-12 01:23:00) [59]

О загрузке дочерней формы (MDIChild) из DLL:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=276


Сергей М.   (2008-03-11 19:25:00) [60]


> если имеется ввиду bpl


Касаемо твоей вожделенной "dll с формой" - нет, не имеется)

Форма твоя как родилась в твоей dll, так там и будет жить, не волнуйся)


Страницы:   1 2 3 4

Наверх

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