喫茶XRAYトップページ


[9682] マルチディスプレイ対応返信 削除
2016/3/31 (木) 22:27:10 Mr.XRAY
マルチディスプレイのテスト用に,15 インチのモニタ接続してみました.
何とか机の上に置けました.左側が少しプライマリモニタの後ろに隠れていますが (^^;

で,サンプルの [370] やってみました.
あれっ !?
なるほどね.左端の座標はプライマリモニタの右端の座標を加えた値なのね.
でもディスプレイのデバイスコンテキストはモニタごとですからね.
キャプチャする時は,モニタごとに 0 から開始しないといけないのね.ふ〜ん...
そういうことなのね.分かったけど...

ということで先は永くなりそうでございます.
図はサブのモニタのワークエリアをキャプチャしたものです.



[9683] はまってしまった!!返信 削除
2016/4/2 (土) 15:19:52 Mr.XRAY
マウスフックでマウスカーソルの位置を取得するコードがあるのですが,

procedure TFormMonitorImage.WMApp100(var Message: TMessage);
var
  LPos : TPoint;
begin

  LPos.X := Message.LParamLo;
  LPos.Y := Message.LParamHi
end;

というコードを使っていたのです.
LPos の値がとんでも値になるんです.
そうです.Message.LParamLo, Message.LParamHi の値は WORD 値なんです.
WORD型は16ビット符号なし整数なんです.
これに気づくまで,えらい時間がかかってしまいました.もうっ,いやっ!

で,一応マルチモニタ対応のスクリーンキャプチャできました.
これから,テスト,コード整備などします.
でも,明日にしようっと !
あっ,明日はお花見だ... (^^)

ちょっとだけ機能を追加しました.赤枠の部分です.


[9684] Re:マルチディスプレイ対応返信 削除
2016/4/2 (土) 21:26:40 Mr.XRAY
取りあえず UP しました.
例によって,いろいろ修正があるかも知れません (^^;
記事の修正は明日以降.

[370_スクリーンキャプチャー ( アプリケーション )]
http://mrxray.on.coocan.jp/Delphi/plSamples/370_ScreenCapture1.htm


[9685] Re2:マルチディスプレイ対応返信 削除
2016/4/3 (日) 06:53:16 Mr.XRAY
> [370_スクリーンキャプチャー ( アプリケーション )]
> http://mrxray.on.coocan.jp/Delphi/plSamples/370_ScreenCapture1.htm


別のモニタにマウスカーソルが移動しても,
キャプチャ動作が中断しないようにしました.



[9698] Re3:マルチディスプレイ対応返信 削除
2016/4/4 (月) 19:19:20 Mr.XRAY
> > http://mrxray.on.coocan.jp/Delphi/plSamples/370_ScreenCapture1.htm

またまた修正して UP しました.
モニタをまたぐキャプチャができるようにしました.
一応,仮想画面全体(全モニタの画面) のキャプチャと,
モニタ単位のキャプチャを別にしました.


[9726] Re:マルチディスプレイ対応返信 削除
2016/4/9 (土) 23:10:19 Mr.XRAY
以下の記事を更新しました.
基本的にサンプルコードに変わりはありませんが,
マルチモニタ環境でのテスト結果の図を追加し,結果が把握しやすいコードにしました.

[020_画面 ( ディスプレイ ) の解像度の取得と変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/020_DisplayResolution.htm#top

実際のアプリでの注意については,参考リンクの DEKO さんの記事を参考にしてください.
TScreen についてもリンクの記事を参考にしてください.
実際の確認はしていません.

モニタの実サイズを取得するサンプルでの動作については,
多くのモニタ,Windows 8.1 ,10 のプライマリモニタでの確認が十分ではありません.
他の方の結果を待つしかないです.
(誰かが,実際にやってみて,ブログ等に,その結果を掲載するとか...)


それから,調べている時に,質問に対して,
≪「解像度」というのは DPI のことであって,ビクセル数である.≫
とレスしている方がいましたが,モニタ,ディスプレイの場合は,
「画面解像度」,「画面の解像度」と言う場合,一般的にピクセル数を意味すると
考えていいと思われます.


[9727] Re2:マルチディスプレイ対応返信 削除
2016/4/9 (土) 23:51:58 taka
▼ Mr.XRAYさん
> モニタの実サイズを取得するサンプルでの動作については,
> 多くのモニタ,Windows 8.1 ,10 のプライマリモニタでの確認が十分ではありません.
> 他の方の結果を待つしかないです.
> (誰かが,実際にやってみて,ブログ等に,その結果を掲載するとか...)


エミュレーターの設定で
ゲストOSのディスプレイ数を1から変更すると
指定した数のWindowsがディスプレイとして開くそうです


[9728] Re3:マルチディスプレイ対応返信 削除
2016/4/10 (日) 00:27:14 Mr.XRAY
> エミュレーターの設定で
> ゲストOSのディスプレイ数を1から変更すると
> 指定した数のWindowsがディスプレイとして開くそうです


知らんかった ...
10 まで設定できるんですね.VMware Workstation 12 Player の場合.


[9729] Re4:マルチディスプレイ対応返信 削除
2016/4/10 (日) 00:58:54 Mr.XRAY
> > エミュレーターの設定で
> > ゲストOSのディスプレイ数を1から変更すると
> > 指定した数のWindowsがディスプレイとして開くそうです


でも,これですね.物理的なモニタじゃないので...
1 つのモニタ分の解像度を小さくしないと...
ディスプレイにおさまりきらない ....

あっ,そうか.表示位置を移動すればいいのか... う〜む.


1024 X 768 を 2 つにして,横に並べた結果の図です.

[9730] Re5:マルチディスプレイ対応返信 削除
2016/4/10 (日) 13:31:02 Mr.XRAY
> あっ,そうか.表示位置を移動すればいいのか... う〜む.

Vmware のオンラインヘルプを読んだら,ディスプレイの解像度内にするように
書いてありました.
ということで,この案は却下 !! (^^;


INCM/CMT
Cyclamen v3.82