Top > OOobbs3 > 110

OOobbs3/110 Edit

  • サマリ: コントロールの配置を動的に変更する方法
  • 環境: Basic
  • 状態: 解決
  • 投稿者: nari?
  • 投稿日: 2013-04-07 (日) 17:49:08

質問 Edit

お世話になります。

こちらのサイトで拝見した 【タブっぽくコントロールの表示切り替え】 http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FForm%2FMemo を拡張し、 コントロールの座標値を動的にずらすことで、 メンテナンス効率を良くしたいのですが、 コントロールの配置が変更できません。

どうすれば、コントロールの座標値をマクロで動的に設定できるでしょうか?

コーディングしたファイルをアップロードするので、よろしくお願いいたします。 (画面の下の方からダウンロードできるようです)

回答 Edit

  • フォームコントロールは図形描写オブジェクトを皮を被っているコントロールです。配置は図形描写オブジェクトと同じ様に行えます。 -- はにゃ? 2013-04-07 (日) 18:44:17
  • 下のサンプルファイルにて、下記のように座標値を設定しようとしている箇所があるのですが、 値の設定が反映されません。 エラーも出ないので、何が違っているのかがわかりません。

お手数おかけいたしますが、よろしくお願いいたします

'レイアウトを初期化する
Sub InitLayout(oForm As Object)
 
 oDoc = ThisComponent
 oController = oDoc.getCurrentController()
 oDoc.lockControllers() ' コントローラをロックしてチラつきを少し防ぐ
 
 'On Error GoTo Handler
 
 For Each aTab In InitTabs()
		For Each sName In aTab.ControlNames
			Item = FindControl(sName,oForm, oController)
			Pos = Item.view.getPosSize ()
			Item.setPosSize( _
				Pos.X + aTab.ShiftX, _
				Pos.Y + aTab.ShiftY, _
				Pos.Width,Pos.Height, com.sun.star.awt.PosSize.POSSIZE _
			)
			Item.setVisible( False )
		Next sName
 Next aTab
 oDoc.unlockControllers()
 'Handler:
 'oDoc.unlockControllers()
End Sub
  • nari? 2013-04-07 (日) 21:35:17
  • FindControl はコントローラからコントロールオブジェクト (XControl?) を取得していると思います。フォームのコントロールは、ボタンなどのウィンドウコントロールを図形描写オブジェクトでラップした形になっています。図形描写コンテナのドローページから該当のコントロールに対応する図形を検索してください。 -- はにゃ? 2013-04-08 (月) 00:52:05

ありがとうございます。 おかげさまでできました。 サンプルファイルもアップしておきます。

'レイアウトを初期化する
Sub InitLayout(oDrawPage,oForm As Object)
 
 oDoc = ThisComponent
 oController = oDoc.getCurrentController()
 oDoc.lockControllers() ' コントローラをロックしてチラつきを少し防ぐ
 
 'On Error GoTo Handler
 
 For Each aTab In InitTabs()
		For Each sName In aTab.ControlNames
			Item = FindDrawObjByControlName(sName,oDrawPage)
			aPoint = CreateUnoStruct("com.sun.star.awt.Point")
			aPoint.X = Item.Position.X + aTab.ShiftX
			aPoint.Y = Item.Position.Y + aTab.ShiftY
			Item.Position = aPoint
		Next sName
 Next aTab
 oDoc.unlockControllers()
 'Handler:
 '  oDoc.unlockControllers()
End Sub
Function FindDrawObjByControlName(cName As String,oDrawPage)	
 	For Each DrawObj In oDrawPage
		If DrawObj.Control.Name = cName Then
			FindDrawObjByControlName = DrawObj
		End If
	Next DrawObj	
End Function
  • nari? 2013-04-08 (月) 02:02:17

感想,コメント,メモ Edit



Attach file: fileTabLike_Form_ex2.odt 125 download [Information] fileTabLike_Form_ex.odt 139 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