開発ブログ - FireMonkey で poOwnerFormCenter

FireMonkey で poOwnerFormCenter

カテゴリ : 
技術メモ » Delphi » FireMonkey
執筆 : 
2014/8/26
Delphi XE5

なぜか FireMonkey on Windows では poOwnerFormCenter が効かないんですよね?
必ず poScreenCenter になってしまうのです。

ネットで情報を検索してみたら、とりあえずこんなのが見つかりました。

http://stackoverflow.com/questions/8195106/firemonkey-and-showing-modal-dialog-center-of-the-owner-form


Position is not implemented in FireMonkey by ShowModal.

と書いてあります!!
それはないでしょう?と思ったのですが、poOwnerFormCenter が機能しないのは事実なので、これを使ってみました。
しかし、うまくいきません。
仕方がないのでトレースしてみると、折角FormHelper でSetBounds しているのに、ShowModal 中で置き換えられてしまっています。

ソースを見る限りでは poOwnerFormCenter がサポートされていないわけではないようですが、なぜか ParentForm がアサインされていない場合は poScreenCenter に変えられてしまっているようなのです。
これはバグなのではないだろうか?と思っても仕方ありません。

先ほどのコードの最後の部分にちょっと細工をしてごまかしてみたら、無事にオーナーフォームセンターに表示ができました。
あまりお行儀良くないですけど...

ただ、このコードには問題があります。
Position を poDesigned に書き換えてしまうので...
私は通常 Form を自分で動的に生成しているので問題ありませんが、そうでない場合はきっと、2回目以降の動作に問題が発生してしまいますね
(前の位置に表示されてしまう?)


[追記]

私もいつも参考にさせていただいている山本隆さんのブログにこの件の記事がありました。
FireMonkey on WindowsではpoOwnerFormCenterが効かない(山本隆の開発日誌)
ここでは実行時型情報を使って ParentForm を設定することで、この問題を回避しています。
なるほどこんなやり方もあるんですね。
  • コメント (0)
  • トラックバック (0)

コメントの投稿

お気軽にコメントください : 投稿されたコメントは承認後に表示されます
プロダクツ

開発ブログ

Link

AD