主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2002.04.01;
下载:[xml.tar.bz2];

向下

MDI和DLL的问题 找到类似的分支


alexts   (2002-03-20 15:21) [0]

Привет всем мастерам. Есть такая проблема:
Есть MDI приложение и DLLки в которых формы описаны.
Не выходит эти формы показать. Что делать?



Alx2   (2002-03-20 15:43) [1]

Искать в форуме. Уже четвертый раз за две недели этот вопрос всплывает.



Alx2   (2002-03-20 15:49) [2]

Сорри, линк на этот вопрос уже уплыл за пределы активности :(



alexts   (2002-03-20 16:07) [3]

Ну дык дайте хоть где почитать.



MAxiMum   (2002-03-20 16:08) [4]

А ты сделал внешним в DLL функцию построения Form?
Типа, function(...): TMDIForm;
И получай сслыку на форму.



Alx2   (2002-03-20 16:19) [5]

Короче говоря, делали так:
В DLL переаем контекст Application и Screen. После этого - почти работает. :)
Вот, "на скорую руку" набросал:

DLL:

uses
sharemem,
SysUtils,
Classes,
Forms,
aUnit1 in "aUnit1.pas" {MDIForm1}; // Там сидит обычная форма
Var Save : TApplication;
{$R *.RES}
procedure ClearMdiApp; stdcall;
begin
if Save<>Nil then
Application := Save
end;

function createMDIChild(app : tApplication):Tform; stdcall;
begin
if Save = Nil
then Save := Application;
Application:=app;
Result := TMDIform1.create(app);
end;

exports createMDIChild, ClearMdiApp;

begin
Save := Nil;
end.


Вот основной модуль:

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
NewMDI1: TMenuItem;
procedure NewMDI1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
function createMDIChild(app : tapplication):tForm; stdcall; external "mdi.dll";
procedure ClearMdiApp; stdcall; external "mdi.dll";
implementation

{$R *.DFM}

procedure TForm1.NewMDI1Click(Sender: TObject);
begin
CreateMDIChild(Application).FormStyle:=fsMDIChild;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ClearMdiApp;
end;

end.



alexts   (2002-03-20 17:20) [6]

чет не выходит. главное окно исчезает и все..делаю так:
等等

library spr;
{$R *.res}
uses
Forms,
SysUtils,
Classes,DBTables,
u_add_group in "u_add_group.pas" {add_group},
dm_tov in "Dm_tov.pas" {DM_Tovar: TDataModule},
main_tovar in "main_tovar.pas" {f_sprtov},
u_add_food in "u_add_food.pas" {add_food},
add_param in "add_param.pas" {f_hartov};

function spr_foods(App:TApplication;Scr:TScreen;DB:TDataBase):TForm;
begin
Application:=App;
Screen:=Scr;
DM_Tovar:=TDM_Tovar.Create(app);
DM_Tovar.Database1:=DB;
f_sprtov:=Tf_sprtov.Create(App);
Result:=f_sprtov;
end;

exports
spr_foods;
begin
end.


DLL调用

LAssort:=loadlibrary(PChar(spr_menundll.AsString));
if LAssort<>0 then
begin
@MyProc:=GetProcAddress(LAssort,PChar(spr_menunproc.AsString));
if @MyProc <> nil
then MyProc(Application,Screen,Intro.Database1)
else ShowMessage("



Alx2   (2002-03-20 17:24) [7]

На всякий случай: воткни sharemem на первом месте в dll-овский uses и uses основного модуля программы.



alexts   (2002-03-20 17:38) [8]

Всеравно тоже самое. Главная форма пропадает, но перед этим мерцает та форма которую вызываю?????????



Alx2   (2002-03-20 17:39) [9]

Странно. Где-то глюки....
У меня пример, который я написал, полностью работает. Попробуй на нем что-то поэкспериментировать.



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.04.01;
下载:[xml.tar.bz2];

楼上









内存:0.58 MB
时间:0.033 c
1-93
AHD
2002-03-19 11:31
2002.04.01
的Dimetra


1-177
色狼
2002-03-19 18:01
2002.04.01
获取已安装组件的列表


1-116
Sergy
2002-03-21 16:36
2002.04.01
字符串类型的长度


3-66
Malder
2002-03-08 14:37
2002.04.01
人,帮助。 这样的错误......我什么都不懂


3-26
赞歌
2002-03-05 13:28
2002.04.01
先生们,帮助您从Excel中读取数据





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский