2009年08月05日
[ON⇒OFF]変化したオプションボタンの取得
関連記事:オプションボタンは OFF になる時には 「Change イベント」が発生しない
OOo.Basic のオプションボタンは、[OFF⇒ON]変化のボタンに対しては
Changeイベントが起きますが、[ON⇒OFF]変化のボタンに対してはChange
イベントが起きません。
OFF 変化時に処理が必要(ボタンの強調表示解除など)な場合には、直前の
状態を保持して変化後と比較することで[ON⇒OFF]変化ボタンを探す必要が
あります。
オプションボタンの『 Tag プロパティ 』を利用して、上記の検索処理を行なう
関数を用意しました。
[ DownLoad : OptOffChange.ods ] 2009/10/8 -- Ver 1.1 --
2009/ 8/ 5 ( Ver 1.0 )
2009/10/ 8 ( Ver 1.1 )
ON⇒OFF 変化したボタンが無い場合の返却値を
Null から Nothing に変更しました。
変化ボタンの有無判定の条件を
IsNull ( vntOffCtrl ) ⇒ ( vntOffCtrl Is Nothing )
に修正してください( 障害例 )。
OptionButtonGetOffChange (オプションボタン配列 [, Index取得 ] )
[オプションボタン配列]
1グループのオプションボタンを格納した1次元のオブジェクト配列。
配列インデックスの開始は 0 でも 1 でもどちらでも構いません。
複数のオプションボタングループを使用する場合は、グループごとに
配列変数を用意します(2次元配列は不可)。
[Index 取得]
[ON⇒OFF]変化ボタンを配列のインデックスで取得する場合は True
を指定します。False 又は省略の場合は変化ボタンのオブジェクトが
返ります。
[返却値]
[ON⇒OFF]変化ボタンのコントロールオブジェクト または 配列のインデックス
が返ります。[ON⇒OFF]変化が無かった場合は Nothing 又は -1 が返ります。
〜利用方法(ダウンロードファイルにサンプルマクロがあります)〜
以下のタイミングで必ず実行してください。
・ ダイアログの初期化処理時
・ Changeイベント
・ マクロによるON/OFF設定後
OOo.Basic のオプションボタンは、[OFF⇒ON]変化のボタンに対しては
Changeイベントが起きますが、[ON⇒OFF]変化のボタンに対してはChange
イベントが起きません。
OFF 変化時に処理が必要(ボタンの強調表示解除など)な場合には、直前の
状態を保持して変化後と比較することで[ON⇒OFF]変化ボタンを探す必要が
あります。
オプションボタンの『 Tag プロパティ 』を利用して、上記の検索処理を行なう
関数を用意しました。
[ DownLoad : OptOffChange.ods ] 2009/10/8 -- Ver 1.1 --
2009/ 8/ 5 ( Ver 1.0 )
2009/10/ 8 ( Ver 1.1 )
ON⇒OFF 変化したボタンが無い場合の返却値を
Null から Nothing に変更しました。
変化ボタンの有無判定の条件を
IsNull ( vntOffCtrl ) ⇒ ( vntOffCtrl Is Nothing )
に修正してください( 障害例 )。
OptionButtonGetOffChange (オプションボタン配列 [, Index取得 ] )
[オプションボタン配列]
1グループのオプションボタンを格納した1次元のオブジェクト配列。
配列インデックスの開始は 0 でも 1 でもどちらでも構いません。
複数のオプションボタングループを使用する場合は、グループごとに
配列変数を用意します(2次元配列は不可)。
[Index 取得]
[ON⇒OFF]変化ボタンを配列のインデックスで取得する場合は True
を指定します。False 又は省略の場合は変化ボタンのオブジェクトが
返ります。
[返却値]
[ON⇒OFF]変化ボタンのコントロールオブジェクト または 配列のインデックス
が返ります。[ON⇒OFF]変化が無かった場合は Nothing 又は -1 が返ります。
〜利用方法(ダウンロードファイルにサンプルマクロがあります)〜
以下のタイミングで必ず実行してください。
・ ダイアログの初期化処理時
・ Changeイベント
・ マクロによるON/OFF設定後
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'_/
'_/ OptionButton Off-Change Event Support Function
'_/
'_/ [ OptionButtonGetOffChange ]
'_/
'_/ 2009/ 8/ 5 -- Ver 1.0 --
'_/ 2009/10/ 8 -- Ver 1.1 --
'_/ It is changed a return value when there is
'_/ not Off-Change-Button in Nothing from Null.
'_/
'_/ Creator : Keiichi Tsunoda
'_/ Blog : http://blog.livedoor.jp/addinbox/ (Japanese)
'_/
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Global Function OptionButtonGetOffChange(ByRef argOptBtn() As Object, _
Optional ByVal argIndex As Boolean) As Variant
Dim intBeforeTrueIndex As Integer
Dim blnIndex As Boolean
Dim i As Integer
If IsMissing(argIndex) Then
blnIndex = False
Else
blnIndex = argIndex
End If
intBeforeTrueIndex = -1
For i = LBound(argOptBtn) to UBound(argOptBtn)
If CBool(argOptBtn(i).Model.State) Then
argOptBtn(i).Model.Tag = "TRUE"
Else
Select Case argOptBtn(i).Model.Tag
Case "TRUE"
intBeforeTrueIndex = i
argOptBtn(i).Model.Tag = "FALSE"
Case ""
argOptBtn(i).Model.Tag = "FALSE"
Case Else '(FALSE)
End Select
End If
Next i
If blnIndex Then
OptionButtonGetOffChange = intBeforeTrueIndex 'Index or [-1]
Else
If (intBeforeTrueIndex = -1) Then
OptionButtonGetOffChange = Nothing
Else
OptionButtonGetOffChange = argOptBtn(intBeforeTrueIndex)
End If
End If
End Function
【 利用例 】
Private oOptGrp(1 to 4) As Object
Dim vntOffCtrl As Variant
'〜〜 オブジェクト配列の設定後 〜〜
For i = 1 to 4
oOptGrp(i) = oDialog.getControl("optBtn" & i)
Next i
vntOffCtrl = OptionButtonGetOffChange(oOptGrp)
'〜〜 Change イベント 〜〜
Private Sub OptItemListener_itemStateChanged(oEvent As com.sun.star.awt.ItemEvent)
Dim vntOffCtrl As Variant
oEvent.Source.Model.FontWeight = com.sun.star.awt.FontWeight.BOLD
vntOffCtrl = OptionButtonGetOffChange(oOptGrp)
If Not (vntOffCtrl Is Nothing) Then
vntOffCtrl.Model.FontWeight = com.sun.star.awt.FontWeight.NORMAL
End If
End Sub
'〜〜 Index 指定の場合 〜〜
vntOffCtrl = OptionButtonGetOffChange(oOptGrp, True)
If (vntOffCtrl <> -1) Then
oOptGrp(vntOffCtrl).Model.FontWeight = com.sun.star.awt.FontWeight.NORMAL
End If
'〜〜 マクロで ON 設定 〜〜
oOptGrp(1).Model.State = 1 '(ON)
oOptGrp(1).Model.FontWeight = com.sun.star.awt.FontWeight.BOLD
vntOffCtrl = OptionButtonGetOffChange(oOptGrp)
If Not (vntOffCtrl Is Nothing) Then
vntOffCtrl.Model.FontWeight = com.sun.star.awt.FontWeight.NORMAL
End If
'〜〜 マクロで OFF 設定 〜〜
oOptGrp(1).Model.State = 0 '(OFF)
oOptGrp(1).Model.FontWeight = com.sun.star.awt.FontWeight.NORMAL
vntOffCtrl = OptionButtonGetOffChange(oOptGrp)
Excel/VBA で作った 
