找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 835|回复: 9

[VBA程序]:acad r14 vba

[复制链接]
发表于 2003-5-16 10:56:50 | 显示全部楼层 |阅读模式

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

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

×
r14的vba中没有sendcommand这个命令
不知道大家是如何解决vba中调用lisp命令的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-17 15:36:14 | 显示全部楼层
这是使用API函数来实现SendCommand功能的。

  1.   [FONT=courier new]
  2. Option Explicit
  3. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd
  4. As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  5. Declare Function GetForegroundWindow Lib "user32" () As Long
  6. Public Const WM_COPYDATA = &H4A
  7. Type COPYDATASTRUCTURE
  8.   dwData As Long
  9.   cbData As Long
  10.   lpData As String
  11. End Type
  12. Dim datas As COPYDATASTRUCTURE
  13. Public Sub SendCommand(ACadCommand As String)
  14. datas.dwData = 1
  15. datas.lpData = ACadCommand & vbCr
  16. datas.cbData = Len(ACadCommand) + 2
  17. AppActivate ThisDrawing.Application.Caption
  18. SendMessage GetForegroundWindow, WM_COPYDATA, 0, datas
  19. End Sub

  20. '调用方法示例
  21. Private Sub UserForm_Click()
  22. Me.hide
  23. Call SendCommand("Insert")
  24. Me.Show
  25. End Sub

  26.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-18 00:30:36 | 显示全部楼层
无效呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-18 10:37:10 | 显示全部楼层
你是如何调用的,将程序贴出来查明一下原因。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-18 23:42:26 | 显示全部楼层
Private Sub DwgThumbnail1_DblClick()
Dim lispcommands As String
lisp = "insert " & DwgThumbnail1.DwgFileName
浏览窗体.Hide
SendCommand (lisp)
浏览窗体.Show
End Sub

屏幕一闪,acad没有任何变化,就回到窗体了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-19 20:22:12 | 显示全部楼层
一、要把这一句AppActivate ThisDrawing.Application.Caption[/COLOR] 改成AppActivate acadApp.Caption,其中acadApp代表Application对象。当然也可以放到SendCommand过程的外面,如

  1.   [FONT=courier new]
  2. AppActivate acadApp.Caption
  3. SendCommand (lisp)
  4.   [/FONT]
复制代码

只有将AutoCAD窗口激活了才能使用SendCommand。
二、lisp = "insert " & DwgThumbnail1.DwgFileName,如果不显示块插入对话框,那么在Insert之前应加上一个“-”。如:lisp = "-INSERT " & DwgThumbnail1.DwgFileName。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-19 23:09:41 | 显示全部楼层
一、在r14 中,thisdrawing 特别不能取消!我用sendcommand肯定是激活了acad的窗口的。
二、vba中使用lisp,我就是需要insert的动态拖动

下面的程序是mjtd提供的,我修改了一下,可能在r14下正常运行,但是还是不能支持insert动态显示后,再返回vba


Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const WM_COPYDATA = &H4A
  Type COPYDATASTRUCTURE
    dwData As Long
    cbData As Long
    lpData As String
  End Type

Public Sub SendCommand(CommandString As String)
    Dim udtData As COPYDATASTRUCTURE
    Dim lngHwnd As Long
    udtData.dwData = 1
    udtData.lpData = CommandString
    udtData.cbData = LenB(CommandString) + 2
    lngHwnd = FindWindow(vbNullString, ThisDrawing.Application.Caption)
    SendMessage lngHwnd, WM_COPYDATA, 0, udtData
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-20 12:54:11 | 显示全部楼层
可能你对“-”的用法还有点误解,AutoCAD的说明是这样:When you prefix certain commands with a minus sign (-), the AutoCAD® software does not display dialog boxes for the duration of that command. The next time you run the command without using the minus sign (-) prefix, AutoCAD displays dialog boxes as normal.。意思是说当前命令之前如果带负号,比如-bhatch,表示AutoCAD在运行命令期间不显示对话框。如果下次运行此命令,但不带负号,那么就如正常时显示对话框。
因而,在调用这句之后SendCommand "-insert " & DwgThumbnail1.DwgFileName,将直接显示动态拖动的效果。
如果在VB中将thisdrawing 声明为文档对象,那么它的用法就没有错误,但是在VB中,一般声明了一个Application的对象,比如acadApp,那么这句lngHwnd = FindWindow(vbNullString, ThisDrawing.Application.Caption)就可以简写为:lngHwnd = FindWindow(vbNullString, acadApp.Caption)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-21 03:03:24 | 显示全部楼层
感谢你的答复,其实我不是想讨论关于-&_的问题
我敢肯定你没有装r14&vba,有些时候理论和实际有差异,特别是office安装以后!照你的写法,在r14下肯定出错。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-21 21:09:04 | 显示全部楼层
我确实没有安装R14,是在R2000和R2004下试验的。如果是Office在AutoCAD之后安装的,那么要重新安装VBA,这样才避免VBA组件被Office的覆盖。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 12:27 , Processed in 0.375220 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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