Top > OOobbs2 > 116

OOobbs2/116 Edit

  • サマリ: コントロールへのフォーカス
  • 環境: Calc
  • 状態: 解決
  • 投稿者: 七志乃権兵衛?
  • 投稿日: 2008-07-29 (火) 09:08:45

質問 Edit

コントロール追加の件ではありがとうございました。

家計簿の費目列など、固定値を使用する項目ににセルカーソルが移動した時にそのセルの位置にリストボックスを移動させて、選択した値を同じ位置のセルに入力しようと思っています。

フォーカスをフォームからセルに移動させる手段はこのサイトにあったのですが、フォームにフォーカスする方法が分かりません。

ネットで調べてみて
oDrawPage.queryInterface("com.sun.star.accessibility.XAccessibleComponent").grabFocus()
のようにしてみたのですが上手くいきません。

どなたか良かったらアドバイスお願いします。

回答 Edit

  • フォームコントロールへのフォーカスもダイアログコントロールへのフォーカス移動と同じように行えます。
Sub focus_form_control_1
 oDoc = ThisComponent
 oDrawPage = oDoc.getDrawPages().getByIndex(0)
 oForm = oDrawPage.getForms().getByIndex(0)
 
 oController = oDoc.getCurrentController()
 oListBox = oForm.getByName("ListBox")
 
 oListControl = oController.getControl(oListBox)
 
 oListControl.setFocus()
 'mri oListControl
End Sub

Basic を使っているのであれば queryInterface はまったく必要ありません。

  • はにゃ? 2008-07-29 (火) 10:08:38
  • お返事ありがとうございます。無事にフォーム作成後にフォーカスできました。
    続けて申し訳ないのですが、フォームを登録時に、フォームにXKeyListenerを追加し、
    フォームにフォーカス中、エンターキーの入力があったら
    シートにフォーカスを戻すようにしたいのですが、上手くいきません。
	oController		= ThisComponent.currentController
	oDrawPage		= oController.ActiveSheet.DrawPage
	oDrawPage.add(g_oListBox)

    中略

	with oListBox
	  .Dropdown = True
	  .StringItemList = Array("ABC", "123")
	end with
	
	aEvent = CreateUnoStruct("com.sun.star.script.ScriptEventDescriptor")
	With aEvent
	  .AddListenerParam	= "com.sun.star.awt.KeyEvent"
	  .EventMethod		= "keyPressed"
	  .ListenerType		= "XKeyListener"
	  .ScriptCode		= "documen:Standard.HouseKeeping_Book.zListBox_keyPressed"
	  .ScriptType		= "StarBasic"
	End With
	
	oForm			= oDrawPage.Forms.getByIndex(0)
	oForm.registerScriptEvent(1, aEvent)
	oListControl	= oController.getControl(oListBox)
	oListControl.setFocus()

 '--------------------------------------------------------------------------------------------------

Sub zListBox_keyPressed(oKeyEvent)
	zListBox_keyPressed	= false
	
	If oKeyEvent.keyCode = com.sun.star.awt.Key.RETURN	Then
		zListBox_keyPressed	= true
		ThisComponent.currentController.Frame.ComponentWindow.setFocus()
	End If
End Sub

よろしければアドバイスお願いします。

  • とりあえず、ScriptEventDescriptor の設定が間違っているようです。

ScriptCode の指定は vnd.sun.star.script: プロトコルを使用して指定します。OOoBasic/Generic/ScriptingURL

また、その場合 ScriptType が StarBasic では動かないので "Script" と指定します。

  • はにゃ? 2008-08-03 (日) 10:06:28
  •  以下のようにしてみましたが、呼び出されていないようです。
    .ScriptCode = "vnd.sun.star.script:Standard.HouseKeeping_Book.zListBox_keyPressed?language=Basic&location=document"
    registerScriptEventで割り当てるイベントエントリが違うのかと思い、最初の引数にゼロを設定 したところ、ダイアログが出て「No script」と記載されていました。
    追加するタイミングが悪いのでしょうか?
  • 私のところでは問題なく動作します。registerScriptEvent メソッドで指定する最初の引数はフォームの IndexContainer 中でのインデックスと同じになります。あるコントロールモデルのインデックスを取得するにはコンテナから getByIndex メソッドで一つづつ取得して比較する必要があります。NameContainer の名前リストと同じ順になることがありますが、フォームでコントロール名が一意に定まらないので使えません。

最初のコントロールであれば registerScriptEvent メソッドのインデックス指定は 0 になるはずです。No Script エラーが示すように URL 指定が間違っているのではないかと…。

zListBox_keyPressed	= false

としているようですが、キーイベントはハンドラと異なり返り値は void です。値を返す必要はありませんし、イベントを消費することもできません。(Sub だと値は返せませんが)

  • はにゃ? 2008-08-03 (日) 15:41:16

  • こんばんは。 http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FForm%2FControl&word=ScriptType
    上記のページでの ScriptCode の設定は、マクロの管理で開けるマクロエディタのデフォルトの
    ドキュメント "Module1" の中に記述された "btn_push" というマクロを設定していると理解していいのでしょうか?
    念のため "Module1" を新規作成し、その中に設定する "Main" という名前でマクロを記述したのですが、
    やはりスクリプトが見つからないようです。
    パスはマクロ内の記述をコピーして、
    http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FGeneric%2FScriptingURL
    こちらのページ内で文字列検索して照合できたので間違いはないと思います。 記述方法は、普通に OOoB のマクロを書いているのですが、大丈夫でしょうか?
  • ドキュメントの Standard ライブラリにある Module1 中の btn_push を指定しています。ファイルを作成してみました。fileOOobbs2-116.ods -- はにゃ? 2008-08-04 (月) 03:25:52

  • おはようございます。
    どうやら、マクロをドキュメントに埋め込んでいないのにスクリプトのアドレスの最後が "document"
    にしていたのが問題だったようです。 ここを "application" にしたら動きました!
    提供していただいたサンプルを開いてみたところ、何も起きませんでした。 そこで「マクロの管理」で
    ドキュメントを調べてみたところ、ドキュメント内にマクロがあり、それで間違いに気づけました。
    何度も質問してお手数かけました&本当にありがとうございました!

感想,コメント,メモ Edit



Attach file: fileOOobbs2-116.ods 905 download [Information]

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