「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1632
現在:1


スピンボタン表示中にSpinValueMinの更新ができない

ページOpenOffice.org FAQの登録ページ
投稿者匿名
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-05-01 12:35:12 (土)
OSWindowXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

ダイアログの5ページに表示しているスピンボタンの
下限値を更新したいのです。
5ページ目の初期表示の時は下限値の設定ができているのですが、
5ページを表示中に下限値を変更しても、その変更が保持されずに
初期表示時の下限値が生きているという現象です。
下限値の設定は初期表示も更新表示も下記コードで行っています。
どなたかアドバイスをお願いします。

oLabel = oDialog.getControl("Spin9")
oPeer = oLabel.Peer
oToolkit = oPeer.Toolkit
oSpinModel = CreateUnoService("com.sun.star.awt.UnoControlSpinButtonModel")
oSpinModel.Orientation = 1
oSpin = CreateUnoService("com.sun.star.awt.UnoControlSpinButton")
oSpin.setModel( oSpinModel )
oSpin.createPeer(oToolkit,oPeer)
oSpinListener9 = CreateUnoListener("SpinListener9_","com.sun.star.awt.XAdjustmentListener")
oSpin.addAdjustmentListener( oSpinListener9 )
oLabel.Model.PositionX = 490
oLabel.Model.PositionY = 240
oPosSize = oLabel.PosSize
oSpin.setPosSize~(0,0,oPosSize.Width,oPosSize.Height,com.sun.star.awt.PosSize.POSSIZE )
oSpinModel.SpinValue = svalue(8)
oSpinModel.SpinValueMin = svalue(8)
oDialog.Model.Step = 5
oDialog.Execute()

更新を別にはどうですか

ike@九州 (2010-05-01 16:32:48 (土))

Spin9 が全てのページにあるのか5ページ目なのか分かりませんが

Global oDialog As Object
Global oSpinModel As Object

'初期表示マクロ
Sub hogehoge
 〜
End Sub

'表示中ダイアログの更新マクロ
Sub ChangePage5
 oSpinModel.SpinValueMin = 新しい値
 oDialog.Model.Step = 5
 oDialog.Execute()
End Sub

スピンコントロールの作成方法

はにゃ? (2010-05-01 19:03:25 (土))

スピンコントロールはダイアログエディタで作成できませんが、以下の様にすると容易に挿入、ステップに応じた表示ができます。

Sub DialogSpinTest
 DialogLibraries.loadLibrary("Standard")
 oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
 oModel = oDlg.getModel()
 
 oSpinModel = oModel.createInstance("com.sun.star.awt.UnoControlSpinButtonModel")
 oModel.insertByName("spin", oSpinModel)
 oSpinModel.Step = 5
 oSpinModel.PositionX = 0
 oSpinModel.PositionY = 0
 oSpinModel.Height = 10
 oSpinModel.Width = 20
 
 oModel.Step = 5
 
 oSpinAdjust = CreateUnoListener("SpinAdjust_", "com.sun.star.awt.XAdjustmentListener")
 oSpin = oDlg.getControl("spin")
 oSpin.addAdjustmentListener(oSpinAdjust)
 
 oDlg.execute()
End Sub

' スピン値確認用
Sub SpinAdjust_adjustmentValueChanged(ev)
 ev.Source.getContext().getControl("TextField1").setText(ev.Source.getModel().SpinValue)
End Sub
Sub SpinAdjust_disposing(ev)
End Sub

' 最小値変更ボタン
Sub ButtonPushed(ev)
 oDlg = ev.Source.getContext()
 oDlg.getControl("spin").getModel().SpinValueMin = 10
End Sub

フォロー深謝です

ike@九州 (2010-05-02 08:04:28 (日))

親ダイアログ(現ページ)取得 以下なんですね
oDlg = ev.Source.getContext()

ページ切替時スピンボタンが残る

匿名 (2010-05-05 12:37:07 (水))

スピンボタンの最小値処理はうまく動きました。
ありがとうございます。
ただ、スピンボタンを表示している5ページから
1ページを表示するときに1ページ画面の中に
スピンボタンが残ってしまいます。
(1ページから5ページに移るときもスピンボタンが
 ページ移行前に表示される)
ページ切替のコードは下記ですが
更新処理中にロックをかけたり
スピンボタンをremoveしたり試しましたがうまく行きません。
どなたかアドバイスをお願いいたします。

Sub Menu5_Back
  Dim oDoc As Object
  oDoc = ThisComponent
  oDoc.addActionLock()
  oDoc.LockControllers()	
  IF( oModel.hasByName("Spin1", oSpinModel1))Then oModel.removeByName("Spin1", oSpinModel1)
  IF( oModel.hasByName("Spin2", oSpinModel2))Then oModel.removeByName("Spin2", oSpinModel2)
  IF( oModel.hasByName("Spin3", oSpinModel3))Then oModel.removeByName("Spin3", oSpinModel3)
  IF( oModel.hasByName("Spin4", oSpinModel4))Then oModel.removeByName("Spin4", oSpinModel4)
  IF( oModel.hasByName("Spin5", oSpinModel5))Then oModel.removeByName("Spin5", oSpinModel5)
  IF( oModel.hasByName("Spin6", oSpinModel6))Then oModel.removeByName("Spin6", oSpinModel6)
  IF( oModel.hasByName("Spin7", oSpinModel7))Then oModel.removeByName("Spin7", oSpinModel7)
  IF( oModel.hasByName("Spin8", oSpinModel8))Then oModel.removeByName("Spin8", oSpinModel8)
  IF( oModel.hasByName("Spin9", oSpinModel9))Then oModel.removeByName("Spin9", oSpinModel9)
  oDialog.Model.Step = 1
  setMonth(FirstDate)
  oDoc.removeActionLock()
  oDoc.UnLockControllers()
  oDialog.Execute()
