一句话为当前窗口客户区捉图: GetFormImage

http://www.cnblogs.com/del/archive/2008/10/24/1318738.html

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Self.GetFormImage.SaveToFile('c:\temp\Form1.bmp');
end;

end.

分类: 其他常用控件
好文要顶 关注我 收藏该文
万一
关注 - 34
粉丝 - 844
荣誉:推荐博客
+加关注
0 0
« 上一篇:建立快捷方式的函数: CreateShortcut - 非常实用、特别方便
» 下一篇:学习 Message(1): 消息发送
posted on 2008-10-24 14:42 万一 阅读(1990) 评论(4) 编辑 收藏

FeedBack:
#1楼 2010-05-27 11:52 仰望天
万老师 请教您一个问题 我想做一个截取头像的控件。功能:显示一个本地图片,在图片上有一个选择区域(tshape)。可以拖动改变shape的大小和位置。最后完成对选择区域的截图。现在的难题是怎么让鼠标可以拖动改变shape的大小和位置?或者有别的控件来替代实现类似的效果呢?希望您能指点一下。
支持(0)反对(0)
回复引用
#2楼 2010-05-27 11:59 仰望天
功能类似QQ的头像上传之前的截图功能。我在网上找到这样一个函数

procedure ManipulateControl(WinControl: TControl; Shift: TShiftState; X,
Y, Precision: integer);
var SC_MANIPULATE: Word;
begin
//光标在控件的最左侧
if (X Precision) and (Y = WinControl.Width - Precision) and (Y > Precision) and (Y Precision) and (X Precision) and (X = WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F006;
WinControl.Cursor := crSizeNS;
end
else
//光标在控件的左上角
if (X = WinControl.Width - Precision) and (Y = WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F007;
WinControl.Cursor := crSizeNESW;
end
else
//光标在控件的右下角
if (X >= WinControl.Width - Precision) and (Y >= WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F008;
WinControl.Cursor := crSizeNWSE;
end
else
//光标在控件的客户区(移动整个控件)
if (X > 5) and (Y > 5) and (X (Shape2.Height - 5)) then Shape2.Cursor := crSizeNESW
else
Shape2.Cursor := crSizeWE;
end else
if (x > (Shape2.Width - 5)) then
begin
if y (Shape2.Height - 5)) then Shape2.Cursor := crSizeNWSE
else
Shape2.Cursor := crSizeWE;

end else
if ((y Shape2.Height - 5)) then Shape2.Cursor := crSizeNS
else Shape2.Cursor := crSizeAll;

if SizeMode = smNone then Exit;
//限制shape的移动范围在image1内部
if (Shape2.Left + (X - clickx) Image1.Left + Image1.Width - Shape2.Width)
or (Shape2.Top + (Y - clicky) > Image1.Top + Image1.Height - Shape2.Height)
then Exit;

if SizeMode = smMove then
begin
Shape2.Left := Shape2.Left + (x - clickx);
Shape2.Top := Shape2.Top + (y - clicky);
Exit;
end;

if (SizeMode and smLeft) 0 then
begin
shape2.left := Shape2.left + (x - clickx);
Shape2.Width := ClickWidth - (shape2.Left - clickleft);
Shape2.Height:=Shape2.Width;
end;

if (SizeMode and smRight) 0 then
begin
Shape2.Width := ClickWidth + (x - clickx);
Shape2.Height:=Shape2.Width;
end;

if (SizeMode and smUp) 0 then
begin
shape2.top := Shape2.top + (y - clicky);
Shape2.Height := ClickHeight - (shape2.Top - clicktop);
Shape2.Width:=Shape2.Height;
end;

if (SizeMode and smDown) 0 then
begin
Shape2.Height := ClickHeight + (y - clicky);
Shape2.Width:=Shape2.Height;
end;

end;

procedure TForm3.Shape2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SizeMode := smNone;
end;
支持(0)反对(0)
回复引用
#4楼 2013-07-23 18:48 Doctorate

我实现的效果 ..仿QQ截图

一句话为当前窗口客户区捉图: GetFormImage 来自万一的博客的更多相关文章

  1. 老话题:自己编写只截窗口客户区的截屏软件(VB2010)

    现在能实现截屏的软件很多,就不一一列举了,连WIN7都自带截屏软件,甚至OFFICE2010开始都有截屏的功能. 截屏软件虽多,无外乎三种截屏方式:全屏截图.窗口截图.自定义矩形截图. 其中,窗口截图 ...

  2. 这篇blog只是为了发一张图链到UOJ的博客去..

    UOJ卖萌表情,萌萌哒VFK如图.

  3. 字符串常量与const常量内存区(——选自陈皓的博客)

    1. 一个常见的考点: char* p = "test"; 那么理利用指针p来改变字符串test的内容都是错误的非法的. 例如: p[0] = 's'; strcpy(p, &qu ...

  4. 调用API函数,在窗口非客户区绘图(通过GetWindowDC获得整个窗口的DC,就可以随意作画了)

    http://hi.baidu.com/3582077/item/77d3c1ff60f9fa5ec9f33754 调用API函数,在窗口非客户区绘图 GDI+的Graphics类里有个FromHdc ...

  5. windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换

    设置坐标映射    (1)Windows坐标系统 Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系.一般而言, GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠 ...

  6. WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标

    转自:http://blog.csdn.net/lovesunshine2008/article/details/4048158 设置坐标映射    (1)Windows坐标系统 Windows坐标系 ...

  7. js 获取 客户区 大小

    js 获取 客户区 大小 本文内容来自<javascript高级程序设计(第二版)> 内容, 只是方便大家以后可能会用到... <script type="text/jav ...

  8. VC----SDK下对窗口非客户区的操作

    窗口分成两大部分:客户区和非客户区.非客户区再次细分:标题栏,如图片中顶部深蓝色:左边框,如图片中红色部分:上边框,如图片中绿色部分:右边框,如图片中右侧天蓝色部分:底边框,如图片中下面棕色部分. 之 ...

  9. 关于Chrome(谷歌浏览器)对docume,准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top

    对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的 ...

随机推荐

  1. 安装Android模拟器

    说明:可以直接通过Android SDK目录下的SDK Manager.exe进行安装,我这里写的是通过下载各种文件进行安装的方法,没有通过SDK Manager.exe进行下载安装 一.下载以下内容 ...

  2. mysql中树形结构表的操作

    一种是:邻接表模型(局限性:对于层次结构中的每个级别,您需要一个自联接,并且随着连接的复杂性增加,每个级别的性能自然会降低.在纯SQL中使用邻接列表模型充其量是困难的.在能够看到类别的完整路径之前,我 ...

  3. DOS 命令集锦——最常用命令

    一. 常用命令: cd 改变当前目录   sys 制作DOS系统盘 (电脑入门到精通网 www.58116.cn) copy 拷贝文件  del 删除文件 deltree 删除目录树    dir 列 ...

  4. jsoncpp在Windows和Linux下的安装

    Windows下: 参考这个网站,没什么问题,注意MTd这些选对就行了. http://www.cppblog.com/wanghaiguang/archive/2013/12/26/205020.h ...

  5. (重要)LRU cache

    [抄题]: [思维问题]: 需要从任何位置访问某数字有没有(重要 ),返回其位置(不重要),所以用hashmap. 需要从任何位置删除,用linkedlist.最终二者结合,用linked hashm ...

  6. iOS - 组件化探究之私有库的创建

    http://www.cocoachina.com/ios/20180511/23359.html

  7. jquery datatables api

    原文地址 学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/ ...

  8. Spring框架整合Struts2框架的传统方法

    1. 导入CRM项目的UI页面,找到添加客户的页面,修改form表单,访问Action * 将menu.jsp中133行的新增客户的跳转地址改为:href="${pageContext.re ...

  9. 全屏API

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2679 二.相关文章以 ...

  10. css水波动画效果

    代码来源:http://www.jq22.com/code1526 HTML: <div class="waves"></div> css: html, b ...