Top > OOobbs3 > 110

** [[OOobbs3/110]] [#j7d9ef0d]
-''サマリ'': コントロールの配置を動的に変更する方法
-''環境'': Basic
-''状態'': 未解決
-''状態'': 解決
-''投稿者'': [[nari]]
-''投稿日'': 2013-04-07 (日) 17:49:08

*** 質問 [#z660ca12]
お世話になります。

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

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

コーディングしたファイルをアップロードするので、よろしくお願いいたします。
(画面の下の方からダウンロードできるようです)
*** 回答 [#p034b024]
- フォームコントロールは図形描写オブジェクトを皮を被っているコントロールです。配置は図形描写オブジェクトと同じ様に行えます。 -- はにゃ? &new{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? &new{2013-04-07 (日) 21:35:17};
- FindControl はコントローラからコントロールオブジェクト (XControl?) を取得していると思います。フォームのコントロールは、ボタンなどのウィンドウコントロールを図形描写オブジェクトでラップした形になっています。図形描写コンテナのドローページから該当のコントロールに対応する図形を検索してください。 -- はにゃ? &new{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? &new{2013-04-08 (月) 02:02:17};
#comment
*** 感想,コメント,メモ [#qae1a8dd]

#comment

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