2012年9月24日月曜日

LibO Calcでモードレスダイアログ(なんちゃって)

ダイアログ作成画面で作ったダイアログを、モードレスダイアログっぽく使うなんちゃってコード。
(本格的に、ダイアログを動的に生成するコードをゴリゴリ書くと、モードレスダイアログも普通にできるらしいけど、ちょっと面倒なので。)

Dim ContinuFlg As Boolean

Sub Main
  DialogLibraries.LoadLibrary("Standard")
  oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  oDialog.setVisible(true)
 
  ContinuFlg = true
  While ContinuFlg
    wait(1000)
  Wend
 
  oDialog.dispose()
End Sub

Sub SetValue(ev)
  oSelect = ThisComponent.getCurrentController().getSelection()
  oSelect.setString(ev.ActionCommand)
End Sub

Sub DialogClose(ev)
  ContinuFlg = false
End Sub



んで、↑みたいなダイアログを用意して、ListBoxのイベントの実行時に「SetValue」、閉じるボタンのイベントの実行時に「DialogClose」を設定するとおk。リストのアイテムを選んでダブルクリックしたりすると、モードレスっぽい動作で、選択中のセルに選択した文字列が入力されます。
ダイアログをexecuteせずに、無限ループで待機状態にするのがポイント。閉じるボタンを作って
無限ループを終了させる必要があります。なにこの裏技っぽいの。