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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教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 取鼠标点击位置坐标(裁剪起始位置),再获取鼠标移动后当前位置坐标,通过计算获得裁剪区。

想要用MFC操作excel文件,有些问题向大侠们请教!

有一个已经存在的excel文件,里面只有一个sheet1,现在想对其操作,生成一个sheet2,并将sheet2改名为“测试结果”,看了很多例子,其中涉及到类、变量、路径、模板等问题,自己没有做过这方面的,有点理不清思路。请高手指点一下,要读写excel应该先干啥,再干啥,就是指点一下步骤,谢谢!

m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());

m_ExlBook.AttachDispatch(m_ExlBooks.Add(_variant_t(TempPath)));
//TempPath 获取文件路径
m_ExlSheets.AttachDispatch(m_ExlBook.GetWorksheets(),TRUE);
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)2),vtMissing);
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
m_ExlSheet.SetName("测试结果");追问

谢谢你的帮助。
我要实现的功能是要先把一些数据填写到sheet1中,然后生成sheet2,改名为“测试结果”,再把另外一些数据填写到sheet2中,数据填写我已经知道该怎么做。
以上的实现程序我是像都写在一个button里面,点击button实现。你给我的这些程序我看到过有些例子上类似的,但是我不太清楚其中一些变量的定义和声明,是直接写在button函数里就可以吗,还是要先给出一些声明,比如Workbooks workbooks这样的,这是关键!

追答

Workbooks workbooks 这些要声明的,
_Application m_ExlApp;
Range m_ExlRge;
_Worksheet m_ExlSheet;
Worksheets m_ExlSheets;
_Workbook m_ExlBook;
Workbooks m_ExlBooks;
Font ft;
Shapes shapes;
Shape shape;
Characters characters;
TextFrame textFrame;
LineFormat lineformat;
ColorFormat colorformat;
最好是放在.h,具体要看你需要什么再添加类, 注意的是引用excel 如果在其他地方也用到,(不是一个DIALOG)就要
#ifndef EMP_H_H
#define EMP_H_H
#include "excel.h"
#endif

实现你前面一个功能只要加一个循环
while()
再设一个变量 i=1;
循环一次i++,添加一次数据,怎么循环,退出,你琢磨下。
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)i)),TRUE);
if(i==1)
if(i==2)
m_ExlSheet.SetName("测试结果");//你想要的名字

追问

m_ExlSheets.AttachDispatch(m_ExlBook.GetWorksheets(),TRUE);
您好,请问这句是什么意思呢?
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
m_ExlSheet.SetName("测试结果");
第一句:这个是不是说,要想操作某一个sheet,先用GetItem选定,然后对其操作呢?long1代表
sheet1?long2代表sheet2?
现在基本弄明白了要怎么做了,想再确定一下具体内容,谢谢!

追答

m_ExlBook 前面是获取工作簿/模板
m_ExlSheets.AttachDispatch(m_ExlBook.GetWorksheets(),TRUE);
加载sheet页面
后面数字就代表第几个sheet

追问

你说的“加载sheet页面”就是选定这个sheet,然后后面的操作(比如写入数据)就是写入到这个选定的sheet对吧?
另外:
(1)已经存在的文件为abc.xls,如何选定这个文件呢?语句是m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());是这句吗?怎样将abc.xls加上呢?
(2)m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("课程名")); 这句意思是向第2行第3列单元格写入数据 “课程名” 吗?

追答

1、差不多-
2、m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());纯粹加载sheet
不是这句,这句在于获取一个前面的
m_ExlBook.AttachDispatch(m_ExlBooks.Add(_variant_t(TempPath)));这个的sheet //这个就是模板路径
这句。TempPath:文件的路径名(..debug\\abc.xls),你要去获取的,怎么读取文件你去看看怎么弄-有很多现成的代码,你可以设置断点debug下具体看看怎么获得文件的路径,可能跟你想的不一样-
3、是的-这些你去试下就知道--
就这样吧!

追问

请问 “模板” 具体是什么啊,是microsoft office里的excel文件?还是指我要进行操作的文件?
CString theAppPath,theAppName;
char Path[MAX_PATH];
GetModuleFileName(NULL,Path,MAX_PATH);
theAppPath=(CString)Path;
theAppName=AfxGetApp()->m_pszAppName;
theAppName+=".exe";

CString TempPath="";
TempPath=theAppPath+"Template.xls";
可以针对我的问题解释一下有关路径和模板的问题吗,就差这一点了

追答

模板可能是空的excel 也可以是你建立好的excel 。就是你要操作的excel。
GetModuleFileName(NULL,Path,MAX_PATH);//获取程序运行路径(包括程序文件名字),一般在DEBUG下面。

theAppName=AfxGetApp()->m_pszAppName;// theAppName获取程序文件名字,不带后缀格式。
theAppName+=".exe"; //程序文件名
中间一段就是程序运行路径-程序文件名=文件需要的前一个目录(路径);..\debug
CString TempPath="";
TempPath=theAppPath+"Template.xls";//你操作的文件名完整路径 Template.xls:你的文件名
写了这么多,你应该懂了!就这样 了---
难道还不满意..

参考技术A ,jbhm bj,oo0io mioiio追问

啥意思啊,你这太专业了,看不懂!

以上是关于请教DELPHI中截图位置的问题,请高手们指点一下.谢谢啦的主要内容,如果未能解决你的问题,请参考以下文章

请教一个批量删除文本文件中多余回车或提取文本中前两行数据的shell脚本,请高手指点,万分感谢

想要用MFC操作excel文件,有些问题向大侠们请教!

delphi 中SQL语句

我在用delphi2007打开一个delphi工程文件的时候,出现下列错误: 请高手指点

Delphi的高手请进,请教一个关于窗体创建的问题!

请教高手 小弟刚开始学UNIX。想做个能有下列功能的.sh。