Document.GetUserClick method
允许用户在文档中单击,并返回 x,y 坐标以及单击时修改器 CTRL、ALT 和 SHIFT 键的状态信息
语法
int GetUserClick(out double x, out double y, out int ShiftState, int TimeOut, bool Snap, cdrCursorShape CursorShape);
参数
名称 | 类型 | 说明 |
---|---|---|
x | double | 指定选择单击的 x 坐标 |
y | double | 指定选择单击的 y 坐标 |
ShiftState | int | Ctrl、Shift 和 Alt 键的状态,没有按下任何一键默认为 0 单击时按下 Shift —->1 单击时按下 Ctrl —->2 单击时按下 Alt —-> 4 单击时按下 Ctrl+Shift —->3 单击时按下 Shift+Alt —->5 单击时按下 Ctrl+Alt —-> 6 单击时按下 Ctrl+Shift + Alt —->7 |
TimeOut | int | 指定等待用户单击的时间量(以秒为单位)此参数的默认值为 10。 如果设置该值则:直到用户按 Esc 中止该过程 或经过超经过相应的时间间隔才能操作。 |
Snap | bool | 指定是否识别捕捉,True or False |
CursorShape | cdrCursorShape | 指定鼠标标的形状 |
返回
备注
GetUserClick方法允许用户在文档窗口中指定一个点,并将该点的坐标返回给脚本。它还检索有关单击时Ctrl、Shift和Alt键状态的信息。
示例
下面的 VBA 示例检索用户单击的点的坐标,并在该点绘制一个圆。圆圈填充取决于修饰符键状态。如果在用户单击时按下 Shift 键,则应用红色。如果按 Ctrl 键,则添加绿色。如果按 Alt,则应用蓝色。因此,按 Ctrl + Shift + Alt 将生成一个黄色圆圈。该宏将循环,直到用户按 Esc 中止该过程或经过十秒的超时间隔。
Sub Test()
Dim x As Double, y As Double
Dim Shift As Long
Dim b As Boolean
Dim s As Shape
Dim cr As Long, cg As Long, cb As Long
b = False
While Not b
b = ActiveDocument.GetUserClick(x, y, Shift, 10, False, cdrCursorEyeDrop)
If Not b Then
Set s = ActiveLayer.CreateEllipse(x - 0.1, y - 0.1, x + 0.1, y + 0.1)
cr = 0
cg = 0
cb = 0
If (Shift And 1) <> 0 Then cr = 255 ' Shift depressed - Add Red
If (Shift And 2) <> 0 Then cg = 255 ' Ctrl depressed - Add Green
If (Shift And 4) <> 0 Then cb = 255 ' Alt depressed - Add Blue
s.Fill.UniformColor.RGBAssign cr, cg, cb
End If
Wend
End Sub
public void Test()
{
bool b = false;
while (!b)
{
b = capp.ActiveDocument.GetUserClick(out double x, out double y, out int Shift, 10, false, cdrCursorShape.cdrCursorEyeDrop) != 0;
if (!b)
{
Shape s = capp.ActiveLayer.CreateEllipse(x - 0.1, y - 0.1, x + 0.1, y + 0.1);
int cr = 0, cg = 0, cb = 0;
if ((Shift & 1) == 1) cr = 255; //Shift depressed - Add Red
if ((Shift & 2) == 2) cg = 255; //Shift depressed - Add Green
if ((Shift & 4) == 4) cb = 255; //Shift depressed - Add Blue
s.Fill.UniformColor.RGBAssign(cr, cg, cb);
}
}
}