Borland Company (現在は INPRISE Company に改名) の DELPHI が、現在最も便利な Windows プログラムです。
企画ツールの一つ。 DELPHI はデータベース開発ツールとして登場すると多くの人が思っています。
効率的な Windows プログラムを驚異的なスピードで開発できます。
ここで、DELPHI を使用して実用的な画面コピー プログラムを作成します。 見てください、下の写真
これは、プログラムしたプログラムを実行した後に地域画面をコピーする例です。
Borland Company の才能あるデザイナーは、キャンバス (Tcanvas) オブジェクトを使用して、Windows のほとんどのグラフィックスをカプセル化します。
Windows画面をより直感的に扱える出力機能、
また、Windows API 関数の悩みを心配する必要もありません。 以下の短いプログラムで全体を実現できます。
画面イメージがコピーされます。
var //変数宣言
フルスクリーン:Tビットマップ;
フルスクリーンキャンバス:TCanvas;
DC:HDC;
//------------------------------------------------ ----------
DC := GetDC (0); // 画面の DC を取得します。パラメータ 0 は画面を参照します。
FullscreenCanvas := TCanvas.Create; // CANVAS オブジェクトを作成します。
FullscreenCanvas.Handle := DC //画面の DC を HANDLE に割り当てます。
フルスクリーン.キャンバス.CopyRect
(Rect (0, 0, screen.Width,screen.Height),
フルスクリーンキャンバス、
Rect (0, 0, Screen.Width, Screen.Height));
//画面全体をBITMAPにコピー
FullscreenCanvas.Free // CANVAS オブジェクトを解放します。
ReleaseDC (0, DC) //DC をリリースします。
//SCREEN オブジェクトは DELPHI によって事前定義された画面オブジェクトなので、直接使用してください。
上記のコードを読むと、DELPHI を使用して画面コピー プログラムを作成するのが実に簡単であることがわかります。
もちろん、上記のコードだけでは十分ではありません。実際の画面コピー プログラムを作成する必要があります。それについては以下で説明します。
主なプログラミングのアイデアは次のとおりです。
1.全画面コピーの実装
まず画面コピープログラムを非表示にし、一定時間が経過した後、上記のプログラムを使用して画面コピーを実現します。
コピー。
2. リージョンコピーの導入
領域コピーを実現するには、最初に全画面コピー プログラムを呼び出して画面全体をコピーする必要があります。
ダウンロードし、コピーした画像を画面に表示して、ユーザーが
必要な領域を選択し、最後にユーザーが選択した領域をコピーします。
プログラミングの実装:
1. まず、DELPHI3 でプロジェクトを開きます。
2. TPANEL コンポーネントを FORM 上に配置し、ALIGN=ALTOP を設定して、コンポーネント バー「ADDITIONAL」を選択します。
TSCROLLBOX を FORM 上に配置し、ALIGN=ALCLIENT を設定してから、
TIMAGE オブジェクト。
3. PANEL に 4 つのボタン (FULL SCREEN、REGIN、SAVE、EXIT) を配置します。
4. 簡単にできることを先に実行し、EXIT ボタンの CLICK イベントにコードを記述します
プロシージャ TForm1.ExitClick(送信者: TObject);
始める
近い;
終わり;
5. 次に、全画面コピーを実現します。FROM にタイマー TTIMER を配置し、ENABLED を設定します。
FALSE の場合、INTERVAL は 500 に設定されます。これは、0.5 秒ごとにアクティブ化されることを意味します。 TIMER コンポーネントをダブルクリックし、次のように記述します。
コード。
プロシージャ TForm1.Timer1Timer(送信者: TObject);
変数
フルスクリーン:Tビットマップ;
フルスクリーンキャンバス:TCanvas;
DC:HDC;
始める
timer1.Enabled:=false // クロックをキャンセルします。
Fullscreen := TBitmap.Create // 画像を保存するための BITMAP を作成します。
フルスクリーン.幅 := スクリーン.幅;
フルスクリーン.高さ := スクリーン.高さ;
DC := GetDC (0); // 画面の DC を取得します。パラメータ 0 は画面を参照します。
FullscreenCanvas := TCanvas.Create; // CANVAS オブジェクトを作成します。
フルスクリーンキャンバスハンドル:= DC;
フルスクリーン.キャンバス.CopyRect
(Rect (0, 0, screen.Width, screen.Height)、fullscreenCanvas、
Rect (0, 0, Screen.Width, Screen.Height));
//画面全体をBITMAPにコピー
FullscreenCanvas.Free // CANVAS オブジェクトを解放します。
ReleaseDC (0, DC) //DC をリリースします。
//*****************************
image1.picture.Bitmap:=fullscreen;//コピーした画像をIMAGEオブジェクトに割り当てる
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free //ビットマップを解放します。
form1.WindowState:=wsNormal; // ウィンドウの状態を復元します。
form1.show; // ウィンドウを表示します。
messagebeep(1); //ビープ音が 1 回鳴り、画像がキャプチャされたことを報告します。
終わり;
6. FULLSCREEN ボタンの次のコードは非常に簡単です。
プロシージャ TForm1.FullscreenClick(送信者: TObject);
始める
form1.WindowState:=wsMinimized; //プログラムウィンドウを最小化します。
form1.hide //プログラムを非表示にする
timer1.enabled:=true; //タイマーを開きます。
終わり;
7. 画像をコピーしたら、もちろん保存する必要があります。次のように記述します。
コードをダウンロードします。
プロシージャ TForm1.Save1Click(送信者: TObject);
始める
保存された場合dialog1.Executeその後
始める
form1.Image1.Picture.SaveToFile(savedialog1.filename)
終わり;
終わり;
8. 以下はゾーンコピーの実装です。 次に、FORM を新規作成し、BorderStype を bsNone に設定して表示できるようにします。
フルスクリーンの場合は、TIMAGE コンポーネントをその上に配置し、ALIGN を ALCLIENT に設定し、TTIMER を配置します。
ウィジェットの場合、TIMER ウィジェットのプログラムは上記のものと非常によく似ています。最初に達成する必要があるのは全画面コピーであるためです。
カウリー。
プロシージャ TForm2.Timer1Timer(送信者: TObject);
変数
フルスクリーン:Tビットマップ;
フルスクリーンキャンバス:TCanvas;
DC:HDC;
始める
timer1.Enabled:=false;
フルスクリーン := TBitmap.Create;
フルスクリーン.幅 := スクリーン.幅;
フルスクリーン.高さ := スクリーン.高さ;
DC := GetDC (0);
フルスクリーンキャンバス := TCanvas.Create;
フルスクリーンキャンバスハンドル:= DC;
Fullscreen.Canvas.CopyRect (Rect
(0, 0, screen.Width, screen.Height)、フルスクリーンキャンバス、
Rect (0, 0, Screen.Width, Screen.Height));
フルスクリーンキャンバス。無料。
ReleaseDC (0, DC);
image1.picture.Bitmap:=フルスクリーン;
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
フルスクリーン。無料。
form2.WindowState:=wsMaximized;
form2.show;
メッセージビープ音(1);
倍数:=-1;
フォールディ:=-1;
image1.Canvas.Pen.mode:=pmnot; //ペンモードが反転されます。
image1.canvas.pen.color:=clblack; //ペンは黒です。
image1.canvas.brush.Style:=bsclear; //空白のブラシ
フラグ:= true;
終わり;
9. TIMAGE コンポーネントには 2 つのイベント プログラムを記述する必要があります。1 つは ONMOUSEDOWN で、もう 1 つは
オンマウスムーブです。
10. この時点で、領域コピーのアイデアを振り返ることができます。
が取得され、画面上にも表示されます。 マウスの左ボタンを押して領域の原点に移動します。
原点とマウスの間に長方形があり、マウスを再度押すと変化します。
このとき、ターゲットの左ボタンをクリックすると、四角形で囲まれた領域が取得したい画像になります。
11. したがって、MOUSEDOWN には 2 つの応答処理があります。次の手順を参照してください。
プロシージャ TForm2.Image1MouseDown
(送信者: TObject; ボタン: TMouseButton;
シフト: TShiftState; X、Y: 整数);
変数
幅、高さ:整数;
新しいビットマップ:Tビットマップ;
始める
if (trace=false) then // TRACE はマウスが追跡されているかどうかを示します
begin //初めてマウスの左ボタンをクリックして、マウスの追跡を開始します。
フラグ:=false;
image1.canvas で行う
始める
moveTo(foldx,0);
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
終わり;
x1:=x;
y1:=y;
古いx:=x;
古い:=y;
トレース:= true;
image1.Canvas.Pen.mode:=pmnot; //ペンモードが反転されます。
//元の場所に四角形を再度描画します。これは四角形を消去することと同じです。
image1.canvas.pen.color:=clblack; //ペンは黒です。
image1.canvas.brush.Style:=bsclear;//空のブラシ
終わり
それ以外
begin //2 回目のクリックは、長方形が取得されたことを示します。
//FORM1 の IMAGE コンポーネントにコピーします。
x2:=x;
y2:=y;
トレース:=false;
image1.canvas.rectangle(x1,y1,oldx,oldy);
幅:=abs(x2-x1);
高さ:=abs(y2-y1);
form1.image1.Width:=幅;
form1.image1.Height:= 高さ;
newbitmap:=Tbitmap.create;
newbitmap.width:=width;
newbitmap.height:=height;
newbitmap.Canvas.CopyRect
(Rect (0, 0, width, height),form2.image1.canvas,
Rect (x1, y1,x2,y2)); //コピー
form1.image1.picture.bitmap:=newbitmap; //FORM の IMAGE に配置します。
新しいビットマップ.無料;
form2.非表示;
form1.show;
終わり;
終わり;
12. MOUSEMOVE の処理は、原点とマウスの現在位置との間に長方形を描画および消去し続けることです。
長方形を除く。
プロシージャ TForm2.Image1MouseMove
(送信者: TObject; シフト: TShiftState; X,
Y: 整数);
始める
if trace=true then //マウスを追跡していますか?
begin //はい、古い四角形を消去して、新しい四角形を描きます
image1.canvas で行う
始める
長方形(x1,y1,oldx,oldy);
長方形(x1,y1,x,y);
古いx:=x;
古い:=y;
終わり;
終わり
else if flag=true then //マウスがある場所に十字を描きます
始める
image1.canvas で行う
始める
moveTo(foldx,0); //古い十字を消去します。
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
moveTo(x,0); //新しい十字を描画します
LineTo(x,screen.height);
moveto(0,y);
lineto(screen.width,y);
倍数x:=x;
フォルディ:=y;
終わり;
終わり;
終わり;
13. さて、REGION ボタンのコードの作成に戻りましょう。
プロシージャ TForm1.RegionClick(送信者: TObject);
始める
form1.非表示;
form2.非表示;
form2.Timer1.Enabled:=true;
終わり;
さて、ようやく正常に完了しました。もう一度実行して、美しい画面をコピーしましょう。 見て
DELPHI は優れたデータベース開発ツールであるだけでなく、WINDOWS を作成するための優れたツールでもあります。
プログラムの良い助っ人です。 素晴らしいデルフィだ!と感嘆せずにはいられません。
Jia Xuejie、寧波市Youhe Lane