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

Вниз

DLL немодальный вызов, MDI   Найти похожие ветки 

 
IntruderLab   (2008-03-11 15:32) [0]

Задачка такова, необходимо разработать 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;


 
Leonid Troyanovsky ©   (2008-03-11 15:41) [1]


> IntruderLab   (11.03.08 15:32)  

> формы хранятся в dll. Не получается вызов формы как Child
> формы, как сделать?

Не хранить формы в dll.

--
Regards, LVT.


 
Сергей М. ©   (2008-03-11 16:08) [2]


> Не получается вызов формы как Child формы, как сделать?


If the form is the main form of an MDI application, its FormStyle property must be set to fsMDIForm.


 
IntruderLab   (2008-03-11 16:10) [3]


> If the form is the main form of an MDI application, its
> FormStyle property must be set to fsMDIForm.


Это я естественно указываю - не работает


 
IntruderLab   (2008-03-11 16:11) [4]


> > IntruderLab   (11.03.08 15:32)  
>
> > формы хранятся в dll. Не получается вызов формы как Child
> > формы, как сделать?
>
> Не хранить формы в dll.
>
> --
> Regards, LVT.


Суть такова - что именно в dll и именно не модельные формы для MDI приложения нужны :(


 
Сергей М. ©   (2008-03-11 16:14) [5]

У твоей dll св-во MainForm объекта Application равно nil.
Удивись, почеши репу, сделай выводы)


 
IntruderLab   (2008-03-11 16:42) [6]


> У твоей dll св-во MainForm объекта Application равно nil.
>
> Удивись, почеши репу, сделай выводы)


Удивился, но мне делфа пишет, то это ридонли свойство, что делать - репа болит от чеса :)


 
Сергей М. ©   (2008-03-11 16:45) [7]

Ну делать ?)

Для начала распрощаться с мыслью об использовании в кач-ве хост-приложения для твоих dll приложений, разработанных не в Делфи или в Делфи иных версий.

Подтверди готовность)


 
clickmaker ©   (2008-03-11 16:48) [8]


> [6] IntruderLab   (11.03.08 16:42)

а почему не экспортировать из DLL фреймы? А mdi-дети пусть себе живут в экзе


 
IntruderLab   (2008-03-11 17:12) [9]


> Сергей М. ©   (11.03.08 16:45) [7]
>
> Ну делать ?)
>
> Для начала распрощаться с мыслью об использовании в кач-
> ве хост-приложения для твоих dll приложений, разработанных
> не в Делфи или в Делфи иных версий.
>
> Подтверди готовность)


Готовность подтверждаю :)
Сейчас сделал вот что: Передал в dll помимо Application.Handle еще MainForm.Handle и вызвал Child с помощью ParentWindow, форма открылась - но ессно не все что надо....


 
Сергей М. ©   (2008-03-11 17:15) [10]


> Готовность подтверждаю


Ну тогда убирай нафих все эти "передачи")

Все что нужно - собрать взаимодействующие проекты с установленной опцией использования пакетов времени выполнения (см. Project Options -> Packages -> Build With Run-Time Packages)

Вуаля !)


 
IntruderLab   (2008-03-11 17:17) [11]

если имеется ввиду bpl то не подходит.... надо именно dll


 
IntruderLab   (2008-03-11 17:31) [12]

Хотя уже согласен и на bpl


 
Leonid Troyanovsky ©   (2008-03-11 17:49) [13]


> IntruderLab   (11.03.08 17:31) [12]

> Хотя уже согласен и на bpl

Соглашайся на монолитный экзешник,
и можешь спокойно идти по паре пива.

--
Regards, LVT.


 
MetalFan ©   (2008-03-11 17:50) [14]

Может тогда согласишься и на отказ от внешних модулей? ))


 
MetalFan ©   (2008-03-11 17:52) [15]


> Leonid Troyanovsky ©

Опередили


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


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


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

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


 
Amoeba ©   (2008-03-12 01:23) [17]

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


С чем ?

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

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

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

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

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


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

Попробую


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

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

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

С чем ?

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

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

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

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

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

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


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


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


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


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

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


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

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


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


> IntruderLab   (13.03.08 12:38) [28]


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


 
IntruderLab   (2008-03-13 13:22) [30]

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


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


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


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


 
IntruderLab   (2008-03-13 13:50) [32]


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


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


 
Maxick ©   (2008-03-13 13:54) [33]

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


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


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


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

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

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


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

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


 
IntruderLab   (2008-03-13 14:09) [36]


> Сергей М. ©   (13.03.08 14:06) [34]
>
>
> > это exe? а как указать в dll?
>
>
> Сказка про белого бычка)
>
> Говорили-говорили про единый объект Application - и все
> впустую)
>
> Ты пойми, что при BwRTP-опции объект Application и, соотв-
> но, объект Application.MainForm и в ехе и в длл - это один
> и тот же объект !


Сергей, сорри... просто привык к одной системе - очень сложно представить как в MDI просто это переделать - вот и куча вопросов из -за этого... Сейчас попробую


 
IntruderLab   (2008-03-13 14:51) [37]

Не понимаю, пишет - Нет возможности создать форму, ни одна MDI форма не является активной, все таки хоче указания Application


 
IntruderLab   (2008-03-13 15:02) [38]

Хелп, ничего не понимаю. Напишите просто тупо как вызвать форму из DLL чтобы она стала Child для mdi
у меня в exe frmMain.FormStyle := fsMDIForm;
в dll frmTest.FormStyle := fsMDIChild;
функция вызова формы frmTest из dll
function ShowTest:LongInt;StdCall;
var frmTest : TfrmTest;
begin
Result := LongInt(TfrmTest.Create(Application); --навреное тут не так, как сделать не знаю
end;
в exe:
var LibHandle : THandle;
****
LibHandle := LoadLibrary("iHercules.dll");
if LibHandle <> 0 then
begin
@ShowTest := GetProcessAddress(LibHandle,"ShowTest);
ShowTest;
end;
FreeLibrary(LibHandle);

Что я не так делаю.... в не MDI приложении с модальным вызовом форм все работет, не могу понять как это реализуется в MDI


 
Сергей М. ©   (2008-03-13 15:08) [39]

Чему равно

Application.MainForm

непосредственно перед вызовом

TfrmTest.Create(Application)

?


 
IntruderLab   (2008-03-13 16:00) [40]

Мне параметром ему хендл главной формы присваивать?



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

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

Наверх




Память: 0.56 MB
Время: 0.023 c
2-1228979229
opoloxai
2008-12-11 10:07
2009.01.25
Колёсико мыши


2-1228916838
Alex_C
2008-12-10 16:47
2009.01.25
Зная Handle окна перейти к его TWinControl


2-1228807718
noob_one
2008-12-09 10:28
2009.01.25
Разный размер исполнимого файла.


15-1227399487
Petr V. Abramov
2008-11-23 03:18
2009.01.25
Звуки для PC-спикера


2-1228680451
neveGreen
2008-12-07 23:07
2009.01.25
Как создать объект с глобальной видимостью?