Главная страница
    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.043 c
14-1125637818
SergP
2005-09-02 09:10
2005.09.25
ICQ-вирусы


8-1115518446
zero-g
2005-05-08 06:14
2005.09.25
Изменения размера BMP


1-1125766063
KLAUS
2005-09-03 20:47
2005.09.25
ListBox1.Items.Strings


14-1125831667
ArtemESC
2005-09-04 15:01
2005.09.25
Внутренний динамик


3-1123934333
Marser
2005-08-13 15:58
2005.09.25
ADO. Отслеживание изменения БД.





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