プロが教える店舗&オフィスのセキュリティ対策術

複数のモニタを接続したディスプレイで、
フォームを表示させたいのですが、
フォームを閉じた際に、どの位置で表示されていたかを保存しておき、
それを元に、再度フォームを開くときには閉じられた位置に表示をさせたいと思います。
フォームのトップ、レフトを保存しておいた場合、2つめのディスプレイで
表示されていた場合も、一つ目のディスプレイに再度開いたときに表示されてしまいます。
閉じられたときには2台接続されていて、2台目に表示があったとしても、
次開かれるときに2台目がない場合表示されていないように見えたり、
GetSystemMetrics()関数を使用して仮想ディスプレイの全サイズを
取得しても、1台目と2台目のウィンドウサイズが違った場合、
座標をうまくずらすことができなかったりしています。
何とかなりませんでしょうか?
環境はC++Builder6です。
よろしくお願いいたします。

A 回答 (1件)

TForm::Top, Leftなどはモニターに表示されている領域内での位置です。



フォームが現在表示されているモニターに関するの情報はTForm::Monitorで取得できます。
TMonitor::Top, Leftなどで仮想デスクトップ内でのモニターの位置が取得できますから、それとTForm::Top, Leftなどを組み合わせればフォームの仮想デスクトップ内での絶対位置がわかります。

また、フォームを表示するときにも、TForm::Monitorで表示されるモニターを指定することが可能です。

マルチモニター環境下のモニター全体の情報はTScreen*型のグローバル変数であるScreenを介してTScreen::Monitorsを参照すれば得られます。

前回アプリケーション起動時とモニター構成が変っているときは、TScreen::MonitorFromRect(), MonitorFromPoint()あたりを使えば何とかなりそうです。

あとはヘルプとにらめっこしてがんばってください。


うちにはマルチモニター環境がないので私自身は試したことがありません(苦笑。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
おかげでマルチモニターでも希望する位置に表示する子おtができました。

お礼日時:2006/05/19 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A