特定のウィンドウのスクリーンショットを撮るには、そのウィンドウの後ろに白色の TForm を配置する必要があります。ウィンドウの z オーダーを変更して正しく配置するには、どの Windows API を使用できますか?
3 に答える
機能をお試しくださいSetWindowPos()
。
SendToBack
Delphi では、メソッド.Top
と.Left
プロパティを使用できます。
form1.Top := ...;
form1.Left := ...;
form1.SendToBack;
プロシージャ SendToBack;
説明
SendToBack を使用して、重なっているコントロールまたはフォームの順序を変更します。
コントロールが互いに重なり合う順序 (Z オーダーとも呼ばれます) は、コントロールがフォームに配置される順序によって異なります。たとえば、フォームにラベルと画像を重ねて配置すると、フォームの最初に配置されたものが下に配置されます。ラベルと画像はどちらもウィンドウ化されていないコントロールであるため、期待どおりに「スタック」します。一番上のオブジェクトの SendToBack メソッドを呼び出して、他のオブジェクトの下に移動します。
ウィンドウ化された 2 つのコントロールの重なり順は、ウィンドウ化されていない 2 つのコントロールの重なり順と同じです。たとえば、フォームにメモを置き、その上にチェック ボックスを配置すると、チェック ボックスは上に残ります。チェック ボックスに対して SendToBack を呼び出すと、メモが一番上に表示されます。
ウィンドウ化されたコントロールとウィンドウ化されていないコントロールの重なり順を混在させることはできません。たとえば、メモ (ウィンドウ付きコントロール) をフォームに配置し、その上にラベル (ウィンドウなしコントロール) を配置すると、ラベルはメモの後ろに消えます。ウィンドウ化されたコントロールは、常にウィンドウ化されていないコントロールの上に積み上げられます。この例では、メモの SendToBack メソッドを呼び出しても何も起こらず、ラベルはメモの後ろに残ります。
SendToBack メソッドの実行時にコントロールに入力フォーカスがある場合、コントロールは入力フォーカスを失います。
(編集: WinSnapは、スクリーンショットを撮って編集するための非常に優れたユーティリティです)
必要なウィンドウのハンドルを前面に表示できる場合は、次のように想定します。擬似コード:
MyAppWindow.BringToFront
に続く
TargetWindow.BringToFront
望ましい効果があるはずですよね?