如何取得元件上顯示的畫面內容 |
答題得分者是:william
|
Happyjalin
一般會員 發表:1 回覆:2 積分:0 註冊:2003-02-20 發送簡訊給我 |
是這樣的...
我想取得某一元件上顯示的畫面內容,
但是卻發現:
當該元件被其他視窗所遮蓋時,
我所取得的畫面內容會變成被遮蓋的畫面.
這是我採用的方式:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
DC: HDC;
Canvas: TCanvas;
MyBitmap: TBitmap;
begin
Canvas := TCanvas.Create;
MyBitmap := TBitmap.Create;
DC := GetDC( ColorGrid1.Handle );
try
with ColorGrid1 do begin
Canvas.Handle := DC;
MyBitmap.Width := Width;
MyBitmap.Height := Height;
MyBitmap.Canvas.CopyRect(Rect(0, 0, Width, Height), Canvas,
Rect(-10, -10, Width, Height));
end;
finally
ReleaseDC(0, DC);
Image1.Picture.Graphic := MyBitmap;
MyBitmap.Free;
Canvas.Free
end;
end; 請問有無其他方式可以真正取得該元件的顯示內容,且不受被遮蔽而受影響呢?? 請多多指教
------
請多多指教 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
http://www.fengyuan.com/article/wmprint.html For TWinControl, there is also a PaintTo method.
|
Happyjalin
一般會員 發表:1 回覆:2 積分:0 註冊:2003-02-20 發送簡訊給我 |
我照著他的sample code做, 失敗了
不知道我有無做錯...
nad我發現在panel上畫的畫面也沒有辦法取出來耶... 我做一個player, 是使用別人的component
那個component是以TCustomControl為base class寫的
不知道還有無其他方式可以取得它上面顯示的畫面,且不會受遮蔽所影響 以下是我照著他的sample code所寫出來的code:
procedure TPlayer.Button2Click(Sender: TObject);
var
hDCMem,hDCMem1 : HDC;
hDC_ : HDC;
rect: TRECT;
hBmp: HBITMAP;
hOld: HGDIOBJ;
begin
with panel1 do begin
hDC_ := GetDC( Handle );
hDCMem := CreateCompatibleDC(hDC_);
GetWindowRect( Handle , rect); hBmp := CreateCompatibleBitmap(hDC_, rect.right - rect.left, rect.bottom - rect.top);
ReleaseDC( Handle, hDC_); hOld := SelectObject(hDCMem, hBmp);
SendMessage(Handle, WM_PRINT, WPARAM(hDCMem), PRF_CHILDREN PRF_CLIENT PRF_ERASEBKGND PRF_NONCLIENT PRF_OWNED); SelectObject(hDCMem, hOld);
DeleteObject(hDCMem); OpenClipboard(Handle);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();
end;
end; 請多多指教
------
請多多指教 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
Happyjalin
一般會員 發表:1 回覆:2 積分:0 註冊:2003-02-20 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Tested with overlapping buttons, no problem:
procedure TForm1.BitBtn1Click(Sender: TObject); begin with TWinControl(Sender) do begin Image1.Picture.Bitmap.Width := Width; Image1.Picture.Bitmap.height := Height; with Image1.Picture.Bitmap do begin Canvas.FillRect(ClientRect); PaintTo(Canvas,0,0); end; end; end;P.S. Image1 is a TImage I put on the form. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |