0

特定のウィンドウのスクリーンショットを撮るには、そのウィンドウの後ろに白色の TForm を配置する必要があります。ウィンドウの z オーダーを変更して正しく配置するには、どの Windows API を使用できますか?

4

3 に答える 3

4

機能をお試しくださいSetWindowPos()

于 2009-10-07T08:00:34.123 に答える
1

SendToBackDelphi では、メソッド.Top.Leftプロパティを使用できます。

form1.Top := ...;
form1.Left := ...;
form1.SendToBack;

プロシージャ SendToBack;

説明

SendToBack を使用して、重なっているコントロールまたはフォームの順序を変更します。

コントロールが互いに重なり合う順序 (Z オーダーとも呼ばれます) は、コントロールがフォームに配置される順序によって異なります。たとえば、フォームにラベルと画像を重ねて配置すると、フォームの最初に配置されたものが下に配置されます。ラベルと画像はどちらもウィンドウ化されていないコントロールであるため、期待どおりに「スタック」します。一番上のオブジェクトの SendToBack メソッドを呼び出して、他のオブジェクトの下に移動します。

ウィンドウ化された 2 つのコントロールの重なり順は、ウィンドウ化されていない 2 つのコントロールの重なり順と同じです。たとえば、フォームにメモを置き、その上にチェック ボックスを配置すると、チェック ボックスは上に残ります。チェック ボックスに対して SendToBack を呼び出すと、メモが一番上に表示されます。

ウィンドウ化されたコントロールとウィンドウ化されていないコントロールの重なり順を混在させることはできません。たとえば、メモ (ウィンドウ付きコントロール) をフォームに配置し、その上にラベル (ウィンドウなしコントロール) を配置すると、ラベルはメモの後ろに消えます。ウィンドウ化されたコントロールは、常にウィンドウ化されていないコントロールの上に積み上げられます。この例では、メモの SendToBack メソッドを呼び出しても何も起こらず、ラベルはメモの後ろに残ります。

SendToBack メソッドの実行時にコントロールに入力フォーカスがある場合、コントロールは入力フォーカスを失います。

(編集: WinSnapは、スクリーンショットを撮って編集するための非常に優れたユーティリティです)

于 2009-10-07T08:13:40.513 に答える
0

必要なウィンドウのハンドルを前面に表示できる場合は、次のように想定します。擬似コード:

MyAppWindow.BringToFront

に続く

TargetWindow.BringToFront

望ましい効果があるはずですよね?

于 2009-10-07T19:16:14.987 に答える