** [[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 |