Top > OOoBasic > Generic > form
*フォーム [#c36deeec]

ドキュメント上にボタンを配置して、マクロプログラムを割り当てる

#contents

**Pushボタンを配置する [#w849736d]

+ 表示(V)→ツールバー(T)→フォームコントロール(K)を選択、チェックが入った状態にする
+「フォームコントロール」ツールバーが表示されたら、<ボタン>ボタンを選択する
+ ドキュメント上でドラッグすると、ボタンが描かれる
**マクロを割り当てる [#s371596f]

+ 割り当てたいボタンを右クリック-コントロール
+「属性 ボタン」ダイアログが表示されたら、"イベント"タブを選択
+ "作動時"の<...>ボタンをクリック
+「マクロの割り当て」ダイアログが表示されたら、割り当てたいマクロのモジュールを"マクロ"欄で選択する(例:無題1-Standard-Module1)
+ "マクロのある場所"で、割り当てたいマクロを選択する(例:Main)
+ <割り当て>ボタンをクリックする
+ <OK>ボタンをクリック
+「属性 ボタン」ダイアログを閉じる
**デザインモードをオン/オフする [#f809e385]
ボタンをクリックして、割り当てたマクロを実行するには、デザインモードを'オフ'にする必要があります。

これには、「フォームコントロール」ツールバーで<デザインモード オン/オフ>ボタンをクリックします。
**マクロ割り当てを解除する [#h79bdf81]

+ 解除したいボタンを右クリック-コントロール
+「属性 ボタン」ダイアログが表示されたら、"イベント"タブを選択
+ "作動時"の<...>ボタンをクリック
+「マクロの割り当て」ダイアログが表示されたら、解除したい動作イベントを選択する(例:作動時)
+ <解除>ボタンをクリックする
+ <OK>ボタンをクリック
+「属性 ボタン」ダイアログを閉じる



**フォーカス [#z5dfe3d5]
Calc ドキュメント上にフォームのボタンを作成して,OOoBasic のマクロを実行することがあります。マクロが終了してもボタンの方へフォーカスが移ってしまっています。(ボタンにフォーカスが移っているというのは次のような状態です。ボタンの文字が点線で囲まれている状態。)

&ref(focus_button.png);

そのまま Enter キーを押すと再度ボタンが押されてしまいまたマクロが実行されてしまいます。セルに値を入力して,Enter キーで入力を確定しようとするとマクロが実行されてしまいます。マウスで他のセルなどをクリックすると,ボタンからフォーカスが失われて入力の確定ができるようになります。

しかし,これではわざわざどこかをクリックしなければいけないのに加えて,予期しない動作が起きる可能性があります。そのためにはマクロの実行の部分でどうにかフォーカスをボタンからウィンドウの方へ戻してやる必要があります。

フォームのボタンへ次のコードを割り当てて実行してみます。

 Sub Main
 Dim oDoc As Object
 Dim oController As Object
 Dim oFrame As Object
   oDoc = ThisComponent
   oController = oDoc.getCurrentController()
   oFrame = oController.getFrame()
   oFrame.ComponentWindow.setFocus()
 End Sub

マクロの実行が終了してもボタンの文字が点線で囲まれておらず,フォーカスがボタンにありません。このまま Enter キーを入力してもマクロが実行されることはありません。

''ComponentWindow'' の ''setFocus'' メソッドでドキュメントのウィンドウへフォーカスを持ってくることができるようです。

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