Форум: "Основная";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.009 c