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

擷取螢幕上的影像如何不取到自己的Form?

答題得分者是:wameng
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-02 12:02:07 IP:61.218.xxx.xxx 未訂閱
請教各位前輩    擷取螢幕上的影像如何不取到自己的Form?    我寫一個Form當按一Button後會擷取到目前螢幕但不含自己的Form 目前是用    self.Visible :=False; 的方式 但不行會擷取到自己 可能要等個2秒就可以,但是否有更好的方法可以不擷取到自己??    謝謝各位前輩!!         有了你這世界變的更美好!!     
程式如下:
procedure TForm1.Button1Click(Sender: TObject);
var d:HWND;
    dc:HDC;
begin
   self.Visible :=False;
   self.Image1.Picture.Graphic:=nil;     d:=GetDesktopWindow();
  if (d<>0) then
     begin
       dc:=GetDC(d);
       BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY);
       ReleaseDC(d,dc);
    end;       SELF.Show;
end;
 
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-02 13:24:11 IP:61.222.xxx.xxx 未訂閱
改成這樣試試!
procedure TfMain.Button1Click(Sender: TObject);
var d:HWND;
    dc:HDC;
begin
  ShowWindow(Handle,SW_HIDE);
  Sleep(50);
  Image1.Picture.Graphic:=nil;      d:=GetDesktopWindow();
  if (d<>0) then
     begin
       dc:=GetDC(d);
       BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY);
       ReleaseDC(d,dc);
    end;
  ShowWindow(Handle,SW_SHOW);
end;
SLEEP 用意再等待桌面自行刷新。
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-02 13:46:28 IP:61.218.xxx.xxx 未訂閱
引言: 改成這樣試試!
procedure TfMain.Button1Click(Sender: TObject);
var d:HWND;
    dc:HDC;
begin
  ShowWindow(Handle,SW_HIDE);
  Sleep(50);
  Image1.Picture.Graphic:=nil;      d:=GetDesktopWindow();
  if (d<>0) then
     begin
       dc:=GetDC(d);
       BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY);
       ReleaseDC(d,dc);
    end;
  ShowWindow(Handle,SW_SHOW);
end;
SLEEP 用意再等待桌面自行刷新。
可以了真是感謝!! 再請教 1. Sleep(50); 是等待50毫秒嗎?? 2. 這様寫會不會因電腦過於忙碌,來不級刷新呢,就取到自己了?? 謝謝 wameng 前輩
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-02 14:04:02 IP:61.222.xxx.xxx 未訂閱
1. 是的。單位為 MilliSeconds 2. 如果電腦過於忙碌,我想既使強迫刷新也是無效的。 如果要使桌面刷新,可以用下列方式。 Wnd := GetDesktopWindow; Wnd := FindWindowEx(Wnd, 0, 'Progman', nil); Wnd := FindWindowEx(Wnd, 0, 'SHELLDLL_DefView', nil); Wnd := FindWindowEx(Wnd, 0, 'SysListView32', nil); SendMessage(Wnd,WM_PAINT,0,0); 或者 InvalidateRect(Wnd, nil, TRUE);
系統時間:2024-05-05 22:15:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!