Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.057 c
3-1123656843
Denis
2005-08-10 10:54
2005.09.25
Access не воспринимает запрос


14-1124344469
Kerk
2005-08-18 09:54
2005.09.25
Новый ресурс о делфи. Рекомендую всем.


3-1123580030
IgorRu
2005-08-09 13:33
2005.09.25
Не могу создать таблицу - External file


2-1124354316
Гость22
2005-08-18 12:38
2005.09.25
Есть ли функции, с помощью которых можна выделить целую часть..


4-1122898897
MegaVolt
2005-08-01 16:21
2005.09.25
Ручное стирание ListView





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