2

一些背景:

快速背景是我正处于为 PowerPoint 构建插件的研究阶段。我的最终目标是开发 CAD 尺寸标注插件,以帮助加快工程演示的创建。我们必须做很多“PowerPoint 工程”,其中组件的一般尺寸显示在使用 PPT 形状或 CAD 几何本身的屏幕截图创建的所述组件的简化版本上。但是一遍又一遍地创建维度是乏味的。每个通常由一个箭头、2 行和一个带有尺寸值的文本框组成。

这是我需要帮助的地方。

(如果您知道如何在 Excel 中执行以下操作,那也可以,稍后我将努力计算 PPT 等价物。)

在 PowerPoint 幻灯片中,在设计模式下(即不是幻灯片放映模式),我想做以下工作流程:

  1. 在打开的用户窗体中,用户单击一个名为“开始”的按钮
  2. 代码开始在幻灯片本身的字段中侦听鼠标左键(LMC)(它不应该响应实际用户窗体上的 LMC,例如,如果用户需要将用户窗体拖到一边)
  3. 在 LMC 上,光标的坐标记录为 (x1,y1)
  4. 重复步骤 2 和 3 以记录 (x2, y2)
  5. 用这些坐标做一些事情(例如在两个坐标之间画一个尺寸

我相信我可以处理除第 2 步之外的所有编码,这就是我在这里的原因。我很难找到一个起点。具体来说,我需要有关如何收听 LMC 的帮助。简而言之,设想如下:

While Listening:
  If LMC = TRUE
    Do Stuff
  End If
End While 

但我没有编码这While Listening部分的知识。我需要朝着正确的方向轻推。

我的搜索使我进入了MouseDownMSDN 的事件处理程序页面,但在我的测试中,我认为这不是我需要的。当鼠标在其自身的用户窗体中的命令按钮上按下时,它似乎MouseDown打算启动一个例程。

我还发现了这篇 SO 帖子,其中唯一的答案似乎暗示如果不花大力气这是不可能的,并且代码可能对文件本身有害:如何在 Excel VBA 中记录鼠标点击?. (我不遗余力地投入工作,但如果生成的代码很有可能造成损害,正如帖子似乎暗示的那样。)(此外,OP 在没有任何解释的情况下被否决,也许有人可以告诉我为什么,这样我就不会犯同样的错误。)

4

1 回答 1

1

您可以通过执行以下操作来完成您想要做的事情(底部可能对您最有帮助):首先,声明以下内容:

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10

以下代码片段将允许您单击、双击或右键单击:

Private Sub SingleClick()
  SetCursorPos 100, 100 'x and y position
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

Private Sub DoubleClick()
  'Double click as a quick series of two clicks
  SetCursorPos 100, 100 'x and y position
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

Private Sub RightClick()
  Right Click
  SetCursorPos 200, 200 'x and y position
  mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Sub

您需要做的就是将光标位置更改为屏幕上的坐标。为此,我使用以下代码创建了一个新宏并将其分配给“Ctrl+Y”按钮。这将告诉您当前鼠标位置的坐标。

Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
    x As Long
    y As Long
End Type

Sub CurosrXY_Pixels()

    Dim lngStatus As Long
    Dim typWhere As POINTAPI

    lngStatus = GetCursorPos(typWhere)
    MsgBox "x: " & typWhere.x & Chr(13) & "y: " & typWhere.y, vbInformation, "Pixels"

End Sub
于 2015-06-25T16:14:52.207 回答