こんにちは。
ダイアログの表示位置が変わってしまう事で困っています。
何もせず単純にダイアログを表示させると、IDEでのダイアログプロパティ[PositionX / PositionY]
の値に拠らず、普通は「親ウィンドウの中央」に表示されます。
execute前に、マクロでダイアログの[PositionX / PositionY]を設定すれば、
当然、その位置で表示されます。
しかし、ダイアログの[PositionX / PositionY]を変更していなくても、
ダイアログの[Height / Width]をマクロで変更した場合に、
IDEでの[PositionX / PositionY]が活きてきて、その位置で表示されてしまいます。
条件によってダイアログ上のコントロールを隠す場合がある為、
隠すコントロール群をダイアログ右側に配置しておいて、
・全て見せる → 設計時のWidthのまま表示 ------------------→ 親ウィンドウ中央表示
・一部隠す → 右側が隠れるようにWidthを変更して表示 ----→ 若干右上に表示位置がズレる
という風にしています。
見せる場合には全部一画面で見せたいのでページを使わずにダイアログのサイズで対応しています。
Visible も広い空っぽの場所が見苦しいので、ここでは使っていません。
この2つのケースで初期表示位置が変わってしまう事で困っています。
両方で表示前に[PositionX / PositionY]を変更すれば位置は同じになりますが、
できれば画面中央(親ウィンドウ中央)の位置で揃えたいです。
強制的に『親ウィンドウ中央表示』とさせるオプション等はあるでしょうか?
(5/26 追記)
実際には、↓のカレンダーダイアログで、六曜の有無によって右側の六曜カラーガイダンスの
表示有無を処理するのに使っています。
http://blog.livedoor.jp/addinbox/archives/51199327.html
----------------------------------------------------------------------
【 5/28 追記 】
ダイアログのWidthを変更すると表示位置が画面中央からズレるという件について追加情報です。
原因は、Width値の変更方法にあったようです。Excel/VBAの習慣で、特に考えも無く
コード: 全て選択
  With oDialog.Model
      .Width = .getByName("ABC").PositionX - 5
  End With
(ABC が右側にある隠したいコントロールで、そのX座標値の手前にダイアログの幅を設定)
これで設定すると表示位置がズレたんですが、getPosSize/setPosSize で変更するように
変えたところ、Widthを変更しても画面中央に表示されました。
以下の返信にある、親ウィンドウの中央位置を算出して設定しなくても、そのままで画面中央になりました。
コード: 全て選択
  oABC_PosSize = oDialog.getControl("ABC").getPosSize()
  oDialog.setPosSize(0, 0, (oABC_PosSize.X - 5), 0, com.sun.star.awt.PosSize.WIDTH)
単位が違うようで、値が異なるのですね。
最初、PositionX値をsetPosSizeに与えたら、トンデモなくサイズが変わってしまいました。
OOoは「何を使ったら良いのか」で難しいです♪