Top > OOobbs2 > 119

OOobbs2/119 Edit

  • サマリ: シートに追加したフォームの座標の取得と移動
  • 環境: Calc
  • 状態: 解決
  • 投稿者: 七志乃権兵衛?
  • 投稿日: 2008-08-05 (火) 08:15:19

質問 Edit

シートに追加したフォームの座標の取得と移動を実現するにはどうしたらいいのでしょうか?

createInstance で作ったフォームのインスタンスをグローバルで保持しておき、そのインスタンスの Position プロパティを参照したところ、数千単位のとんでもなく大きな数字が入っていて、このプロパティを書き換えても動かすことはできませんでした。

よろしければアドバイスお願いします。

回答 Edit

  • setPosition メソッドを使用してコントロールシェープの位置を変更します。
aPoint.X = 2000
aPoint.Y = 500
oControlShape.setPosition( aPoint )

一般的に OpenOffice.org のオブジェクトなどの位置やサイズが mm 単位で指定されている場合、1/100 mm 単位で指定します。たとえば、上記では 20 mm、5 mm に相当します。

コントロールシェープはグローバル変数に保持しなくてもフォームコントロールモデルからシェープを特定することができます。

  • はにゃ? 2008-08-05 (火) 17:10:00

  • すいません、よろしければ、フォームコントロールモデルからシェープを特定する方法を教えていただけますか?
    それから、移動させたいフォームはリストボックスなのですが、移動した際、項目を先頭に合わせたく、
    oListBox.SelectedItems	= Array(0)
    上記のようにしたのですが、あっているのでしょうか?
    一応、そのように処理されているのですが、選択位置を配列で設定するのに疑問を感じたもので。
  • PC のデータが全部消えたので今から書きますが・・・。後半、配列で位置を指定するのは、リストボックスが複数の項目を選択できるように設定可能なためです。複数の項目を選択状態にする方法と同じようにしてひとつの項目を選択状態にするというわけです。

下記の FindShape を使ってフォームコントロールからそのコントロールの XControlModel が所属するシェープを探します。

Sub Main
 oDoc = ThisComponent
 oDrawPage = oDoc.getDrawPage()
 oForm = oDrawPage.getForms().getByIndex(0)
 
 oControl = oForm.getByIndex(0)
 oShape = FindShape( oDrawPage, oControl )
 If NOT IsNull( oShape ) Then
   msgbox oShape.ShapeType
 End If
End Sub
Function FindShape( oShapes As Object, oControl As Object ) As Object
 Dim oFound As Object
 For i = 0 To oShapes.getCount() Step 1
   oShape = oShapes.getByIndex(i)
   If EqualUnoObjects( oShape.Control, oControl ) Then
     oFound = oShape
     Exit For
   End If
 Next
 FindShape = oShape
End Function
  • はにゃ? 2008-08-09 (土) 23:49:05

  • ありがとうございました。 PCのデータが復旧できることを祈ります。

感想,コメント,メモ Edit



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