在panel上放了很多的图片控件显示图片,想把panel显示的所有内容抓成一张图显示在一个image里该怎样做,更难点的, 可以选择想要抓的域区保存为图片(选的时候出现一个虚线拉框)分不够可以加.
解决方案 »
- The future of Delphi looks brighter than ever before!!!
- 请教:delphi2007怎样操作sqlite?
- adoquery的一个问题,查询老是报错!“FROM子句语法错误”
- 谁有OFFICE软件工具栏上的按钮图标?
- 怎样获得窗口最小化时的消息?
- 本人有大量控件(代源码),有需要的同志 来信索取
- 我在打印预览的时候为什么页数会不停的增加!因为数据库里要存一遍文章,我用的是MEMO字段,在打印时用DBRichText??高手请帮个忙!
- *****************怎样在局域网中 编程读取共享文件夹的文件?
- 这个功能能用SQL语句直接完成吗?
- 数据库文件
- 初学者的问题
- 软件外包应注意哪些问题?
1 屏幕拷贝到剪接区,然后读出
2 或者用DC的bitblt创建一张一样的Bmp
然后再付给image
begin
Image1.Width := Panel1.Width;
Image1.Height := Panel1.Height;
BitBlt(Image1.Canvas.Handle,
0,
0,
Panel1.Width,
Panel1.Height,
Form1.Canvas.Handle,
Panel1.Left,
Panel1.Top,
SRCCOPY);
end;
然后用ScreenToClient和ClientToParent转换一下坐标
改变BitBlt的参数,就行了
var
dc: hdc;
Mycan: Tcanvas;
R: TRect;
Mybmp:TBitmap;
p, CP:TPoint ;
begin
Mybmp := Tbitmap.Create; {建立BMPMAP }
Mycan := TCanvas.Create; {屏幕截取}
dc := GetWindowDC(0); try
p.x:= Panel1.Left;
p.y:= Panel1.Top;
CP:= ClientToScreen(p); Mycan.Handle := dc;
R := Rect(CP.x,CP.y,CP.x+Panel1.Width,CP.y+Panel1.Height);
Mybmp.Width := Panel1.Width;
Mybmp.Height := Panel1.Height;
Mybmp.Canvas.CopyRect(Mybmp.Canvas.ClipRect,Mycan,R);
if savedialog1.Execute then
mybmp.SaveToFile(savedialog1.filename+'.bmp');
finally
releaseDC(0, DC);
mycan.Free;
mybmp.Free;
end;
end;