http://hi.baidu.com/piaoliuxia/blog/item/d61e03faed3bd18c9f514670.html

查看文章
 
【原创】Delphi进行CAD二次开发教学(1)——基础学习:运行、新建、打开图形文件
2008-06-13 22:24

//用到了Rz控件,请自行安装,若没有可以到盒子下载,也可以不用此控件,但代码要相应修改。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj, AutoCAD_TLB, ComCtrls, RzLabel, ExtCtrls, ActiveX,
RzButton, ImgList, RzStatus, RzPanel, ActnList, Mask, RzEdit, RzBorder;

type
TForm1 = class(TForm)
    Timer1: TTimer;
    RzToolbar1: TRzToolbar;
    RzStatusBar1: TRzStatusBar;
    RzStatusPane1: TRzStatusPane;
    RzClockStatus1: TRzClockStatus;
    ImageList1: TImageList;
    BtnSendtoBack: TRzToolButton;
    BtnNew: TRzToolButton;
    BtnOpen: TRzToolButton;
    BtnSave: TRzToolButton;
    ActionList1: TActionList;
    Act_CadApp: TAction;
    Act_NewDrawing: TAction;
    Act_OpenDrawing: TAction;
    Act_SaveDrawing: TAction;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    RzGlyphStatus1: TRzGlyphStatus;
    Act_ZoomAll: TAction;
    Act_ZoomWindow: TAction;
    Act_ZoomPrevious: TAction;
    Act_ZoomExtents: TAction;
    procedure Timer1Timer(Sender: TObject);
    procedure Act_CadAppExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Act_NewDrawingExecute(Sender: TObject);
    procedure Act_OpenDrawingExecute(Sender: TObject);
    procedure Act_SaveDrawingExecute(Sender: TObject);
    procedure Act_ZoomAllExecute(Sender: TObject);
    procedure Act_ZoomPreviousExecute(Sender: TObject);
    procedure Act_ZoomExtentsExecute(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;
Cad, ActDrawing: OleVariant;
BlockSet: Olevariant;
Tip: string;
implementation

{$R *.dfm}

//判断应用程序是否在运行

function IsObjectActive(ClassName: string): Boolean;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
try
    ClassID := ProgIDToClassID(ClassName);
    Result := GetActiveObject(ClassID, nil, Unknown) = S_OK;
except
    Result := False;
end;
end;

//判断CAD应用程序是否在运行

procedure GetCADapp();
begin
if IsObjectActive('AutoCAD.Application') then
begin
    Cad := GetActiveOleObject('AutoCAD.Application');
    Form1.RzGlyphStatus1.ImageIndex := 14;
end
else
begin
    Tip := 'AutoCAD没有运行!';
    cad := null;
    Form1.RzGlyphStatus1.ImageIndex := 12;
end;
end;

//打开新的CAD应用程序

function OpenCadapp(): boolean;
begin
try
    cad := createOleObject('AutoCAD.Application');
    result := true;
except
    cad := null;
    MessageBox(0, '系统没有安装AutoCAD,或者AutoCAD版本不适合,请检查!' + #13 +
      #10 + '(需要AutoCAD2004或AutoCAD2005)', '错误提示', MB_ICONERROR or
      MB_OK);
    result := false;
end;
end;

//获取当前的图纸文档

procedure GetActDrawing();
var
SS: string;
begin
try
    ActDrawing := cad.activedocument;
    SS := ActDrawing.fullname;
    if SS = '' then
      Tip := '当前文档:未保存,请尽快保存!'
    else
      Tip := '当前文档:' + SS;
except
    ActDrawing := null;
    Tip := '当前文档:无';
end;
end;

//打开已有的图形文件

function OpenDrawing(Drawing, Password: string): boolean;
begin
try
    ActDrawing := cad.documents.open(Drawing, false, Password);
    Tip := '当前文档:' + ActDrawing.fullname;
    result := true;
except
    ActDrawing := null;
    Tip := '打开图形文档失败!';
    result := false;
end;
end;
//新建图形文档

function NewDrawing(): boolean; //打开已有的图形文件
begin
try
    ActDrawing := cad.documents.add();
    //ActDrawing.saveas('c:/Drawing_Temp.dwg');
    Tip := '当前文档:未保存';
    result := true;
except
    ActDrawing := null;
    result := false;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetCADapp;
GetActDrawing;
RzStatusPane1.Caption := Tip;
end;

procedure TForm1.Act_CadAppExecute(Sender: TObject);
begin
if (vartype(Cad) = varnull) or (Vartype(cad) = varEmpty) then
begin
    if not OpenCadapp then
    begin
      Tip := '系统没有安装AutoCAD,或者AutoCAD版本不适合,请检查确认!';
      exit;
    end;
end
else
begin
    MessageBox(0, 'AutoCAD已经在运行了!', '提示:', MB_ICONINFORMATION or
      MB_OK);
    exit;
end;

cad.WindowState := $00000003;
//最大化 (acmax--$00000003,acmin--$00000002,acnorm--$00000001)
cad.Visible := true; //设置为可视

GetActDrawing; //获取当前活动图形文档

if vartype(ActDrawing) = varnull then

if (MessageBox(0, '当前没有打开的图形文件!' + #13 + #10 +
      '要现在就新建一个吗?', '提示:', MB_ICONEXCLAMATION or MB_YESNO) = idYes)
        then
      NewDrawing()
    else
    begin
      Tip := '当前没有打开的图形文件,请新建或者打开已有的图形文件!';
      exit;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
GetCadapp;
end;

procedure TForm1.Act_NewDrawingExecute(Sender: TObject);
begin
if (vartype(Cad) = varnull) or (Vartype(cad) = varEmpty) then
    MessageBox(0, '请先运行AutoCAD程序!', '警告:', MB_ICONWARNING or MB_OK)
else
    NewDrawing;
end;

procedure TForm1.Act_OpenDrawingExecute(Sender: TObject);
begin
if (vartype(Cad) = varnull) or (Vartype(cad) = varEmpty) then
    MessageBox(0, '请先运行AutoCAD程序!', '警告:', MB_ICONWARNING or MB_OK)
else
begin
    if OpenDialog1.Execute then
      OpenDrawing(OpenDialog1.FileName, '');
end;
end;

procedure TForm1.Act_SaveDrawingExecute(Sender: TObject);
begin
if (vartype(ActDrawing) = varnull) or (Vartype(ActDrawing) = varEmpty) then
begin
    MessageBox(0, '没有活动的图形文档!', '警告:', MB_ICONWARNING or MB_OK);
    exit;
end
else
begin
    if Savedialog1.Execute then
      ActDrawing.saveas(Savedialog1.FileName);
end;
end;

procedure TForm1.Act_ZoomAllExecute(Sender: TObject);
begin
Cad.zoomall;
end;

procedure TForm1.Act_ZoomPreviousExecute(Sender: TObject);
begin
Cad.ZoomPrevious;
end;

procedure TForm1.Act_ZoomExtentsExecute(Sender: TObject);
begin
Cad.ZoomExtents;
end;

end.

Delphi进行CAD二次开发教学(1)——基础学习:运行、新建、打开图形文件相关推荐

  1. CAD二次开发——通过Ribbon界面来运行程序

    public class Class1{/// <summary>/// 创建面板/// </summary>[CommandMethod("RibbionDemo& ...

  2. C# Cad二次开发新手入门系列教程(一)开发环境搭建

    目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...

  3. c#CAD二次开发全套视频目录

    本人非专业编程人员,设计院画图民工一名.自学CAD编程,也写了一些小程序!初期学习lisp编程语言,基本了解CAD各中开发模块,写过一些程序!前段时间自学C#CAD二次开发,遍布网上无教学视频.经过自 ...

  4. CAD二次开发技术 好辛苦啊!

    CAD二次开发技术 好辛苦啊! 2011年03月16日 [b]摘[/b][b][/b][b]要[/b][b][/b] 数据结构算法设计和演示(C++)-树和查找是在面向对象思想和技术的指导下,采用面向 ...

  5. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

  6. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题

    CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...

  7. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

  8. CAD 二次开发 图层操作(3)取得指定图层下的所有对象id

    对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作.下面的方法,即可实现获取指定图层名称下的所有实体ID. 输入参数为图层名称: 返回值为:对象主键集合 ...

  9. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

最新文章

  1. CountDownLatch、CyclicBarrier、Semaphore的区别,你知道吗?
  2. Android中贝塞尔曲线的绘制方法
  3. 帮助别人是一种快乐!
  4. js 利用事件委托解决mousedown中的click
  5. Python入门基础--雨敲窗视频系列
  6. LINUX下安装软件方法命令方法
  7. python的多线程应用前景_什么是线程(多线程),Python多线程的好处
  8. 安装oracle时的x问题
  9. 【数学、dp】bigcoin 2013广东省赛E题
  10. 2018深度学习十大趋势:元学习成新SGD,多数硬件创企将失败
  11. 玩转Excel系列-SUMIF函数实例教程
  12. 解决VMware卸载后再安装出现的问题
  13. Centos7远程桌面win7
  14. CFSSL: 证书管理工具:6:理解证书文件内容
  15. 互联网和大数据是什么意思_什么是互联网大数据?
  16. 大话 Python:python 操作 excel 系列 -- 数据的提取与筛选
  17. office project如何制定项目计划
  18. 国内软件加密锁产品评测
  19. Linux Nginx版本升级方案
  20. 如何做一个基于微信共享充电桩小程序系统毕业设计毕设作品

热门文章

  1. iwebshop index.php,安全登录iwebshop管理员后台修改管理员后台登录路径
  2. 微PE工具箱v2.1官方测试版
  3. java:大数处理之超级计算器
  4. 【微信小程序】:重磅更新,搞事情啊
  5. OpenCV中parallel_for 和 parallel_for_学习笔记
  6. 给学生补充的markdown 编辑器
  7. 经典网络结构 (六):DenseNet (Densely Connected Networks 稠密连接网络)
  8. 凯勒姆机器人系统_苏州凯勒姆机器人系统工程有限公司
  9. App性能测试Case
  10. 跨域请求携带cookie