Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1229089075
Андрей Ал.
2008-12-12 16:37
2009.01.25
Фильтр


15-1228060438
antonn
2008-11-30 18:53
2009.01.25
лаги в интернете


3-1212590501
Varlon
2008-06-04 18:41
2009.01.25
dbgrid заполняется из sql запроса. Надо добавить колонку.


2-1229005474
TNT
2008-12-11 17:24
2009.01.25
ShellExecute(HWND,Null,SP,Null,Null,SW_SHOWNORMAL);


2-1228391201
aglar
2008-12-04 14:46
2009.01.25
Формат даты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский