マクロ/Draw/001
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
説明
作成背景
ボタンをクリックしてオブジェクトを表示または非表示にできるようにしたいと考えています。
以下のスクリーンショットは、「正方形」または「円」ボタンをクリックして、それぞれのオブジェクトを表示または非表示にする例を示しています。

用例
LibreOffice Drawでは、特定の描画ページで layers(レイヤー) を定義できます。レイヤーを使用すると、特定のレイヤーに限定されたオブジェクトにアクセスできます。レイヤーは、表示設定や印刷時にロックまたは解除する必要があるかどうかなど、個別に処理できるさまざまな使用可能なワークスペースのようなものと考えてください。デフォルトでは、Draw は 3つのレイヤーを提案します(インターフェイスの下部ツールバーに表示されます)。
- レイアウト
- コントロール
- 寸法線
レイヤーごとにオブジェクトを処理できるように、さらに 2つのレイヤを手動で作成します。
- 正方形は Squares というレイヤーに作成されます。
- 円は Circles というレイヤーに作成されます。
すべてのレイヤーには、IsVisible と呼ばれるブール・プロパティがあります。次のマクロは、このプロパティを True と False を交互に切り替えます。
各ボタンの 実行時 イベントによって、一意のマクロが起動されます。oEvent は、ボタンがクリックされたときに実行されるマクロに引数として渡されます。これを設定するには、(プッシュ)ボタン を作成し、右クリックして コントロールのプロパティ を選択します。最後に、イベント で 実行時 アイテムのマクロを選択します。
ここから、ボタンの タイトル プロパティをトレースし、レイヤーをループで検索して、同じ名前のオブジェクトがあるかどうかを確認できます。また、追加情報(タグ)プロパティを使用して、対応するレイヤの名前を格納することもできます。
また、このコードは、hasByName プロパティを調べて、ドキュメントにその名前のレイヤーが実際にあることを確認することで、エラーを回避します。
Code
LibreOffice Basic の場合
Option Explicit
Sub toggle_layer_visibility (oEvent)
'''ボタンクリック イベントによってトリガされ、ボタンによって示されるレイヤーの表示/非表示を切り替えます。'''
Dim oLayerManager As Object ' com.sun.star.drawing.LayerManager
oLayerManager = ThisComponent.LayerManager
If oLayerManager.hasByName(oEvent.source.model.Label) Then
oLayerManager.getByName(oEvent.source.model.Label).IsVisible = _
Not( oLayerManager.getByName(oEvent.source.model.Label).IsVisible )
Else
MsgBox "次の名前の画層は存在しません " & _
CHR$(34) & oEvent.source.model.Label & CHR$(34), _
48, "toggle_layer_visibility()"
End If
End Sub ' toggle_layer_visibility
例題の ODG ファイル