【问题标题】:In LibreOffice Calc change the size of a shape by clicking it在 LibreOffice Calc 中,通过单击来更改形状的大小
【发布时间】:2020-07-22 13:57:38
【问题描述】:

我在 LO Calc 中有几个形状,我需要这些形状在单击鼠标时更改它们的大小:第一次单击放大形状,第二次单击恢复原始大小。

我正在尝试使用分配给这些形状的宏来执行此操作。我的问题和我的问题:如何在宏中确定单击了哪个形状?

我知道如何获取当前选中的形状:

dim doc as object
doc = ThisComponent
someVar = doc.CurrentSelection...

但是单击时没有选择形状,并且此方法不起作用。

我尝试将事件对象的参数添加到宏中:​​

sub ChangeSize( oEvent )

但这会产生关于参数数量错误的消息。

有没有办法在 LO Basic 中检测宏的调用者?或者也许是另一种通过鼠标单击实现大小更改的方法?

附:可以使用单独的按钮调用宏,选择需要的形状后单击该按钮,但这种方式不太方便。

编辑:正如我在下面的 cmets 中猜测的那样,所描述的任务可以通过鼠标和形状坐标来解决。我在这里找到的解决方案的关键点: How to get Document-Coordinates from a Mouse Click in an OpenOffice BASIC Macro

【问题讨论】:

    标签: libreoffice libreoffice-calc libreoffice-basic


    【解决方案1】:

    不是检测调用者,而是为每个形状点击事件分配一个不同的单行宏。

    Sub ShapeClickedA
        ChangeSize("ShapeA")
    End Sub
    Sub ShapeClickedB
        ChangeSize("ShapeB")
    End Sub
    

    相关:LibreOffice macro showing simple TextBox shape

    附:回答后,我意识到您也问了链接的问题。这有什么不同,另一个答案是否令人满意?

    【讨论】:

    • 你好,吉姆。您之前的回答非常令人满意,我经常使用这种方法。但这个问题是关于一个不同的用例。在前一种情况下,手动创建每个关联的形状并将其与父形状结合。我将它用于图表中格式丰富的永久文本数据。在这种情况下,我需要处理数十个小形状(在表格中)不需要特殊格式化并且可以轻松添加和删除的文本。所以在这种情况下,不为每个小形状创建一个额外的形状会更方便,但是
    • 放大和缩小原始文件。我想人们可以尝试以某种方式使用鼠标光标坐标来找到点击的形状,因为我猜,在宏运行的那一刻,关于点击的形状的信息已经丢失了。
    • @AlBerger:感觉就像我错过了您正在尝试做的事情。什么形状被点击,什么形状被分配了宏,你希望结果是什么?如果这些小形状具有分配给它们的宏,那么我不明白为什么您不能将它们分配给ShapeClickedA 之类的东西,就像我的回答一样。也许它有助于编辑您的问题并提供创建可重现示例的说明。
    • 另外,您多次提到不想编辑形状的文本,但我不明白这有什么关系。在我的另一个答案中,我建议您通过右键单击并选择 Name... 来给它们命名,但这不应该影响文本。您是否试图避免必须分配一个唯一的名称?也许您可以编写一个宏来分配名称。
    • 实际上,这可能就是您正在寻找的答案。编写一个宏来遍历绘图页上的每个形状并分配一个名称和相应的事件处理程序。因此,每当添加新的瞬态形状时,运行宏以重做名称和事件处理程序。如果这听起来不错,我也许可以建议如何编写这样的代码。
    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多