スクリーンショットを達成するためにデルファイ

私たちは、最初のデバイスコンテキストへのハンドルを取得する必要があり、この機能のために、それはMSDNに記載されており、GetDC関数によって得ることができます

GetDC関数は、指定されたウィンドウのクライアント領域または画面全体のデバイスコンテキスト(DC)へのハンドルを取得します。あなたは、DCに描画するために、後続のGDI関数で返されたハンドルを使用することができます。デバイスコンテキストは、その値がGDIによって内部的に使用される不透明なデータ構造です。
GetDCEx機能は、アプリケーションにクリッピングがクライアント領域で発生するかかどうかをより詳細に制御できますGetDC、に拡張したものです。
構文

(HDC GetDC
HWNDのhWnd __in
)。
パラメータ
[入力]のhWnd
DC取り出されるウィンドウへのハンドル。この値がNULLの場合、GetDCは、画面全体のDCを取得します。
戻り値
関数が成功すると、戻り値は指定されたウィンドウのクライアント領域のためのDCへのハンドルです。
関数が失敗した場合、戻り値はNULLです。

1.肯定フル可変方法により得られたストレージGetDC、HDC型ハンドル

1つの
2
VARの
DC:HDCと、
やがてハンドル2.割り当てが可変直流に取得する、GetDCを呼び出し、ハンドルのハンドルを取得するために、キャンバスに割り当て(FullCanvasのは可変です)

DC 1:= GetDC(0);
2 FullCanvasの:= TCanvas.Create;
3 fullCanvas.Handle:= DC;
3. FullCanvasの次に動作させるだけでなく、機能CopyRectここで使用されます

手順CopyRect(定数Destは:TRect;キャンバス:のTCanvas; constの出所:TRect);

canvas.Use CopyRectに別のキャンバスからコピー画像の一部は、TCanvasオブジェクトの画像に別のキャンバス上の画像の一部を転送します。

DESTは、ソース画像がコピーされるキャンバス上の矩形を指定します。キャンバスのパラメータは、元画像とキャンバスを指定します。

ソースはCopyModeので指定されたモードを使用してコピーされたソースキャンバスの部分をcopied.Theするソースキャンバスの部分に外接する四角形を指定します。

Wordはこの2つの領域が等しくない場合は、この2つの領域の長さと幅に等しいこの効果を、持っていない場合は、ズーム効果があるだろう、destはキャンバスのターゲット領域にコピーされたキャンバスエリアのソースのサイズです

コードをコピー
。SavePictureDialog1.Execute場合、1
2始める
3 BM:= TBitmap.Create;
4トライ。
5 bm.Width:= ABS(X1-X2);
6 bm.Height:= ABS(Y1-Y2);
7 bm.Canvas。 .CopyRect(のRect(0,0、bm.Width、bm.Height)、FullCanvasの、のRect(X1、Y1、X2、Y2));
8 bm.SaveToFile(SavePictureDialog1.FileName + 'BMP');
9最後に
10 BM .free;
11 END;
重複コード
前記bm.width:= ABS(X2-X1 )、bm.heigth:= ABS(Y2-Y1) フルスクリーンテーマのために必要な場合、2つのRECTのRectに設定されている(0、 0、screen.Width、Screen.heigth)

次のようにプログラムが実行されます


黒の背景レイヤーを達成するように操作された行

(1)フォームAlphaBlend 150に、TrueにAlphaBlendVaueを設定する、のBorderStyle:= bsNone。

フォームが作成されたとき(2)次の文を書きます

1つのSetWindowPos(0、HWND_TOP、0,0、Screen.Width、Screen.Height、SWP_DRAWFRAME)。
2 ClientHeight:= Screen.Height。
3 ClientWidth:= Screen.Width。

おすすめ

転載: www.cnblogs.com/blogpro/p/11446107.html