Top > OOoBasic > Generic > lockControllers
*コントローラのロック [#q21c2df4]

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

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

#contents

モデル - コントローラ - ビューの関係に関しては DevGuide 参照のこと。
**コントローラのロックと解除 [#nd3178e3]

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

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

ロックを解除しないとドキュメントが更新されなくなります。すでにロックされているかどうかは ''hasControllersLocked'' メソッドで調べます。
**埋め込みオブジェクトのコントローラ [#zb52c67f]

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