找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 764|回复: 2

[VBA程序]:delphi与objectDbx

[复制链接]
发表于 2005-8-18 16:21:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
//网上用VBA VB C#都可以用ObjectDbx对未打开的dwg文件进行二次开发,但我用delphi却一直搞不定。我都快失去信心了。请熟悉delphi和ObjectDbx的朋友出招,帮兄弟一把。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ComObj, AXDB15LIB_TLB, StdCtrls; //引用了ComObj和AXDB15LIB_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
  ObjDbx:AxDBdocument;
begin
  try   
    ObjDbx:=GetActiveOleObject('objectdbx.Axdbdocument') AS AxDBDocument;  
  except
    ObjDbx:=CreateOleObject('objectdbx.AxDbdocument') AS AxDBDocument;//这一句报错,提示“无效的类别字符串“
    //ObjDbx:=CreateOleObject('objectdbx.AxDbdocument.1') AS AxDBDocument;
  end;
  ObjDBx.Open ('d:/123.dwg'); //d:/123.dwg可用acad打开
end;
end.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-8-19 13:57:03 | 显示全部楼层
我觉得,你应该看一下你引用的类的源码,看delhi里是怎么定义的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-21 09:10:46 | 显示全部楼层
最初由 yansike 发布
[B]我觉得,你应该看一下你引用的类的源码,看delhi里是怎么定义的 [/B]


这是我引用的AXDb15lib_TLB.pas的源码,可我不知道怎样正确地建立对象。AXDB15lib_TLB.Pas的源码在上传的附件里,哪位知道的朋友帮帮忙。用delphi 连接autocad我会了,如果能正确使用AXDB15lib_TLB.Pas里的对象的方法与属性,那么在不打开autocad 的情况下也能用delphi访问dwg 文件里的各种实体。

在VBA里在不打开DWG文件的情况下,提取该文件里块的属性,
Sub ttw()
    Dim objDbx As AxDbDocument
    Dim i As AcadEntity
    Set objDbx = GetInterfaceObject("ObjectDBX.AxDbDocument")
    objDbx.Open "c:\\1.dwg"
    For Each i In objDbx.ModelSpace
        If i.ObjectName = "AcDbBlockReference" Then
            If i.HasAttributes Then
                For Each j In i.GetAttributes
                    MsgBox j.TextString
                Next j
            End If
        End If
    Next i
End Sub



由 zhf7878 于 2004年01月13日 07:11 发表:
[原创]:在C#中使用ObjectDBX技术从未打开图形中获得图块的信息

在C#中使用ObjectDBX技术从未打开图形中获得图块的信息
C#才鸟(QQ:249178521)
从未打开图形中能获得图块的信息吗?回答是肯定的。下面就来说明具体的实现方法。
要求:
 会用C#编程
 读过我写的“利用C#进行AutoCAD的二次开发“(在晓东空间中有)
开始:
 在visual studio.net中新建一C#控制台程序
 在引用选项卡中添加下列类库:
 interop.AutoCAD.dll
 AcadExample.dll
 ObjectDBX16(在“解决方案资源管理器”中右击“引用”标签,在弹出的菜单中选择“添加引用”,在“添加引用”对话框中选择“com"选项卡下的下拉列表框中的“AutoCAD/ObjectDBX Common 16.0 Type Library"项)
然后键入以下代码:
1: using System;
2: using AutoCAD;
3: using dbx = AXDBLib;
4: using AcadExample;
5:
6: namespace ConsoleApplication1
7: {
8: ///
9: /// Summary description for Class1.
10: ///
11: class Class1
12: {
13: ///
14: /// The main entry point for the application.
15: ///
16: [STAThread]
17: static void Main(string[] args)
18: {
19: using (AutoCADConnector connector = new AutoCADConnector())
20: {
21: string progid = "ObjectDBX.AxDbDocument.16"//注意,这是AutoCAD2004的写法,
// 若是AutoCAD2002和AutoCAD2000i则是”ObjectDBX.AxDbDocument.1“
22: AcadApplication acadApp = connector.Application;
23: dbx.AxDbDocument dbxDoc;
24: dbxDoc = (dbx.AxDbDocument)acadApp.GetInterfaceObject(progid);
25: dbxDoc.Open(@"F:\Test.dwg");
26: foreach (dbx.AcadEntity entity in dbxDoc.ModelSpace)
27: {
28: if (entity.EntityName == "AcDbBlockReference")//判断实体是否是块参照
29: {
30: dbx.AcadBlockReference blkRef;
31: blkRef = (dbx.AcadBlockReference)entity; //将是块参照的实体强制转换为块参照类型
32: object[] atts = (object[])blkRef.GetAttributes();//获取块参照中的属性(为对象类型)
33: for (int i = 0; i < atts.Length; i++) //遍历块参照属性
34: {
35: dbx.AcadAttributeReference att;
36: att = (dbx.AcadAttributeReference)atts;//将块参照属性(对象类型)强制转换为块参照属性类型
37: Console.WriteLine("Tag: {0}\tValue: {1}\n",
38: att.TagString,
39: att.TextString);//显示块参照属性的Tag和Text的值
40: }
41: }
4
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-25 03:33 , Processed in 0.397300 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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