![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL немодальный вызов, MDI [D7, Win2k, WinXP]
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, так там и будет жить, не волнуйся)