Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
14-1125458849
Гриха
2005-08-31 07:27
2005.09.25
Скины


2-1124305845
Привет
2005-08-17 23:10
2005.09.25
Динамическое создание кнопок


14-1125915430
Signate
2005-09-05 14:17
2005.09.25
Opera


2-1124097041
root187
2005-08-15 13:10
2005.09.25
ustanovka BDE


3-1123742054
ShotGun
2005-08-11 10:34
2005.09.25
Как сохранить и считывать image в SQL Server?




   Наверх