Jump to content

マクロ/Draw/001

From The Document Foundation Wiki
This page is a translated version of the page Macros/Draw/001 and the translation is 100% complete.


説明

作成背景

ボタンをクリックしてオブジェクトを表示または非表示にできるようにしたいと考えています。

以下のスクリーンショットは、「正方形」または「円」ボタンをクリックして、それぞれのオブジェクトを表示または非表示にする例を示しています。

ボタンでレイヤの表示/非表示を切り替えます
ボタンでレイヤの表示/非表示を切り替えます

用例

LibreOffice Drawでは、特定の描画ページで layers(レイヤー) を定義できます。レイヤーを使用すると、特定のレイヤーに限定されたオブジェクトにアクセスできます。レイヤーは、表示設定や印刷時にロックまたは解除する必要があるかどうかなど、個別に処理できるさまざまな使用可能なワークスペースのようなものと考えてください。デフォルトでは、Draw は 3つのレイヤーを提案します(インターフェイスの下部ツールバーに表示されます)。

  • レイアウト
  • コントロール
  • 寸法線

レイヤーごとにオブジェクトを処理できるように、さらに 2つのレイヤを手動で作成します。

  • 正方形は Squares というレイヤーに作成されます。
  • 円は Circles というレイヤーに作成されます。

すべてのレイヤーには、IsVisible と呼ばれるブール・プロパティがあります。次のマクロは、このプロパティを TrueFalse を交互に切り替えます。

各ボタンの 実行時 イベントによって、一意のマクロが起動されます。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 ファイル

メモ