西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)Delphi → Delphi如何實現(xiàn)抓圖技術(shù)

Delphi如何實現(xiàn)抓圖技術(shù)

前往專題相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時間:2010/11/15 16:17:01字體大。A-A+

作者:佚名點擊:643次評論:0次標(biāo)簽: Delphi

Borland Delphi8.0光盤版
  • 類型:編程工具大小:83.1M語言:中文 評分:4.0
  • 標(biāo)簽:
立即下載
摘 要:本文以Delphi7.0作為開發(fā)平臺,給出了網(wǎng)絡(luò)監(jiān)控軟件中的兩種屏幕抓圖技術(shù)的設(shè)計方法和步驟。介紹了教師在計算機(jī)機(jī)房內(nèi)教學(xué)時,如何監(jiān)控學(xué)生計算機(jī)顯示器上的畫面,以保證教學(xué)的質(zhì)量和效果。

  引言

  隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,計算機(jī)網(wǎng)絡(luò)在各高等院校教學(xué)中的使用已非常普遍,但是,我們發(fā)現(xiàn)一個問題,在教學(xué)的過程中,由于老師是面對著學(xué)生,而背對著學(xué)生計算機(jī)的顯示器,不能隨時查看學(xué)生計算機(jī)顯示器上的內(nèi)容,所以,有的學(xué)生在教學(xué)中偷玩游戲,影響了教學(xué)的質(zhì)量和效果,因此,設(shè)計一款網(wǎng)絡(luò)監(jiān)控軟件,監(jiān)控學(xué)生計算機(jī),十分必要。為了實現(xiàn)這一目的,此系統(tǒng)應(yīng)具有以下功能:

  (1)教師用機(jī)可以循環(huán)顯示學(xué)生計算機(jī)的顯示器上的畫面。

 。2)教師用機(jī)可以動態(tài)顯示某一學(xué)生計算機(jī)的顯示器上的畫面。

 。3)教師用機(jī)可以對學(xué)生用計算機(jī)發(fā)出警告信息和控制信息。

 。4)學(xué)生用計算機(jī)開機(jī)自動運行服務(wù)端監(jiān)控程序。

  (5)為了防止學(xué)生用計算機(jī)的服務(wù)端監(jiān)控程序,被學(xué)生發(fā)現(xiàn)用Ctrl+Alt+Del關(guān)閉,在Ctrl+Alt+Del對話框中必須隱藏程序。同時,應(yīng)該隱藏程序在任務(wù)欄的按鈕。

  本文結(jié)合應(yīng)用實踐,重點向大家介紹在Delphi7.0中可以采用的兩種實現(xiàn)屏幕抓圖技術(shù)的操作方法。

  程序?qū)崿F(xiàn)

 。1)抓取屏幕圖像的難點有兩個:一是如何奪取屏幕的句柄,二是知道屏幕句柄后如何獲取屏幕的圖像。Borland公司的設(shè)計人員用畫布(Tcanvas)對象封裝了Windows的大部分圖形輸出功能,可以通過它以更直觀的方式和Windows的屏幕打交道,而不必關(guān)心令人頭疼的Windows API函數(shù)。具體程序如下:

procedure TForm1.Timer1Timer(Sender:TObject);//抓取屏幕,并保存到Image控件中
var
 Fullscreen:Tbitmap;
 FullscreenCanvas:TCanvas;
 dc:HDC;
begin
 Fullscreen:=TBitmap.Create;
 //創(chuàng)建一個BITMAP來存放圖象
 Fullscreen.Width:=screen.width;
 Fullscreen.Height:=screen.Height;
 DC:=GetDC(0); //取得屏幕的DC,參數(shù)0指的是屏幕
 FullscreenCanvas:=TCanvas.Create;
 //創(chuàng)建一個CANVAS對象
 FullscreenCanvas.Handle:=DC;
 Fullscreen.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height),
 fullscreenCanvas,Rect(0,0,Screen.Width,Screen.Height));
 //把整個屏幕復(fù)制到BITMAP中
 FullscreenCanvas.Free;
 //釋放CANVAS對象
 ReleaseDC(0,DC); //釋放DC
 //*******************************
 image1.picture.Bitmap:=fullscreen; //拷貝下的圖象賦給IMAGE對象
 image1.Width:=fullscreen.Width;
 image1.Height:=fullscreen.Height;
 fullscreen.free; //釋放bitmap
 form1.WindowState:=wsNormal; //復(fù)原窗口狀態(tài)
 form1.show; //顯示窗口
 messagebeep(1); //BEEP叫一聲,報告圖象已經(jīng)截取好了。
end;

 。2)Delphi的第三方控件ScreenCapture,它是一個很好的免費的截圖控件,可以輕松抓取任意大。ㄈ廉(dāng)然行)、屏幕的任何位置,還可以設(shè)置所截圖像的形狀、以及用何種模式截圖。下面介紹的是用TcmWindow模式截圖,使用非常簡單,使用效果可以與著名的抓圖軟件SnagIt32媲美。

procedure TForm1.BtnStartClick(Sender:TObject);
begin
 ScreenCapture1.start; //開始截圖
end;

 //當(dāng)截取屏幕成功時,此事件發(fā)生
 procedure TForm1.ScreenCapture1Capture(Sender:TObject;Bitmap:TBitmap);
begin
 //調(diào)整滾動窗口的大小以適應(yīng)截獲圖像的大小
 Scrollbox1.HorzScrollBar.Range:= Image1.width;
 Scrollbox1.VertScrollBar.Range:= Image1.height;
end;

procedure TForm1.FormCreate(Sender:TObject);
begin
 //載入entntacp.dll文件
 BtnStart.enabled:= ScreenCapture1.dllavailable;
 //顯示版本信息
 caption:= '屏幕抓圖軟件' + ScreenCapture1.version;
end;

//當(dāng)沒有足夠的內(nèi)存支持截取屏幕時,此事件發(fā)生
procedure TForm1.ScreenCapture1Error(Sender:TObject);
begin
 MessageDlg('屏幕截取時發(fā)生一個錯誤!請關(guān)閉其他應(yīng)用程序以獲得更多內(nèi)存資源.', mtError,[mbOK],0);
end;

 //當(dāng)用戶按“Esc”鍵,即取消屏幕截取時,此事件發(fā)生
procedure TForm1.ScreenCapture1UserCancelled(Sender:TObject);
begin
 MessageDlg('用戶取消屏幕截取。',mtInformation,[mbOK],0);
end;

  運行程序,效果如圖1和圖2所示。

delphi屏幕抓圖效果
圖1 運行效果圖
實現(xiàn)抓圖后的效果圖
圖2 抓取圖像后的效果圖

  結(jié)論

  通過對以上兩種程序代碼的調(diào)試運行,使用第三方控件的方法更易于設(shè)計實現(xiàn),文中的程序代碼全部在Win2000和Delphi7.0環(huán)境下調(diào)試通過。

 

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)