救急!已知OleVariant对象的事件,如何动态的将某过程指定为该事件 ( 积分: 100 )

  • 主题发起人 主题发起人 emoth
  • 开始时间 开始时间
E

emoth

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟我在开发一个CAD程序时,想让用户在关闭CAD时在开发的程序中给予一个提示,即在

程序的CAD的关闭事件中显示一个对话框。由于该CAD程序对象是动态建立的,因此需要在

建立该CAD对象的时候手动地将某段过程指定为CAD对象的关闭事件。我的程序代码如下,

能通过编译,只是在运行时执行到★行时系统就会提示Automation对象不支持该事件?请

教各位大侠,如何动态的将某过程指定为该事件呢,谢谢,在线等待!

procedure TfrmMain.AcadDocument1BeginClose(Sender: TObject);
{ TODO : 当CAD关闭时有此事件 }
begin
msg('AutoCAD已关闭!');
StatusBar1.Panels[0].Text:='未链接';
end;

procedure TfrmMain.mnuLinkCADClick(Sender: TObject);
{ TODO : 连接CAD }
var
AcadApp:OleVariant;
begin
try
AcadApp:=GetActiveOleObject('AutoCAD.Application');
AcadDocument1:=Acadapp.ActiveDocument;
  //★以下一行即动态的为一个OLE自动化变量指定一个事件程序,但是运行时却通不过
AcadDocument1.OnBeginClose:=AcadDocument1BeginClose(Sender as TObject);

msg('链接 AutoCAD 成功!版本:'+
AcadApp.Version+#13+#13+
'当前图形文件:'+#13+#13+AcadApp.ActiveDocument.FullName,'I');

StatusBar1.Panels[0].Text:='已链接至AutoCAD '+AcadApp.Version;
except
StatusBar1.Panels[0].Text:='未链接';
end;
end;
 
小弟我在开发一个CAD程序时,想让用户在关闭CAD时在开发的程序中给予一个提示,即在

程序的CAD的关闭事件中显示一个对话框。由于该CAD程序对象是动态建立的,因此需要在

建立该CAD对象的时候手动地将某段过程指定为CAD对象的关闭事件。我的程序代码如下,

能通过编译,只是在运行时执行到★行时系统就会提示Automation对象不支持该事件?请

教各位大侠,如何动态的将某过程指定为该事件呢,谢谢,在线等待!

procedure TfrmMain.AcadDocument1BeginClose(Sender: TObject);
{ TODO : 当CAD关闭时有此事件 }
begin
msg('AutoCAD已关闭!');
StatusBar1.Panels[0].Text:='未链接';
end;

procedure TfrmMain.mnuLinkCADClick(Sender: TObject);
{ TODO : 连接CAD }
var
AcadApp:OleVariant;
begin
try
AcadApp:=GetActiveOleObject('AutoCAD.Application');
AcadDocument1:=Acadapp.ActiveDocument;
  //★以下一行即动态的为一个OLE自动化变量指定一个事件程序,但是运行时却通不过
AcadDocument1.OnBeginClose:=AcadDocument1BeginClose(Sender as TObject);

msg('链接 AutoCAD 成功!版本:'+
AcadApp.Version+#13+#13+
'当前图形文件:'+#13+#13+AcadApp.ActiveDocument.FullName,'I');

StatusBar1.Panels[0].Text:='已链接至AutoCAD '+AcadApp.Version;
except
StatusBar1.Panels[0].Text:='未链接';
end;
end;
 
小弟我在开发一个CAD程序时,想让用户在关闭CAD时在开发的程序中给予一个提示,即在程序的CAD的关闭事件中显示一个对话框。由于该CAD程序对象是动态建立的,因此需要在建立该CAD对象的时候手动地将某段过程指定为CAD对象的关闭事件。我的程序代码如下,能通过编译,只是在运行时执行到★行时系统就会提示Automation对象不支持该事件?请教各位大侠,如何动态的将某过程指定为该事件呢,谢谢,在线等待!

procedure TfrmMain.AcadDocument1BeginClose(Sender: TObject);
{ TODO : 当CAD关闭时有此事件 }
begin
msg('AutoCAD已关闭!');
StatusBar1.Panels[0].Text:='未链接';
end;

procedure TfrmMain.mnuLinkCADClick(Sender: TObject);
{ TODO : 连接CAD }
var
AcadApp:OleVariant;
begin
try
AcadApp:=GetActiveOleObject('AutoCAD.Application');
AcadDocument1:=Acadapp.ActiveDocument;
  //★以下一行即动态的为一个OLE自动化变量指定一个事件程序,但是运行时却通不过
AcadDocument1.OnBeginClose:=AcadDocument1BeginClose(Sender as TObject);

msg('链接 AutoCAD 成功!版本:'+
AcadApp.Version+#13+#13+
'当前图形文件:'+#13+#13+AcadApp.ActiveDocument.FullName,'I');

StatusBar1.Panels[0].Text:='已链接至AutoCAD '+AcadApp.Version;
except
StatusBar1.Panels[0].Text:='未链接';
end;
end;

相同帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2988831
 
AcadDocument1.OnBeginClose:=AcadDocument1BeginClose(Sender as TObject);
这已经是不对的了,
应该这样的 AcadDocument1.OnBeginClose:=AcadDocument1BeginClose;
AcadDocument1 是什么类型, 你导入 acad 的typelib 看看有没有相似的接口。

究竟有没有 AcadDocument1.OnBeginClose ?
 
AcadDocument1.OnBeginClose:=AcadDocument1BeginClose(Sender as TObject);
这已经是不对的了,
应该这样的 AcadDocument1.OnBeginClose:=AcadDocument1BeginClose;
AcadDocument1 是什么类型, 你导入 acad 的typelib 看看有没有相似的接口。

究竟有没有 AcadDocument1.OnBeginClose ?
 
抱歉,插一个问题
delphi+Autocad引用类型库之后,SelectOnScreen到底能不能省略[FilterType][, FilterData]这两个可选参数呀?假如不幸的是真的不能省略,设成什么值才能不影响选择结果呢?这个问题困扰我一个多月了,甚至考虑放弃delphi改用VBA了,痛苦啊,痛苦!
beiyang3895427@sohu.com
 
楼上的xuxiaohan同学
你说的AcadDocument1.OnBeginClose:=AcadDocument1BeginClose;根本无法通过编译
提示如下:
[Error] UnitMain.pas(909): Not enough actual parameters
 
AcadDocument1BeginClose 是 TNotifyEvent, AcadDocument1.OnBeginClose 是什么类型?
事件 assigned 是不需要任何参数的。

 
com事件入门
http://delphibbs.com/delphibbs/dispq.asp?lid=1479908
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部