Главная страница
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.48 MB
Время: 0.1 c
1-1125396965
LORN
2005-08-30 14:16
2005.09.25
вычисления с плавующей точкой


2-1124027784
Андрей Молчанов
2005-08-14 17:56
2005.09.25
FreeAndNil(Form1) и Form1.Free


14-1125399088
Игорь Шевченко
2005-08-30 14:51
2005.09.25
Читать. Просветляться.


14-1125654972
Jeer
2005-09-02 13:56
2005.09.25
GPS в России: восстание министров


14-1125040298
vecna
2005-08-26 11:11
2005.09.25
Супер ролик!