efan2000
发表于 2003-10-9 13:47:00
现在的情况应该是AutoCAD的对象不能创建,可能安装了多个版本的ACAD。
该怎么办呢难哦
发表于 2003-10-9 13:55:00
以前装过14,2000,2002,2004。现在只保留了2000,可能注册表没有清干净。
遇到这种情况怎么办呢?
efan2000
发表于 2003-10-9 13:57:00
将AutoCAD.Application更改为AutoCAD.Application.15试试。如果不行,要清除注册表,重装ACAD了。
该怎么办呢难哦
发表于 2003-10-9 14:13:00
还是不行!呵呵,看来什么时候我给重装系统再看看。
Set a = CreateObject("AutoCAD.Application")将这句改为
Set a = GetObject(, "AutoCAD.Application.15")再先加载ACAD2000
终于看到效果了!!很好,谢谢efan2000。
myfreemind
发表于 2003-10-9 18:58:00
运行这个窗口吧,ef2000的代码一次就通过,没有问题的!
该怎么办呢难哦
发表于 2003-10-10 23:40:00
在窗体中显示的是autocad全界面,而且窗体不足够大,就不能全部包含autocad界面。可以令autocad界面能正好缩放在给定的窗体内吗?或者也能令autocad界面能出现在某个控件里吗(比如picture,image之类的控件)?
efan2000
发表于 2003-10-11 22:02:00
重新修改了一下,支持VB的窗体缩放时ACAD的窗口自动跟随缩放。
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private acadApp As Object
Private lHwnd As Long '保存ACAD应用程序的窗口句柄
Private lState As Long '保存ACAD的初始窗口状态
Private r As RECT '保存ACAD的初始窗口位置
Private Sub Form_Load()
On Error GoTo ErrTrap
Set acadApp = GetObject(, "AutoCAD.Application")
acadApp.Visible = True
lHwnd = GetParent(GetParent(acadApp.Activedocument.hwnd))
If lHwnd = 0 Then Exit Sub
lState = acadApp.WindowState
acadApp.WindowState = 1 '设置ACAD的窗口状态为默认,用于保存窗口位置。
GetWindowRect lHwnd, r
SetParent lHwnd, Form1.hwnd
Form1.ScaleMode = vbPixels '将VB窗体默认的缇单位改为以像素为单位。
SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth, Form1.ScaleHeight, 0
Exit Sub
ErrTrap:
On Error GoTo 0
End Sub
Private Sub Form_Resize()
SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth, Form1.ScaleHeight, 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
If lHwnd = 0 Then Exit Sub
SetParent lHwnd, 0
SetWindowPos lHwnd, 0, r.Left, r.Top, r.Right - r.Left, r.Bottom - r.Top, 0
acadApp.WindowState = lState
Set acadApp = Nothing
End Sub
该怎么办呢难哦
发表于 2003-10-12 09:55:00
efan真是高!!
API函数功能真的强大,这段代码对于想通过在VB窗体实现autocad编辑操作的朋友太有借鉴意义了!再次感谢efan斑竹!
iwzw
发表于 2003-10-12 13:42:00
呵呵,版主高明!更进一步了!
还有一个问题就是,vb的窗体不能用鼠标拖动放大和缩小。
efan2000
发表于 2003-10-12 14:27:00
本帖最后由 作者 于 2003-10-13 12:24:40 编辑
不是不能,由于将ACAD的窗口尺寸设置为VB窗体客户区的大小,因而两个窗口的右下角位置几乎是一样的,所以拖动的时候可能真正的是拖动ACAD的窗口。
这种情况可以将ACAD的窗口尺寸设置的小一些。比如:宽度Form1.ScaleWidth-5,高度Form1.ScaleHeight-5,这样就不会重叠了。
变更下面的一句:
SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth, Form1.ScaleHeight, 0
更改为:
SetWindowPos lHwnd, 0, Form1.ScaleLeft, Form1.ScaleTop, Form1.ScaleWidth-5, Form1.ScaleHeight-5, 0