明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5584|回复: 21

使用delphi开发AutoCAD的入门级问题(整理添加中)

  [复制链接]
发表于 2004-12-25 10:27:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2004-12-25 21:50:00 编辑

用Delphi开发AutoCAD的人很少,资料也很难找,我集中开个帖子,望高手不吝赐教,以惠后来人。以下未特殊说明均指Delphi7+AutoCAD2004中文版 1、引入AutoCAD类型库的目的是什么?
2、引入AutoCAD类型库的正确步骤是什么?
(1)对于AutoCAD2004中文版,project->import type library,初始情况下AutoCAD类型库并不在列表内,需要add的文件是不是 "C:\Program Files\Common Files\Autodesk Shared\acax16chs.tlb"?
(2)add后列表内高亮出现AutoCAD 2004类型库(Version 1.1),选install还是create unit?
(3)如果选install,弹出package dclusr窗口,是否compile?
(4)引入类型库是否只需进行一次,以后新建Application时只要uses AutoCAD_tlb就行了?
发表于 2004-12-25 21:11:00 | 显示全部楼层
1、目的是可以前期绑定变量,如果不是的话,就要把cad应用程序变量定义为变体类型,那在编程的时候就没有帮助提示了!


2、只要看到cad类型库就行了,两个都可以,选install是安装包文件,选create unti是将cad类型库存盘为delphi单元文件.pas,以后在uses语句中引用这个文件就可以用cad的类型了,例如:var app:acadapplication; app.        输入点号后就有帮助提示了,跟vb一样的!
 楼主| 发表于 2004-12-25 22:37:00 | 显示全部楼层
本帖最后由 作者 于 2004-12-28 9:44:40 编辑

下面为一个最基本的范例,可以运行,但有不少问题,请赐教 unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,AutoCAD_TLB,ComObj; //除了缺省的,引用了AutoCAD_TLB和ComObj type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
Acad, vPoint: OleVariant;
Mspace : IAcadModelSpace; //1、对象类型为何比VBA的多出一个"I"?统统以此类推?
Circle : IAcadCircle;
begin
try
acad:=getActiveOleObject('AutoCAD.Application.16');
except
acad:=CreateOleObject('AutoCAD.Application.16'); //2、如果AutoCAD未运行的话会出错,提示如下图,为什么这个语句并没有起作用?
end;
vPoint := VarArrayCreate([0,2], VarDouble ); //3、原例VarDouble为VT_R8,编译通不过,VT_R8在哪定义的?
vPoint[0] := 2.0; vPoint[1] := 4.0; vPoint[2] := 0.0;
acad.visible:=True; //4、为什么没有象希望的将AutoCAD窗口提到最前面?
Mspace := IDispatch(Acad.ActiveDocument.ModelSpace) as IAcadModelspace;
Circle := IDispatch(Mspace.AddCircle(vPoint, 10.0)) as IAcadCircle;
Circle.Update;
end; end.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2004-12-27 16:29:00 | 显示全部楼层
1、第一个问题不好意思,我还是刚开始学CAD二次开发,对CAD的类型不太了解!


2、你的except语句少了一个冒号啊,不知道是不是这个原因!


3、你是想定义一个数组吧?为什么不一开始用array [0..2] of double         来声明呢?


4、你说你编译通不过,怎么可以往下执行呢?


我回去再看看!我还没用DELPHI连接过CAD呢!让我试试看!最近忙得不可开交,我画图画疯啦,晕!
 楼主| 发表于 2004-12-28 07:34:00 | 显示全部楼层
laoliu09真乃热心人!



找了本深入一点的delphi书,好多问题涉及com矫妫局饰侍馐俏业膁elphi水平不够。


1、查看AutoCAD_TLB会明白不少


2、还不懂


3、如果要使用VT_R8,应当uses ActiveX


4、最痛苦的是这个问题解决不了。


另外说一句,上述代码完全实现了有关AutoCAD对象的代码提示。


发表于 2004-12-28 08:32:00 | 显示全部楼层
不好意思,我记错了,except后面没有冒号,你是在调试阶段运行你的程序的吧?那发生错误的时候是会这样提示的,只要按F9就可以退出程序了,我也试过的!当你的程序正确,直接运行.exe文件时就不会出现这个问题了!!!


另外,希望你连接成功CAD的时候把连接的方法告诉我,我的水平也有限啊!


我有时间就试试看!最近实在太忙啦!呵呵!

 楼主| 发表于 2004-12-28 10:09:00 | 显示全部楼层
验证了一下,问题2的确只有在调试期间才会出现,不知为什么。



问题4是这样的:如果通过本程序启动AutoCAD,可以实现CAD窗口在最上方,但是如果之前AutoCAD已经运行起来了,如何能够将CAD窗口置前呢?


说明一下,贴出的代码已经实现了与AutoCAD的连接和设计期间代码提示,应该没有什么错误,只是有一些我不太理解的问题而已。
 楼主| 发表于 2004-12-28 11:04:00 | 显示全部楼层
迄今为止最为规范,最为完美的Delphi连接AutoCAD样板代码(by lazybones): unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj, AutoCAD_TLB; type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
acad:AcadApplication;
line:Acadline;
vpoint1,vpoint2:OleVariant;
begin
try
acad:=GetActiveOleObject('AutoCAD.Application.16') as AcadApplication;
except
acad:=CreateOleObject('AutoCAD.Application.16') as AcadApplication;
end;
vpoint1:=varArrayCreate([0,2],varDouble);
vpoint2:=varArrayCreate([0,2],varDouble);
vpoint1[0]:=100.0; vpoint1[1]:=100.0; vpoint1[2]:=0.0;
vpoint2[0]:=0.0; vpoint2[1]:=0.0; vpoint2[2]:=0.0;
acad.Visible:=True;
line:=acad.ActiveDocument.ModelSpace.Addline(vpoint1,vpoint2);
line.Update;
end; end.
 楼主| 发表于 2004-12-28 15:04:00 | 显示全部楼层
以上代码虽短,但因为涉及COM等高级编程内容,实际还是蛮复杂的。


在此基础上可以开始进一步的编程了,有关AutoCAD ActiveX Automation对象体系结构,各种对象的属性、方法、事件参见C:\Program Files\Common Files\Autodesk Shared\CHS\acadauto.chm,具体使用上与VBA应当没有太大差别。

发表于 2004-12-28 16:19:00 | 显示全部楼层
支持!支持!以后还有好主意的话,可要拿来分享啊!


我爱编程!共同提高吧!


呵呵!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 20:22 , Processed in 0.184540 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表