線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1333
推到 Plurk!
推到 Facebook!

請問怎樣抓螢幕畫面較有效率?

尚未結案
ymkang
一般會員


發表:9
回覆:10
積分:3
註冊:2002-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-13 11:23:27 IP:203.66.xxx.xxx 未訂閱
請問如何即時的監看本機目前的螢幕畫面? 小弟目前的做法是放了一個Timer和Image 然後做了如下的事情: procedure TForm1.FormCreate(Sender: TObject); begin ScreenCanvas := TCanvas.Create; end; procedure TForm1.Timer1Timer(Sender: TObject); begin ScreenCanvas.Handle := GetDC(0);//ScreenCanvas是一個全域的TCanvas物件 Image1.Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height), ScreenCanvas,Rect(0, 0, Screen.Width, Screen.Height)); end; 然後Timer的Interval設成100 這樣做起來感覺似乎不是很有效率(有時候螢幕會閃動) 不知各位先進是否能提供有效率的做法 謝謝
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-13 11:30:19 IP:61.218.xxx.xxx 未訂閱
procedure TForm1.FormCreate(Sender: TObject); begin ScreenCanvas := TCanvas.Create; ScreenCanvas.Handle := GetDC(0); end;    procedure TForm1.Timer1Timer(Sender: TObject); begin //螢幕會閃動 是因為 image 重畫時會呼叫 清空背景 所以會造成 閃動    Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height), ScreenCanvas,Rect(0, 0, Screen.Width, Screen.Height));    end;         發表人 - cmf 於 2003/02/13 11:31:17
------
︿︿
ymkang
一般會員


發表:9
回覆:10
積分:3
註冊:2002-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-13 12:40:59 IP:61.222.xxx.xxx 未訂閱
我已經照著cmf大大的方法修改了 不過還是會閃ㄋㄟ 有沒有不用Timer就可以同步即時顯示的方法?
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-13 13:01:11 IP:61.218.xxx.xxx 未訂閱
請參考下列 再自行修改    unit Unit1;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs;    type      TDrawScreen= class(TThread)   private     { Private declarations }     procedure Draw;          protected     procedure Execute; override;   public      end;      TForm1 = class(TForm)     procedure FormCreate(Sender: TObject);   private     { Private declarations }     FD:TDrawScreen;     Procedure WMEraseBkgnd(var message:TMessage); message WM_ERASEBKGND;      public     { Public declarations }     ScreenCanvas:TCanvas;   end;    var   Form1: TForm1;    implementation    {$R *.dfm}    procedure  TDrawScreen.Execute; begin     Synchronize(Draw); end;    procedure TDrawScreen.Draw; begin     Form1.Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height),Form1.ScreenCanvas,Rect(0, 0, Screen.Width, Screen.Height));        end;        procedure TForm1.FormCreate(Sender: TObject); begin    ScreenCanvas := TCanvas.Create;    ScreenCanvas.Handle := GetDC(0);    FD:=TDrawScreen.Create(FALSE); end;    Procedure TForm1.WMEraseBkgnd(var message:TMessage); begin message.Result:=1; end;        end.    
------
︿︿
系統時間:2024-04-26 5:03:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!