【发布时间】:2020-07-01 06:02:05
【问题描述】:
我还有另一个挑战。有没有人试图拦截复制/粘贴事件?我的目标是防止有人剪切/复制/粘贴已经在纸上的形状。如果他们把它从模板上拖下来,那很好。我只是不能让他们复制现有的形状。为了让这更难一点,我只需要防止这种形状。如果要复制文本,那很好。
我们有一个订单类型数据库,其中包含需要放在 Visio 工作表上的项目。我不能使用 shapeID,因为我需要能够从数据库更新形状,并且我不能将 ID 写回数据库,因为它违反了安全策略。我将两者联系在一起的方式是一个名为 shapeKey 的属性,该值由数据库在删除形状时提供。
当用户需要从数据库中刷新工作表时,我会遍历形状,比较形状和数据库中的 shapeKey。如果匹配,我会更新其他属性。如果没有匹配,我想删除形状。如果用户复制一个形状,shapeKey 也将被复制,这会导致问题。最后,他们可以从模具中添加自己的形状,这些形状必须从删除过程中排除
我有两个选择:
- 禁用形状剪切/复制/粘贴
- 截取复制/剪切并在粘贴时更改属性,以便我知道它是用户粘贴的形状。这是首选,因为它对用户更友好
- 我只是想如果另一种方法我可能会工作。有没有办法锁定形状以防止复制?如果有锁,那也会锁定位置吗?用户需要能够熟悉周围的大多数形状。
我考虑过捕获事件,但找不到要查找的事件代码。我无法安装具有事件监视器的 Visio SDK。监视器可能已经向我显示了代码。这是一些关于我认为流程的伪代码。
选项 1
if select item is a shape then
msgbox "shape copying verboten. please us the stencil"
clear selected item
选项 2
capture the paste event
if selected item is a shape then
vsoShape.Cells("Prop.ShapeKey").Formula = Chr(34) & "protect" & Chr(34)
图层可能会起作用。所有数据库控制的形状都可以在一个图层上,所有用户形状都可以在另一个图层上,但我以前没有使用过图层。那行得通吗?如何确保粘贴的任何形状都进入用户层?
【问题讨论】:
-
您想只禁用某些剪切/复制/粘贴,还是禁用所有这些选项?看看这个例子:vbaexpress.com/kb/getarticle.php?kb_id=373
-
这是个好主意,除了 application.OnKey 不适用于 Visio 之外,它还可以工作。该代码适用于 Excel。不过,我希望它会奏效。这本来是解决方案。