• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
    軟件
    軟件
    文章
    搜索

    首頁編程開發Delphi → Delphi如何實現抓圖技術

    Delphi如何實現抓圖技術

    前往專題相關軟件相關文章發表評論 來源:本站整理時間:2010/11/15 16:17:01字體大?。?em class="fontsize">A-A+

    作者:佚名點擊:643次評論:0次標簽: Delphi

    Borland Delphi8.0光盤版
    • 類型:編程工具大?。?i>83.1M語言:中文 評分:4.0
    • 標簽:
    立即下載
    摘 要:本文以Delphi7.0作為開發平臺,給出了網絡監控軟件中的兩種屏幕抓圖技術的設計方法和步驟。介紹了教師在計算機機房內教學時,如何監控學生計算機顯示器上的畫面,以保證教學的質量和效果。

      引言

      隨著網絡技術的飛速發展,計算機網絡在各高等院校教學中的使用已非常普遍,但是,我們發現一個問題,在教學的過程中,由于老師是面對著學生,而背對著學生計算機的顯示器,不能隨時查看學生計算機顯示器上的內容,所以,有的學生在教學中偷玩游戲,影響了教學的質量和效果,因此,設計一款網絡監控軟件,監控學生計算機,十分必要。為了實現這一目的,此系統應具有以下功能:

     ?。?)教師用機可以循環顯示學生計算機的顯示器上的畫面。

     ?。?)教師用機可以動態顯示某一學生計算機的顯示器上的畫面。

     ?。?)教師用機可以對學生用計算機發出警告信息和控制信息。

     ?。?)學生用計算機開機自動運行服務端監控程序。

     ?。?)為了防止學生用計算機的服務端監控程序,被學生發現用Ctrl+Alt+Del關閉,在Ctrl+Alt+Del對話框中必須隱藏程序。同時,應該隱藏程序在任務欄的按鈕。

      本文結合應用實踐,重點向大家介紹在Delphi7.0中可以采用的兩種實現屏幕抓圖技術的操作方法。

      程序實現

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

    procedure TForm1.Timer1Timer(Sender:TObject);//抓取屏幕,并保存到Image控件中
    var
     Fullscreen:Tbitmap;
     FullscreenCanvas:TCanvas;
     dc:HDC;
    begin
     Fullscreen:=TBitmap.Create;
     //創建一個BITMAP來存放圖象
     Fullscreen.Width:=screen.width;
     Fullscreen.Height:=screen.Height;
     DC:=GetDC(0); //取得屏幕的DC,參數0指的是屏幕
     FullscreenCanvas:=TCanvas.Create;
     //創建一個CANVAS對象
     FullscreenCanvas.Handle:=DC;
     Fullscreen.Canvas.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; //釋放bitmap
     form1.WindowState:=wsNormal; //復原窗口狀態
     form1.show; //顯示窗口
     messagebeep(1); //BEEP叫一聲,報告圖象已經截取好了。
    end;

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

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

     //當截取屏幕成功時,此事件發生
     procedure TForm1.ScreenCapture1Capture(Sender:TObject;Bitmap:TBitmap);
    begin
     //調整滾動窗口的大小以適應截獲圖像的大小
     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;

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

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

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

    delphi屏幕抓圖效果
    圖1 運行效果圖
    實現抓圖后的效果圖
    圖2 抓取圖像后的效果圖

      結論

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

     

      相關評論

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

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

      熱門評論

      最新評論

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

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>