var
bmp:Tbitmap;
Can:TCanvas;
dc:HDC;
begin
bmp:=TBitmap.Create;
bmp.Width:=memo1.width;
bmp.Height:=memo1.Height;
DC:=GetDC(memo1.Handle);
can:=TCanvas.Create;
can.Handle:=DC;
bmp.Canvas.CopyRect(Rect(0,0,memo1.Width,memo1.Height),can,Rect(0,0,memo1.Width,memo1.Height));
can.Free;
ReleaseDC(0,DC);
image1.Picture.bitmap:=bmp;
bmp.free;
end;上面这段代码能够抓取memo1的窗体图像 并保存为bmp图像让image显示。
问题来了。
1.这个抓图是抓取的整个屏幕的图像,不怎么好解释。举个例子 把memo1一半放置于窗体外面然后执行上面的代码。就一半是memo一半是桌面或是其它程序的界面屏幕上显示的什么就是什么。反正就是显示的memo1范围的屏幕,而不是memo的图像。
2.memo如果超出屏幕比如top:=10000;在执行上面的代码。抓取的就是空白。什么也没有。我要的效果就是 抓取指定控件如memo的图像。哪怕控件在其它控件的下层或是超出屏幕以外如TOP:=50000;都能够正常抓起其图像。问过很多人。都说不能实现这样的效果。我想得到一个确定的答案。我觉得可以实现这样的效果。
我自己能力有限。帮帮忙。分不够可以加
bmp:Tbitmap;
Can:TCanvas;
dc:HDC;
begin
bmp:=TBitmap.Create;
bmp.Width:=memo1.width;
bmp.Height:=memo1.Height;
DC:=GetDC(memo1.Handle);
can:=TCanvas.Create;
can.Handle:=DC;
bmp.Canvas.CopyRect(Rect(0,0,memo1.Width,memo1.Height),can,Rect(0,0,memo1.Width,memo1.Height));
can.Free;
ReleaseDC(0,DC);
image1.Picture.bitmap:=bmp;
bmp.free;
end;上面这段代码能够抓取memo1的窗体图像 并保存为bmp图像让image显示。
问题来了。
1.这个抓图是抓取的整个屏幕的图像,不怎么好解释。举个例子 把memo1一半放置于窗体外面然后执行上面的代码。就一半是memo一半是桌面或是其它程序的界面屏幕上显示的什么就是什么。反正就是显示的memo1范围的屏幕,而不是memo的图像。
2.memo如果超出屏幕比如top:=10000;在执行上面的代码。抓取的就是空白。什么也没有。我要的效果就是 抓取指定控件如memo的图像。哪怕控件在其它控件的下层或是超出屏幕以外如TOP:=50000;都能够正常抓起其图像。问过很多人。都说不能实现这样的效果。我想得到一个确定的答案。我觉得可以实现这样的效果。
我自己能力有限。帮帮忙。分不够可以加
bit:TBitmap;
begin
bit:=TBitmap.Create;
bit.setsize(Memo1.Width,Memo1.Height);
BitBlt(bit.Canvas.Handle,0,0,Memo1.Width,Memo1.Height,GetWindowDC(Memo1.Handle), 0, 0, SRCCOPY);
Bit.SaveToFile('Memo.bmp');
Bit.Free;
end;