Top > OOoBasic > Generic > lockControllers

コントローラのロック Edit

ユーザーとモデルの間にあるコントローラをロックしてアプリケーションの表示の更新を防ぐことでマクロなどの実行速度を上げる。API からドキュメントを変更するときにはコントローラをロックすることで表示がインタラクティブではなくなりますが、実行時間が短くなります (傾向にあります)。最後にコントローラのロックをはずすと表示が一度に更新されます。

OOo 2.3.0 では Calc などでチャートが存在するとチャートの更新でひどくマクロの実行時間が長くなるようです。そのため、マクロの動作中はコントローラをロックしてチャートを更新させないようにすると実行速度が改善します。

モデル - コントローラ - ビューの関係に関しては DevGuide 参照のこと。

コントローラのロックと解除 Edit

コントローラのロックは com.sun.star.document.frame.XModel インターフェースの lockControllers メソッドで行います。また、解除は同インターフェースの unlockControllers メソッドで行います。

Sub lockcontrollers_1
  oDoc = ThisComponent
  oDoc.lockControllers()
  ' .... do something
  oDoc.unlockControllers()
End Sub

ロックを解除しないとドキュメントが更新されなくなります。すでにロックされているかどうかは hasControllersLocked メソッドで調べます。

埋め込みオブジェクトのコントローラ Edit

Calc のチャートは埋め込み型 OLE オブジェクトです。これらは別のドキュメントとして埋め込まれているドキュメントとは別にコントローラがあります。

以下のコードでは Calc ドキュメントの全てのシート上にあるチャートのコントローラをロックします。

Sub lockcontrollers_2
  oDoc = ThisComponent
  oDrawPages = oDoc.getDrawPages()
  
  For i = 0 To oDrawPages.getCount() -1
    oPage = oDrawPages.getByIndex(i)
    For j = 0 To oPage.getCount() -1
      oDrawing = oPage.getByIndex(j)
      If oDrawing.ShapeType = _ 
        "com.sun.star.drawing.OLE2Shape" AND oDrawing.CLSID = _ 
        "12DCAE26-281F-416F-a234-c3086127382e" Then
        oDrawing.Model.lockControllers()
        'oDrawing.Model.unlockControllers()
      End If
    Next j
  Next i
End Sub

シェープ com.sun.star.drawing.OLE2Shape でチャートの CLSID 12DCAE26-281F-416F-a234-c3086127382e のものをロックしています。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes