Макрос LibreOffice, показывающий простую форму TextBox - PullRequest
0 голосов
/ 22 апреля 2020

Я не могу понять (или найти пример), как выполнить следующую простую вещь в LibreOffice Cal c 6.2:

У меня есть форма чертежа (например, простой прямоугольник) на листе ( назовите его ShapeA) и форму текстового поля на другом листе (назовите его TextboxB). Я хочу сделать следующее: когда я нажимаю на ShapeA, TextboxB должен появиться на экране (без изменения текущего листа, возможно, в диалоговом окне), а затем закрыться щелчком мыши.

Полагаю, что макрос, связанный с ShapeA, может выглядеть примерно так:

Sub Main
oDrawPage = ThisComponent.getDrawPage()
oTb = oDrawPage.getByName("TextBoxB")
oTb.show()
End Sub

Может кто-нибудь посоветовать, что мне следует добавить в этот макрос для выполнения sh описанной задачи?

ОБНОВЛЕНИЕ: Что я хочу сделать sh (в ответ Джиму К.).

У меня очень загроможденная диаграмма со многими формами. Каждая фигура имеет некоторую текстовую информацию, связанную с ней. На каждой фигуре или вокруг нее недостаточно места для размещения этой информации. Таким образом, должен быть способ отобразить эту информацию о каждой фигуре. Также эта информация должна отображаться в предварительно отформатированном виде (она содержит код и другую структурированную информацию).

Мой план состоит в том, чтобы создать текстовое поле с соответствующей информацией для каждой фигуры диаграммы, поместить эти текстовые поля на другой лист и иметь возможность при просмотре диаграммы щелкнуть любую фигуру и просмотреть связанную информацию во всплывающем окне. вверх текстового поля, не выходя из диаграммы, а затем закройте текстовое поле простым действием (например, щелкнув по нему).

Возможно ли, что эта задача будет реализована с помощью форм и макросов LO?

1 Ответ

1 голос
/ 24 апреля 2020

Как насчет этого: Поместите все на один лист, но держите текстовые поля скрытыми до тех пор, пока они не понадобятся.

Используйте следующий код, адаптированный с https://ask.libreoffice.org/en/question/93050/how-can-i-hideshow-a-shape-of-my-spreadsheet-using-a-macro/.

Sub ShapeClickedA
    ShowHideShape("TextBoxA")
End Sub
Sub ShapeClickedB
    ShowHideShape("TextBoxB")
End Sub

Sub ShowHideShape(shapeName As String)
    oDrawPage = ThisComponent.getSheets().getByName("Sheet1").getDrawPage()
    For iShape = 0 To oDrawPage.Count - 1
        oShape = oDrawPage.getByIndex(iShape)
        If oShape.Name = shapeName Then
            If oShape.Visible Then
                oShape.Visible = 0  'Not Visible
            Else
                oShape.Visible = 1  'Visible
            End If
        End If
    Next iShape
End Sub

Если вы этого еще не сделали, задайте имена текстовых полей, щелкнув правой кнопкой мыши и выбрав Имя ... Затем щелкните правой кнопкой мыши на ShapeA и TextBoxA и назначьте макрос ShapeClickedA. Сделайте так же для других пар фигур. Результат работает следующим образом:

  1. Прежде чем что-либо щелкнуть.

no text boxes displayed

Нажмите на ShapeA. (Чтобы закрыть его снова, нажмите либо ShapeA, либо TextBoxA). ShapeB работает аналогично.

TextBoxA displayed

Также возможно отображать оба одновременно.

TextBoxA and TextBoxB displayed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...