phgcad 发表于 2004-8-25 16:48:00

打开2个ACAD,怎么分别在他们中插入块.

我做了一个标题栏插入的程序.运行后调用VB编的DLL文件,在ACAD中插入块.担当启动两个ACAD后,在后启动的ACAD中运行该命令,却把块插入到第一个ACAD中了.要怎么才能在激活的ACAD中插入块.我用的语句如下.set BlkRefrence = ActiveDocument.ModelSpace.InsertBlock(blkInsPnt, Text1.Text, tzbl, tzbl, 1#, 0)<BR>

mikewolf2k 发表于 2004-8-25 19:23:00

你的activedocument要指定cad窗口,连接cad时要注意

phgcad 发表于 2004-8-26 10:14:00

怎么指定呢?:有语句示例么?

mikewolf2k 发表于 2004-8-26 19:09:00

惭愧,对于两个同一版本的cad窗口,我也不会怎样指定某一窗口。

雪山飞狐_lzh 发表于 2004-8-27 00:14:00

调用Dll后把Thisdrawing传给对象

phgcad 发表于 2004-8-27 16:00:00

<A name=45760><FONT color=#990000><B>lzh741206</B></FONT></A>真是高人,谢谢。解决了。


同时也谢谢<A name=45390><FONT color=#000066><B>mikewolf2k</B></FONT></A>的热心帮助。原本以为我这个帖子没人回。没想到竟然得到了解决,我以后一定多上明经。

phgcad 发表于 2004-8-27 16:05:00

为了以后有疑问的人解决问题。我把调用的代码贴上。


'==========如下代码是在VBA中写的=====================


Dim thisdwg As Object                               '定义一个对象变量<BR>Set thisdwg = ThisDrawing '将ThisDrawing对象赋给它<BR>Set oMyApp = ThisDrawing.Application.GetInterfaceObject("Cadstar_DESK.desk")


vReturn = oMyApp.C_DESK_F1(thisdwg) '传递参数


'===============如下代码是在VB中定义的========================


'首先在一个VB的模块中定义一个公共变量,便于调用


Public thisdwg1 As Object<BR>


'然后在类模块中定义函数


Public Function C_DESK_F1(thisdwg As Object)<BR>Set thisdwg1 = thisdwg<BR>frm1.Show vbModal<BR>End Function


       


然后在整个VB中都可以调用THISDWG1代替ACTIVEDOCUMENT了:)

mikewolf2k 发表于 2004-8-27 19:19:00

不好意思,我还是没有看出来如何指定多个窗口的cad中的某一个。比如说三个cad文件,打开的文件分别是a.dwg,b.dwg,c.dwg,怎样才能指定打开b.dwg那个窗口?

my_computer 发表于 2004-8-30 15:13:00

其实楼主的方法是逆向的方法。并不是在程序的运行时检测,那个cad是运行的,而是在cad中使用命令时,将当前图形的thisdrawing作为一个参数传入dll文件的函数中,这样程序就知道是那个cad了。


这种方法有一点需要注意的,就是thisdrawing的转化问题。当然这种问题在你同时处理不同的图形时才会表现出来。


我一般在子程序的开始会加入一个函数


Public Function ChangeThisdrawing()<BR>Set Thisdrawing = Acadapp.ActiveDocument<BR>End Function


这样程序运行时,处理的总是当前激活的文档。
页: [1]
查看完整版本: 打开2个ACAD,怎么分别在他们中插入块.