找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1210|回复: 20

[VBA程序]:怎么选择物体(SelectOnScreen的用法)

[复制链接]
发表于 2004-5-11 23:20:45 | 显示全部楼层 |阅读模式

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

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

×
Sub Example_SelectOnScreen()
    ' This example adds entities to a selection set by prompting the user
    ' to select entities to add.
   
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET")
   
    ' Add entities to a selection set by prompting user to select on the screen
    ssetObj.SelectOnScreen                        (*)
   
End Sub

===========================================
这一段代码是VB-Help上粘下来的,可是我在运行的时候总在(*)的地方出错,究竟SelectOnScreen这个方法的用法是怎么样的。
或者有没有其它方法来达到目的,我希望点选和框选同可以同时存在。
象多数AutoCAD命令(copy move erase)一样的选择方式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-12 11:10:57 | 显示全部楼层
如果第二次运行,则会出现选择集问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-13 01:14:52 | 显示全部楼层
这个我明白,第二次运行的错误出现在第六行
Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET")
就是要先删除掉选择集:TEST_SET再加入。。。
可是现在的我问题是在第八行 (*)这里。就是
SelectOnScreen的用法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2004-5-14 12:26:01 | 显示全部楼层
最初由 lzh741206 发布
[B]ssetObj.SelectOnScreen就可以了 [/B]


这样会出错的1
有没有人试过上面的Demo代码, 这可是AutoCAD的Help自带的代码,不知为何也会出错。

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

使用道具 举报

发表于 2004-5-14 12:30:38 | 显示全部楼层
Sub Example_SelectOnScreen()
    ' This example adds objects to a selection set by prompting the user
    ' to select ones to add.
   
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET")
   
    ' Add objects to a selection set by prompting user to select on the screen
    ssetObj.SelectOnScreen
   
End Sub
  
看看AutoCad2005里带的例子吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-14 18:26:49 | 显示全部楼层
晕倒@_@,你没有看到我上面一楼的贴子吗?
我现在就是不明白为什么 [B]AutoCAD自带的Example也会出错。[/B]
难道是我的机子的原因吗? lzh可否也在你的机子上试一下?
拜托了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-14 19:58:14 | 显示全部楼层
在前面加代码:
Dim i As Integer
For i = 0 To ThisDrawing.SelectionSets.Count - 1
    ThisDrawing.SelectionSets.Item(i).Clear
    ThisDrawing.SelectionSets.Item(i).Delete
Next
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-20 08:56:05 | 显示全部楼层
我在ACAD2002下面试过了,能够正常运行!建议楼主再找一台计算机试试。并且ssetObj.SelectOnScreen本身就包括了框选和点选。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-20 22:23:38 | 显示全部楼层
有ssetObj.SelectOnScreen (*),你能运行麽?
请参考VB的编程规范,*是什么东东?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-8 23:43:55 | 显示全部楼层
最初由 lzh741206 发布
[B]有ssetObj.SelectOnScreen (*),你能运行麽?
请参考VB的编程规范,*是什么东东?
晕 [/B]


这个(*)我是用来标示位置的,程序中当然没有。*-*6 *-*6 老兄你没有领会我的意思。楼上的其它几位都明白。
PS:不要把我想象得那么菜好不好,我是读工科出身的,大学里也学过几门编程语言。*-*a *-*a *-*a *-*a

To:9楼的:非常感谢,看来是AutoCAD的版本的问题了,因为我在单位里面试过也有这个问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-17 23:20:33 | 显示全部楼层
若有窗体,则要把窗体隐藏一下。
form.hide
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2004-6-28 23:26:51 | 显示全部楼层
最初由 sdxylijian 发布
[B]若有窗体,则要把窗体隐藏一下。
form.hide [/B]


多谢老兄,问题终于解决了!!
就是选择时一定要隐藏用户窗体!!

好久没来看这个贴子了,现在才看到。
不过这样的话我又有一些问题了:
1.为什么会这样的,这两个对象(object)有冲突吗?
2.如果选择时[B]一定[/B] 要保留窗体,有没有法子?

这是修改后的代码:
===================================================
Private Sub CommandButton1_Click()

Dim i As Integer
For i = 0 To ThisDrawing.SelectionSets.Count - 1
ThisDrawing.SelectionSets.Item(i).Clear
ThisDrawing.SelectionSets.Item(i).Delete
Next

' This example adds entities to a selection set by prompting the user
' to select entities to add.

' Create the selection set
Dim ssetObj As AcadSelectionSet
Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET")

' Add entities to a selection set by prompting user to select on the screen
UserFrm.Hide
ssetObj.SelectOnScreen
UserFrm.Show
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-29 07:16:00 | 显示全部楼层
一、在窗体上添加一个AcFocusCtrl控件和一个CommandButton控件
二、插入下列代码
[php]
Const WS_CAPTION = &HC00000
Const SWP_FRameCHANGED = &H20
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const HWND_TOP = 0
Private Declare Function GetForegroundWindow Lib "user32" () 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 Sub CommandButton1_Click()
    Dim L As Long
    L = GetForegroundWindow
    SetWindowPos Application.hwnd, HWND_TOP, 0, 0, 0, 0, SWP_FRameCHANGED Or SWP_NOMOVE Or SWP_NOSIZE
    ThisDrawing.Utility.GetPoint
    SetWindowPos L, HWND_TOP, 0, 0, 0, 0, SWP_FRameCHANGED Or SWP_NOMOVE Or SWP_NOSIZE
End Sub
[/php]
三、在模块里插入下列代码
[php]
Sub Test()
UserForm2.Show 0
End Sub
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 07:25 , Processed in 0.255271 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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