End Sub

無題

K.Tsunoda (2010-05-05 13:38:42 (水))

匿名さんは、スピンボタンに【 Step値 】を設定していないようですが?

Step値に何も設定していなければ「基底ページ」で【常に表示】ですから
何ページへ移行しようが常に表示されますよ。

スピンボタン生成時にStep値は設定してるつもりなんですけど

匿名 (2010-05-05 14:08:48 (水))

下記コードはスピンボタンを生成してるコードですが
"oSpinModel1.Step = 5"の部分でStep値を設定してるんですが、
だめなんでしょうか?
oSpinModel1 = oModel.createInstance("com.sun.star.awt.UnoControlSpinButtonModel")

IF( oModel.hasByName("Spin1", oSpinModel1))Then oModel.removeByName("Spin1", oSpinModel1)
oModel.insertByName("Spin1", oSpinModel1)
oSpinModel1.Step = 5
oSpinModel1.Orientation = 1
oSpinModel1.PositionX = 150
oSpinModel1.PositionY = 80
oSpinModel1.Height = 50
oSpinModel1.Width = 30
oSpinModel1.SpinValue = svalue(0)
oSpinModel1.SpinValueMin = svalue(0)
blabel = oDialog.getControl( "LabelKarief1")
blabel.Model.Label = "あああ"
blabel.Model.Width = 70
blabel.Model.Height = 50
blabel.Model.PositionX = 20
blabel.Model.PositionY = 95
blabel = oDialog.getControl( "Daisu1")
blabel.Model.Width = 50
blabel.Model.Height = 50
blabel.Model.PositionX = 95
blabel.Model.PositionY = 90

コントロールを正しく削除できていない

はにゃ? (2010-05-05 16:12:20 (水))

ページを Step で変更するときにコントロールを削除しているようですが、正しく削除されていないためダイアログに残っています。

oSpin1 = oDialog.getControl("Spin1")
oDialog.removeControl(oSpin1)
oSpin1.dispose()
oDialog.getModel().removeByName("Spin1")

問題を整理します。

匿名 (2010-05-05 16:45:41 (水))

スピンボタンは9個必要です。~
スピンボタン生成のコードは下記です。(9番目のスピンボタン生成例)~

oSpinModel9 = oModel.createInstance("com.sun.star.awt.UnoControlSpinButtonModel")
IF( Not oModel.hasByName("Spin9", oSpinModel9))Then oModel.insertByName("Spin9", oSpinModel9)
oSpinModel9.Step = 5
oSpinModel9.Orientation = 1
oSpinModel9.PositionX = 490
oSpinModel9.PositionY = 240
oSpinModel9.Height = 50
oSpinModel9.Width = 30
oSpinModel9.SpinValue = svalue(8)
oSpinModel9.SpinValueMin = svalue(8)
blabel = oDialog.getControl( "LabelKarief9")
blabel.Model.Label = "ああああ"
blabel.Model.Width = 70
blabel.Model.Height = 50
blabel.Model.PositionX = 360
blabel.Model.PositionY = 255
blabel = oDialog.getControl( "Daisu9")
blabel.Model.Width = 50
blabel.Model.Height = 50
blabel.Model.PositionX = 435
blabel.Model.PositionY = 250

スピンボタンを操作して数値を選択して~
決定処理を行うと、その選択した数値が新たに最小値になる~
という処理をしたいんですけど、~
ダイアログの5ページの初期表示時も上のコードでスピンボタンを表示しています。~
oSpinModel9.SpinValueMin = svalue(8)この行で最小値が設定されます。~
つぎに、決定処理のときも同じコードを使ってるんですが~
svalue(8)は選択した数値に変わっていても~
oSpinModel9.SpinValueMinが更新されないというのが最初の現象でした。~
そこで、決定処理のときに一旦スピンボタンを全て削除して~
再び生成し直すということをしてみました。~
その結果は、再生成後のスピンボタンの操作ができなくなりました。~
(オブジェクトが設定されていません。というエラーがでる)~
さらに先ほど悩んでいた、1ページに移行するとスピンボタンが消え残る~
という現象になります。~
つまりスピンボタンの削除処理を無くすとスピンボタンの消え残り現象は~
なくなるということですが、最小値設定処理うまくいかないという最初の問題が残るということです。~

スピンボタン削除後の再生成方法は?

匿名 (2010-05-05 16:50:41 (水))

はにゃ?さんのご指摘のようにスピンボタンを削除したあとに
再生成するにはどうすればいいんでしょうか?
oModel.insertByName("Spin9", oSpinModel9)
ではエラーになります。

はにゃ? (2010-05-05 17:14:58 (水))

モデルからも削除しないといけないですね。上記は修正しておきました。

よく分からないので例を作成してみました。
filespinbutton.odt

スピンボタンの件は解決しました。

匿名 (2010-05-05 18:44:24 (水))

はにゃ?さんに提供して頂いたサンプルの中の
Sub ChangeMinValue(ev)の処理を選択数値の決定処理に
追加したら,スピンボタンを削除しなくても
再生成しなくても、全て問題なく動きました。
キーはev.Source.getContext()だということですね。
ありがとうございました。

いったん完了にしておきます

M.Kamataki (2010-05-07 10:57:36 (金))

ある程度、回答がまとまっているようなので、いったん「完了」にしておきます。

お名前:
題名:


添付ファイル: filespinbutton.odt 1152件 [詳細]