明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 27622|回复: 47

请问:用getpoint操作时,怎样进行平移缩放及右键结束

    [复制链接]
发表于 2003-4-7 20:42 | 显示全部楼层 |阅读模式
本帖最后由 mccad 于 2003-4-7 20:42:27 编辑

我用getpoint操作时,用时要进行缩放,它就提示出错,请问用什么方法解决。
有时我要连续用getpoint取点,怎么才能让它判断我按了右键,要结束getpoint了
发表于 2003-4-7 20:43 | 显示全部楼层

如以下过程...

本帖最后由 作者 于 2006-2-12 14:23:45 编辑

  1. Sub GetPnt()
  2. On Error GoTo Err_Control
  3.     Dim Pnt1 As Variant
  4.     Dim Pnt2 As Variant
  5.     Dim line As AcadLine
  6.     Dim varCancel As Variant
  7.     Pnt1 = ThisDrawing.Utility.GetPoint(, vbCr & "选择第一点:")
  8.    
  9.     Do
  10.         Pnt2 = ThisDrawing.Utility.GetPoint(Pnt1, vbCr & "选择下一点:")
  11.         Set line = ThisDrawing.ModelSpace.AddLine(Pnt1, Pnt2)
  12.         Pnt1 = Pnt2
  13.     Loop
  14. Exit_Here:
  15.   Exit Sub
  16. Err_Control:
  17.   Select Case Err.Number
  18.     Case -2147352567
  19.     '按了取消键或其它透明命令
  20.       varCancel = ThisDrawing.GetVariable("LASTPROMPT")
  21.       If InStr(1, varCancel, "*Cancel*") <> 0 And InStr(1, varCancel, "*取消*") <> 0 Then
  22.         Err.Clear
  23.         Resume Exit_Here
  24.       Else
  25.         Err.Clear
  26.         Resume
  27.       End If
  28.     Case -2147467259
  29.     '右键单击或回车或空格
  30.       Err.Clear
  31.       Resume Exit_Here
  32.     Case Else
  33.       MsgBox Err.Number & Err.Description
  34.       Err.Clear
  35.       Resume Exit_Here
  36.   End Select
  37. End Sub
 楼主| 发表于 2003-4-11 21:06 | 显示全部楼层

谢谢

真不知道如何感激才好,谢谢版主,谢谢mjtd
发表于 2003-4-14 13:22 | 显示全部楼层

佩服

佩服,斑竹真是个高手,佩服
发表于 2003-4-16 11:29 | 显示全部楼层

版主,我认为你上面的过程中有一个错误!

If InStr(1, varCancel, "*Cancel*") <> 0 And InStr(1, varCancel, "*取消*") <> 0 Then

句中And 应为Or
发表于 2003-4-16 23:00 | 显示全部楼层

但如果这样的话就达不到目的了

发表于 2003-4-17 22:10 | 显示全部楼层

这是一个小问题!里面还有一个问题

取消命令和其他透明命令的错误码是-2147467259 而非-2147352567 ,上面的那段代码运行后按取消没有办法退出,空格可以~~
发表于 2003-4-18 19:24 | 显示全部楼层

现在只能用这个办法先,等水平高点再完善!

on error goto err
..
..
....
exit sub
err:
resume

然后在右键事件中写end
就可以达到基本的效果,唯一就是没有办法用ESC键结束程序运行,要改用右键!
发表于 2003-4-18 20:42 | 显示全部楼层

完整的版本如下(利用了API增加对ESC键的判断)

本帖最后由 mccad 于 2003-4-18 20:42:53 编辑

以下为程序部分:
  1. On Error GoTo Err_Control
  2.     Dim Pnt1 As Variant
  3.     Dim Pnt2 As Variant
  4.     Dim line As AcadLine
  5.     Dim varCancel As Variant
  6.     hHook = SetWindowsHookEx(WH_KEYBOARD, _
  7.                             AddressOf KeyboardProc, 0&, 0)
  8.     Pnt1 = ThisDrawing.Utility.GetPoint(, vbCr & "选择第一点:")
  9.    
  10.     Do
  11.         Pnt2 = ThisDrawing.Utility.GetPoint(Pnt1, vbCr & "选择下一点:")
  12.         Set line = ThisDrawing.ModelSpace.AddLine(Pnt1, Pnt2)
  13.         Pnt1 = Pnt2
  14.     Loop

  15. Exit_Here:
  16.   Call UnhookWindowsHookEx(hHook)
  17.   Exit Sub
  18. Err_Control:
  19.   Select Case Err.Number
  20.     Case -2147352567
  21.     '按了取消键或其它透明命令
  22.       If EscKey = True Then
  23.         Err.Clear
  24.         Resume Exit_Here
  25.       Else
  26.         Err.Clear
  27.         Resume
  28.       End If
  29.     Case -2147467259
  30.     '右键单击或回车或空格
  31.       Err.Clear
  32.       Resume Exit_Here
  33.     Case Else
  34.       MsgBox Err.Number & Err.Description
  35.       Err.Clear
  36.       Resume Exit_Here
  37.   End Select
  38. End Sub

以下为模块部分:
  1. Public Declare Function CallNextHookEx Lib "user32" _
  2.    (ByVal hHook As Long, _
  3.    ByVal nCode As Long, _
  4.    ByVal wParam As Long, _
  5.    ByVal lParam As Long) As Long

  6. Public Declare Function UnhookWindowsHookEx Lib "user32" _
  7.    (ByVal hHook As Long) As Long

  8. Public Declare Function SetWindowsHookEx Lib "user32" _
  9.    Alias "SetWindowsHookExA" _
  10.    (ByVal idHook As Long, _
  11.    ByVal lpfn As Long, _
  12.    ByVal hmod As Long, _
  13.    ByVal dwThreadId As Long) As Long

  14. Public Declare Function PostMessage Lib "user32" _
  15.    Alias "PostMessageA" _
  16.    (ByVal hwnd As Long, _
  17.    ByVal wMsg As Long, _
  18.    ByVal wParam As Long, _
  19.    ByVal lParam As Long) As Long

  20. Public Const WH_KEYBOARD = 2
  21. Public Const KBH_MASK = &H20000000
  22. Public Const WM_LBUTTONDOWN = &H201
  23. Public Const WM_LBUTTONUP = &H202

  24. Global hHook As Long
  25. Global EscKey As Boolean

  26. Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, _
  27.                               ByVal lParam As Long) As Long
  28.    If nCode >= 0 Then
  29.    'Process keys you want to filter
  30.       If wParam = 27 Then
  31.          EscKey = True
  32.       Else
  33.         EscKey = False
  34.       End If
  35.    End If
  36.    KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
  37. End Function
发表于 2003-4-18 21:26 | 显示全部楼层

太好了,感谢~~

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 03:18 , Processed in 0.565807 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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