sealive 发表于 2005-4-17 13:18:00

如何利用vba禁止删除Autocad中某一对象?

如何利用vba禁止删除Autocad中某一对象?


如果创建某一实体,要求只能在自己的vba程序中做删除该实体,而在autocad的图形界面中不能删除此实体,请问如何实现?

liyuwen 发表于 2005-4-18 09:39:00

不妨利用程序跟踪系统的AcadDocument_BeginCommand及AcadDocument_EndCommand两事件,并作相应判断即可。

yj821005 发表于 2005-4-18 10:40:00

大哥能不能具体讲讲啊,比如用户已经通过VBA的程序画了一条线:line1。后面要加上什么代码才能实现搂主要的功能呢?

efan2000 发表于 2005-4-18 13:33:00

在AcadDocument_BeginCommand及AcadDocument_EndCommand事件中,有命令的名称,判断是不是"DELETE",是就调用SendCommand的Undo命令回退。

mikewolf2k 发表于 2005-4-18 19:22:00

不知道直接用delete键删除的行不行?

sealive 发表于 2005-4-18 22:38:00

我已经试过可以利用pickfirstselectionset选择集遍历判断选中对象是否为禁止利用cad命令删除对象,如是则发送ESC,使不能选中对象,这样禁止了使用键盘delete键删除对象,但是在使用begincommand和endcommand禁止使用命令删除时,当选中对象非常多时,要判断删除对象是否为禁止删除对象时,执行速度非常慢,因为删除对象太多,执行代码次数太多,效果不理想!也试过使用ObjectErased事件


存在同样现象!

liyuwen 发表于 2005-4-19 08:55:00

确实如果选中对象非常多时,会存在上述现象!

cbse_smy 发表于 2005-5-6 16:34:00

每个对象都有一个Modify事件,编一程序在此事件被激发时而运行,该程序完成事情就是重绘被删图元即可.

hangc 发表于 2005-5-7 18:18:00

有几点建议:


1.如果Modify事件中完成截获的话,除非你的图形均在几k以下,否则将导致cad长时间不能退出等总之很多问题(经验之谈)


2.建议将该类对象放在专用层,配合层锁定功能实现。


3.如果一定要截获命令的话,需要注意使用人员的cut 、erase等多种删除对象的问题。

sealive 发表于 2005-5-13 22:25:00

我现在用的方法就是锁定专用图层,但锁定层方法的激发除了在截获一系列删除命令时激发外,还有好的方法吗?
页: [1]
查看完整版本: 如何利用vba禁止删除Autocad中某一对象?