Delphi 截图的问题,有代码,请高手帮帮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 截图的问题,有代码,请高手帮帮相关的知识,希望对你有一定的参考价值。

本人小菜鸟.请大大们多指教
这个源码是截屏目的.但我想截指定的窗口,比如 计算器 窗口.我应该改哪里?谢谢
var
Fullscreen: Tbitmap;
FullscreenCanvas: TCanvas;
dc: HDC;
begin
Fullscreen := TBitmap.Create; //创建一个BITMAP来存放图象
Fullscreen.Width := 100;
Fullscreen.Height := 100;
DC := GetDC(0); //取得屏幕的 DC,参数0指的是屏幕
FullscreenCanvas := TCanvas.Create; //创建一个CANVAS对象
FullscreenCanvas.Handle := DC;

Fullscreen.Canvas.CopyRect
(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(0, 0, Screen.Width, Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free; //释放CANVAS对象
ReleaseDC(0, DC); //释放DC

image1.picture.Bitmap := fullscreen; //拷贝下的图象赋给IMAGE对象
image1.Width := fullscreen.Width;
image1.Height := fullscreen.Height;
fullscreen.free; //释放bitmap
form1.WindowState := wsNormal; //复原窗口状态
end;
谢谢各位回答的朋友.
分给第一个回答的朋友吧.用他的方法解决了.

参考技术A procedure TForm1.GetActiveWndImg;
var C: TCanvas; b: TBitmap; H: HDC; R: TRect; hand: THandle;
p: TPoint;
J: TJpegImage;
m, n: INTEGER;
name: array[0..255] of char;
begin
B := TBitmap.Create;
C := TCanvas.Create;
GetCurSorPos(P); //取得鼠标所在区域坐标
Hand := WindowFromPoint(P); //取得坐标所在窗体句柄
FillChar(name, SizeOf(name), #0); //
GetWindowText(Hand, name, 255); // 取得窗口标题
if name = '' then CopyMemory(@name, PCHAR(inttostr(hand)), Length(inttostr(hand)) + 1); //用句柄
if hand = 0 then exit;
H := GetWindowDC(Hand); //获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景 返回值 Long
try
GetWindowRect(hand, R); //取得句柄对应窗体的矩形区域
B.Width := R.Right - R.Left;
B.Height := R.Bottom - R.Top;
C.Handle := H; //将描述表赋给画布的句柄,此时画布就代表整个屏幕了
B.Canvas.CopyRect(Rect(0, 0, B.Width, B.Height), C, Rect(0, 0, B.Width, B.Height));
//Image1.Picture.Bitmap.Assign(B);
finally
C.Free;
B.Free;
ReleaseDC(Hand, H); //释放设备上下文环境
end;
end;

以前写的一个类似软件 ,应该和你的问题相符,你可以参考一下。
参考技术B 先用 FindWindow找到窗口句柄,再用GetWindowRect获取窗口长宽大小信息
最后把这句改一下Fullscreen.Canvas.CopyRect
(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(0, 0, Screen.Width, Screen.Height));本回答被提问者采纳
参考技术C 不要单纯的学习控件等的使用,最好结合一个实例,我这里有一个现成的程序和数据库,数据库是SQL2000的,你如果需要,留下你的邮箱,我发给你。

请教DELPHI中截图位置的问题,请高手们指点一下.谢谢啦

下面是段截图的代码,但这是从屏目左上角开始截.可以改截取图的尺寸大小.但怎么能改变位置呢?比如我想从屏目中间为基准开始截图..

实在想不明白了.请大侠们帮帮呀.万分感谢!!

==========
begin
timer1.Enabled := false;
Fullscreen := TBitmap.Create; //创建一个BITMAP来存放图象
Fullscreen.Width := 231; //这步可以设置图的尺寸
Fullscreen.Height := 100;

DC := GetDC(strtoint(edit3.text)); //取得屏幕的 DC,参数0指的是屏幕
FullscreenCanvas := TCanvas.Create; //创建一个CANVAS对象
FullscreenCanvas.Handle := DC;

Fullscreen.Canvas.CopyRect
(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(0, 0, Screen.Width, Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free; //释放CANVAS对象
ReleaseDC(0, DC); //释放DC

image1.picture.Bitmap := fullscreen; //拷贝下的图象赋给IMAGE对象
image1.Width := fullscreen.Width;
image1.Height := fullscreen.Height;
fullscreen.free; //释放bitmap
form1.WindowState := wsNormal; //复原窗口状态
end;

修改这句代码就可以了:

Fullscreen.Canvas.CopyRect(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(0, 0, Screen.Width, Screen.Height));

假设,要截取屏幕上的坐标点(100,100)位置开始,长200、宽200的图,代码修改如下:

Fullscreen.Canvas.CopyRect(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(100, 100, 200, 200));

========================

相关资料:

CopyRect 这个函数的功能是:
将源画布某一矩形区域的图像复制到目标画布的矩形区域,
其函数原型定义如下:
CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect)

其中:
Dest: 目标画布矩形
Canvas:源画布
Source:源矩形
参考技术A 取鼠标点击位置坐标(裁剪起始位置),再获取鼠标移动后当前位置坐标,通过计算获得裁剪区。

以上是关于Delphi 截图的问题,有代码,请高手帮帮的主要内容,如果未能解决你的问题,请参考以下文章

delphi怎么样编写DLL文件和怎么样去加载我编写的DLL文件,请高手详细给我一步一步写步骤出来,有例子最好

DELPHI问题,高手进

WPF MVVM模式,有两个ListBox和一个TxtBox,选任一个ListBox的Item ,就显示在TextBox上。请帮帮高手。。

在我用delphi7.0编写简单网页浏览器时。运行时出现:(见截图),求高手解答!

Delphi 高手 自定义公式

php gd库不能显示图片?为啥?gd库启动了,检查代码也没问题,但就是显示不了!请高手帮帮忙。。。