Lazarus中TScreen类使用介绍
描述:虚拟屏幕(桌面)可以包含多个物理显示器。
Screen对象是鼠标指针、字体、窗体。 对于Delphi兼容的(不可见)DataModules也被列出了。
同时也追踪当前活动窗体窗体、控件和指针。
Screen 对象
Screen 对象是 TScreen 类的一个变量, 它声明在 Forms 单元
1.获取系统支持的字体列表
{通过 Screen 对象, 只此一句话即可获取字体列表}
Memo1.Lines := Screen.Fonts;
2.获取屏幕逻辑宽度和高度(分辨率)
var
w,h: Integer;
begin
w := Screen.Width;
h := Screen.Height;
Text := Format('当前屏幕的分辨率是: %d*%d', [w,h]);
end;
3.自建Screen对象
var
MyScreen: TScreen;
begin
MyScreen := TScreen.Create(nil); {建立}
ShowMessage(IntToStr(MyScreen.Width)); {显示: 1024; 我的屏幕分辨率是 1024*768}
MyScreen.Free; {释放}
MyScreen := nil; {连根拔掉}
4.程序中的窗体个数和窗体调用
procedure TForm1.Button3Click(Sender: TObject);
var
num: Integer;
begin
num := Screen.FormCount; {当前程序中窗体的个数}
ShowMessage(IntToStr(num)); {2}
Screen.Forms[1].ShowModal; {显示第二个窗体}
{上面这句相当于}
//Form2.ShowModal;
end;
5.更换全局指针图标
//更换窗体或某个控件的光标可以不通过 Screen 对象, 譬如:
begin
Self.Cursor := crAppStart;
Panel1.Cursor := crHandPoint;
{光标可选值:
crDefault = TCursor(0);
crNone = TCursor(-1);
crArrow = TCursor(-2);
crCross = TCursor(-3);
crIBeam = TCursor(-4);
crSize = TCursor(-22);
crSizeNESW = TCursor(-6);
crSizeNS = TCursor(-7);
crSizeNWSE = TCursor(-8);
crSizeWE = TCursor(-9);
crUpArrow = TCursor(-10);
crHourGlass = TCursor(-11);
crDrag = TCursor(-12);
crNoDrop = TCursor(-13);
crHSplit = TCursor(-14);
crVSplit = TCursor(-15);
crMultiDrag = TCursor(-16);
crSQLWait = TCursor(-17);
crNo = TCursor(-18);
crAppStart = TCursor(-19);
crHelp = TCursor(-20);
crHandPoint = TCursor(-21);
crSizeAll = TCursor(-22);
}
//其中 crDefault 是默认光标
end;
//使用 Screen 更换光标, 是给本程序的全局更换光标, 譬如:
begin
Screen.Cursor := crSize;
end;
//如果让控件有不同的光标, Screen.Cursor 必须是默认值, 也就是:
Screen.Cursor := crDefault;
6.随机切换鼠标指针
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=true;
Timer1.Interval := 250;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Self.Cursor := TCursor(-Random(22));
end;
7.判断当前焦点在哪个控件上
Text := Screen.ActiveControl.ClassName;
8.判断当前焦点在哪个窗体上
Text := Screen.ActiveForm.ClassName;
9.截取屏幕
需要先uses 两个单元:LCLIntf, LCLType
procedure TForm1.Button7Click(Sender: TObject);
var
bit: TBitmap;
DC: HDC;
cvs: TCanvas;
begin
bit := TBitmap.Create;
bit.SetSize(Screen.Width, Screen.Height);
DC := GetDC(0);
cvs := TCanvas.Create;
cvs.Handle := DC;
bit.Canvas.CopyRect(Screen.DesktopRect, cvs, Screen.DesktopRect);
bit.SaveToFile('/Users/tianya/Screen.bmp');
ReleaseDC(0, DC);
cvs.Free;
bit.Free;
end;
Lazarus中TScreen类使用介绍的更多相关文章
- android中画图类的介绍Path
Paint类相关属性: /** * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置 ...
- C#中MemoryStream类的介绍
MemoryStream位于System.IO命名空间,为系统内存提供流式的读写操作.常作为其他流数据交换时的中间对象操作. 1.MemoryStream类封装一个字节数组,在构造实例时可以使用一个字 ...
- JavaScript中class类的介绍
class的概念 一.我们为什么要用到class类? 因为通过class类来创建对象,使得开发者不必写重复的代码,以达到代码复用的目的.它基于的逻辑是,两个或多个对象的结构功能类似,可以抽象出一个模板 ...
- java中Runtime类详细介绍
Runtime类描述了虚拟机一些信息.该类采用了单例设计模式,可以通过静态方法 getRuntime()获取Runtime类实例.下面演示了获取虚拟机的内存信息: package Main; publ ...
- Mybatis中实体类属性与数据库列表间映射方法介绍
这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考. Mybatis不像Hibernate中那么自动化,通过@Co ...
- java中ReentrantLock类的详细介绍(详解)
博主如果看到请联系小白,小白记不清地址了 简介 ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字 ...
- opencv中mat类介绍
The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It ...
- java中Timer类的详细介绍(详解)
一.概念 定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的.在JDK中Timer类主要负责计划任务的功能,也就是在指定 ...
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
随机推荐
- chromium浏览器开发系列第四篇:如何调试最新chromium源码
转自:http://blog.itpub.net/20687969/viewspace-1586513/ 附上上几篇文章地址,方便大家查看: 下载源码 编译源码 目录结构 接二连三的事情,时间比较紧张 ...
- Struts2 Struts.xml DTD 说明
转自:http://blog.csdn.net/cuixiuqin1954/article/details/4228741 关于Struts2中的核心配置文件struts.xml,就其DTD(Docu ...
- Hibernate 分页时 Long 无法转化成Integer类型 异常
转自:http://loquat.iteye.com/blog/818547 报错:java.lang.Long cannot be cast to java.lang.Integer Long ...
- PHP 输出表格单元格的数据之用表单的方式;
echo "<table border=1 class="imagetable" >"; //使用表格格式化数据echo "<for ...
- Xamarin.iOS调试提示需要iOS SDK
Xamarin.iOS调试提示需要iOS SDK 错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xco ...
- 标准事件模型和IE事件模型有哪些区别?请具体解释他们的差异。
通常,事件传送有三个阶段:事件捕获阶段,停留目标阶段,事件冒泡阶段. 1.阶段差异 DOM事件模型包含捕获阶段和冒泡阶段,DOM事件模型可使用e.stopPropagation()来阻止事件流:IE事 ...
- easyui提交表单数据的时候如何防止二次提交
在前端提交数据的时候有时候可能会由于网络延迟等原因,我们在等待的时候会多次点击保存按钮,这可能会导致我们一次输入的数据多次提交,导致数据重复.最近在做项目的时候碰到了这个问题,先说一点,这个问题的解决 ...
- 餐厅到店点餐系统app燃尽图
队友: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...
- 贪心/字符串处理 Codeforces Round #291 (Div. 2) A. Chewbaсca and Number
题目传送门 /* WA了好几次,除了第一次不知道string不用'\0'外 都是欠考虑造成的 */ #include <cstdio> #include <cmath> #in ...
- 贪心 赛码 1001 Movie
题目传送门 /* 贪心:官方题解: 首先我们考虑如何选择最左边的一个区间 假设最左边的区间标号是i, 那选择的另外两个区间的左端点必定要大于Ri 若存在i之外的j, 满足Rj<Ri, 那么另外两 ...