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

Вниз

Использование MDIChild   Найти похожие ветки 

 
Lower_   (2005-09-04 08:54) [0]

Уважаемые мастера!
Помогите решить проблему.
Имеется глвный проект (exe) - он же MDIMainForm;
имеется MDIChildForm, расположенная в dll.
Главный проект ее прекрасно импортирует - все работает, но
одно но..
При перечислении MDIChild -
for i:=Application.MainForm.MdiChildCount-2 downto 0 do
if Application.MainForm.MdiChildren[i] = (окно в Dll - то самое MDIChild) - не могу этого
сделать, не используя uses в главном проекте, хочется, чтобы
она ссылалась через DLL, без подключения uses этой формы.
Кто знает решение, пожалйста напишите.
Заранее спасибо.
Код dll:
library evr_in;

uses
 SysUtils,
 Classes,
 forms,
 windows,
 evr_inf_u in "evr_inf_u.pas" {evr_inf_f};

var
 DA3 : TApplication;
 DS3 : TScreen;
{$R *.res}

procedure Init3(App3, Scr3: integer); StdCall;
begin
 DS3 := Screen;
 Screen := TScreen(Scr3);
 DA3 := Application;
 Application := TApplication(App3);
end;

procedure Done3; StdCall;
begin
 Screen := DS3;
 Application := DA3;
end;

procedure evr_info;stdcall;
begin
LockWindowUpdate(Application.MainForm.ClientHandle);
evr_inf_f:=Tevr_inf_f.Create(Application);
evr_inf_f.frReport.ShowReport;
LockWindowUpdate(0);
end;

exports
 Init3,
 Done3,
 evr_info;
begin
end.
Код из главного проекта:

***
type
TInitProc3   = procedure(App3, Scr3: integer); StdCall;
 TDoneProc3   = procedure; StdCall;
 TCreateProc3 = function: integer; StdCall;
**
public
FLib3 : THandle;
  Init3 : TInitProc3;
  Done3 : TDoneProc3;
  evr_info  : TCreateProc3;

***
procedure TMain_dll_f.FormCreate(Sender: TObject);
FLib3 := LoadLibrary(PChar("evr_in.dll"));
@Init3 := GetProcAddress(FLib3, PChar("Init3"));
@Done3 := GetProcAddress(FLib3, PChar("Done3"));
@evr_info  := GetProcAddress(FLib3, PChar("evr_info"));
Init3(integer(Application), integer(Screen));
***
procedure TMain_dll_f.FormDestroy(Sender: TObject);
begin
Done3;
FreeLibrary(FLib3);
end;

Вызывает так:
var:
Fm1:TForm;
procedure TMain_dll_f.N24Click(Sender: TObject);
Fm1 := TForm(evr_info);


 
GanibalLector ©   (2005-09-04 12:14) [1]

ну,можно использовать FindWindowEx например.Хотя...


 
Defunct ©   (2005-09-04 19:13) [2]

> for i:=Application.MainForm.MdiChildCount-2 downto 0 do

Из-за чего возникла такая необходимость?

> Главный проект ее прекрасно импортирует - все работает
Сделай свой контейнер форм. По признакам, которые возвращает  TCreateProc3 = function: integer; StdCall;


 
Lower_   (2005-09-04 20:24) [3]

Пользователь может много раз создавать данное окно, находящее в dll.
for i:=Application.MainForm.MdiChildCount-1 downto 0 do
специально сделал, хочу, если форма существует пропускать шаг, если отсутствует - создавать.
С контейнером форм будет туго.


 
Zacho ©   (2005-09-04 20:35) [4]

Lower_   (04.09.05 8:54)
if Application.MainForm.MdiChildren[i] =


Проверяй имя формы или ещё какое-либо св-во.
Например, if Application.MainForm.MdiChildren[i].Name=...

А вообще, DLL для подобной задачи - не лучшая идея. Лучше используй BPL.


 
Defunct ©   (2005-09-04 20:38) [5]

Lower_   (04.09.05 20:24) [3]
> С контейнером форм будет туго.

А в чем сложность? Прямо внутри DLL создать счетчик открытых форм, и считывать его.

> специально сделал, хочу, если форма существует пропускать шаг, если отсутствует - создавать.
Допустим экспортируется
CreateMDIForm;
что мешает экспортировать из той же DLL
MDIChildEnum:Integer - которая будет возвращать количество незакрытых MDIChild форм, созданных внутри DLL.


 
Digitman ©   (2005-09-05 08:56) [6]


> Lower_   (04.09.05 08:54)  


а зачем весь этот огород с stdcall и с передачей ссылок на TApplication и TScreen как Integer ?

ты же все равно не сможешь использовать свою dll в хост-проиложениях, собранных не в Делфи и не в ВСВ ..



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

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

Наверх




Память: 0.46 MB
Время: 0.056 c
2-1124270885
Коля
2005-08-17 13:28
2005.09.25
Delphi


14-1125323191
БарЛог
2005-08-29 17:46
2005.09.25
Скрипты на СИ - можно ли?


1-1125670203
VadimX
2005-09-02 18:10
2005.09.25
Странное поведение IDE отладчика


4-1122704571
Gloomer
2005-07-30 10:22
2005.09.25
Перехват перехода в спящий/ждущий режим


14-1125893012
vajo
2005-09-05 08:03
2005.09.25
Вирус: Trojan-PSW.win32.vipgsm.ap





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский