一个关于ActiveX Automation的初级问题,当然是送分题了.(50分)

  • 主题发起人 主题发起人 FlyingEagle
  • 开始时间 开始时间
F

FlyingEagle

Unregistered / Unconfirmed
GUEST, unregistred user!
可否通俗讲讲什么是ActiveX Automation,如何使用,例如
AutoCAD提供了ActiveX接口,怎么用Delphi操作,可举一个
简单例子,为什么在AutoCAD的安装说明中要求与Delphi的
安装要有次序之分.谢谢
 
ActiveX Automatio即为Ole Automation,是微软在其操作系统上实现的,
用于应用程序之间通信的一种方法。Ole Automation可以分为两部分,
一部分是服务器,一部分为客户。服务器可以是dll或者exe,而客户只能是
exe,服务器通过声明接口来提供服务,接口是包含一系列方法和属性的一种
抽象类。在Windows操作系统中,接口被注册在注册表中,并有一个唯一的
uuid与之对应,客户如果知道了这个uuid就可以向服务器请求通过这个接口
来进行对话。
AutoCAD提供了接口就一定提供了描述这个接口的一个文件,其扩展名为tlb,
在delphi中我们可以这样使用这个文件,在project菜单中选择import
type library,来引入这个tlb,delphi会建立一个unit来描述这个接口,
这样我们就相当于在工程中声明了一个新的类,而这个类的实现则不用我们
去考虑,它由AutoCAD负责。我们只要知道怎样使用它。
由于我的机器上没有安装AutoCAD,所以无法为你做一个实例,但几天后我可以
考虑。
 
在有关AutoCAD二次开发的一本书中,讲到ActiveX的基本对象为Application,又是
为何,如何简单的利用Delphi在AutoCAD中画一条线(Line),请举一个简单的例子,或将步骤简要描述以下.Thanks.
 
LC 讲得很好,我来讲讲实用法门
可将AutoCad看作一个类,Application是一个基本类,Preferences 和Documenu是子类然后其它。。。
建立一个Auto Automation:
CreatOleObject('autocad.application');
请看一个完整的代码例子:

type
AcadPoint = record
X: double;
Y: double;
Z: double;
end;

implementation

uses ActiveX,ComObj,AutoCad_Tlb;

procedure InitAcad;
begin
result:=true;
try
acad := GetActiveOleObject('AutoCAD.Application');//get acad instance
except
on EOleSysError do
acad := CreateOleObject('AutoCAD.Application'); //create a new instance
end;
Acad.visible:= True; //show acad
Doc := Acad.ActiveDocument; //current drawing document
Mspace := Doc.ModelSpace; //module space
end;

建立连接之后,就可进行各种控制了
比如画线可用 Acad.ModelSpace.addline(point1,point2)
Document是一个重要的对象,它代表AutoCad的图形,如图层,块,线型,标注类型等都有各自对应的对象。
我们画图时分图纸空间(PaperSpace)和模型空间(ModelSpace)
要在程序中控制画图,必需区分这两个,很多方法,如画线Addline,画圆AddCircle
ModelSpace和PaperSpace都有这个方法,
所以要这样写:auto.ModelSpace.addline(...),至于两者的区别与我们在画图(在AutoCad里面,line,circle)时的区别一样
Autocad有一个很详细的帮助,ActiveX Automation->Automation Reference->Object Model(先看看这里)

用DELPHI控制AutoCad是一个很偏门的问题,一般来说,小的程序可用autoLisp来解决
大的专业开发,以前(DOS时代)是用ADS,之后又转为ARX(Object ARX),
R14提出了用ActiveX Automation,不过它是为VB准备的,当然VB可以的,DElphi为什么不可以?
不过用起来总有点格格不入的样子,我试过几个例子,很辛苦(调程序时)
DFW里高手林立,不知有无此中高人(Autocad二次开发),因为工作关系,很关心这方面的问题。
又:飞英,你是做哪行的,经常用Autocad吗?我是从事建筑设计行业的。欢迎来信交流。
 
很高兴看到lczhuozhuo及liuliang给予如此详细的解答。非常感谢。
 
多人接受答案了。
 

Similar threads

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