Delphi的TScreen类

 

 

TScreen 类 - 获取字体列表


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.ScrollBars := ssBoth;
  Memo1.Align := alLeft;
  Memo1.Clear;

  {通过 Screen 对象, 只此一句话即可获取字体列表}
  Memo1.Lines := Screen.Fonts;
end;

end.

TScreen 类 - 屏幕的逻辑宽度与高度


var
  w,h: Integer;
begin
  w := Screen.Width;
  h := Screen.Height;

  Text := Format('当前屏幕的分辨率是: %d*%d', [w,h]);
end;

TScreen 类 - 关于 Screen 对象

Screen 对象是 TScreen 类的一个变量, 它声明在 Forms 单元的第 1323 行(Delphi 2007); 
并且 TScreen 类也来自 Forms 单元.
也就是说, 只要 uses 了 Forms 单元, Screen 对象就可以使用了.

我们自己建立一个 TScreen 类的对象可以吗? 当然可以!



var
  MyScreen: TScreen;
begin
  MyScreen := TScreen.Create(nil); {建立}

  ShowMessage(IntToStr(MyScreen.Width)); {显示: 1024; 我的屏幕分辨率是 1024*768}

  MyScreen.Free;                   {释放}
  MyScreen := nil;                 {连根拔掉}
end;

TScreen 类 - 程序中窗体的个数


//一个包含两个窗体的例子, 这是工程中的内容:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

//
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}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
var
  num: Integer;
begin
  num := Screen.FormCount;    {当前程序中窗体的个数}
  ShowMessage(IntToStr(num)); {2}

  Screen.Forms[1].ShowModal;  {显示第二个窗体}
  {上面这句相当于}
  //Form2.ShowModal;
end;

end.

TScreen 类 - 通过 Screen 更换光标


//更换窗体或某个控件的光标可以不通过 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;

TScreen 类 - 判断当前焦点在哪个控件/窗口上


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Text := Screen.ActiveControl.ClassName;
end;

{多放几个控件, 按 Tab 测试; 但并不是所有控件都有焦点}

//标题显示当前窗体的类名
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Text := Screen.ActiveForm.ClassName;
end;

TScreen 类 - 获取当前输入法与输入法列表


//获取输入法列表
begin
  Memo1.Lines := Screen.Imes;
end;

//获取当前输入法
var
  kl: HKL;
  i: Integer;
begin
  kl := GetKeyboardLayout(0);
  for i := 0 to Screen.Imes.Count - 1 do
    if HKL(Screen.Imes.Objects[i]) = kl then
      ShowMessage(Screen.Imes.Strings[i]); {显示当前输入法}
end;

 

 

时间: 2024-12-21 04:11:48

Delphi的TScreen类的相关文章

Delphi中TApplication类的用法

在Delphi中TApplication是一个有着十分重要作用的类.TApplication类是用于描述Delphi编制的应用程序的一个类.通过对这个类的灵活应用可以编制许多有特点的程序.. 1) 检测当前Windows程序是否被激活: TApplication类有一个属性--Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点.检 测的代码如下: If Application.Active=False then ShowMessage('当前窗口没有被激活');

DELPHI保护级类成员的应用

type TStringGridEx = class(TStringGrid); procedure TForm1.Button1Click(Sender: TObject); begin if TStringGridEx(StringGrid1).RowCount > 5 then TStringGridEx(StringGrid1).DeleteRow(5); end; 这是要在StringGrid中删除一行的代码.这个问题我搞了2个小时没有搞定,然后就搜帖子,发现这位高人的代码,简直敬佩之

Delphi制作图形化的ComboBox

从Delphi5开始,Delphi集成开发环境中的Object Inspector就使用了图形化的风格来显示某些属性.比如Cursors.Colors.Fonts和Image List等等属性就是这种类型.第一次看到这样的效果,的确令人感到神奇,各种字体的名称可以直接以这种字体的样式显示出来,在选择字体的时候真是很方便.这种效果是如何实现的呢,其实就是使用了组件的"自绘"(Ower-drawing)方法.在Delphi中想要实现这样的功能是很方便的,现在我们就开始一段神奇的"

java写的StringList类

  delphi的StringList类真好用啊 试着用java写了一个 package com.zhao_yi.sysutils.classes; import java.util.List;import java.util.ArrayList;import java.util.StringTokenizer;import com.zhao_yi.sysutils.SysUtil;import com.zhao_yi.sysutils.*;import java.util.Arrays;imp

Microsoft .NET 中的基类继承

接口继承 创建抽象类时,请使用关键字 Interface 而不是 Class.为接口命名,然后定义需要子类实现的所有属性和方法.这是因为基类中没有可以实现的属性和方法,它只包含一般数据,而不包含方法.您所创建的只是一个合约,它规定所有使用此接口的子类都必须遵循一定的规则. 1.        现在,请在已创建的项目中添加一个新类. 2.        从 Visual Studio 菜单中,单击 Project(项目),然后单击 Add Class(添加类). 3.        在类中添加以下

Delphi中继承方式使用控件

以前写代码, 总是把主单元弄得满满当当; 现在更喜欢把控件比较独立的功能写成一个单元, 改写属性. 重载方法...哪怕只有一点点和默认不同, 也喜欢独立出来. 刚刚用到 TListBox, 需要能拖动元素.双击删除.   unit ListBox2; interfaceuses System.Classes, Vcl.Controls, Vcl.StdCtrls, System.Types; type TListBox2 = class(TCustomListBox) protectedproc

用Delphi编写Win2000服务程序

一.Win2000服务简介 服务程序(Service Application)是一种运行于WinNT的后台程序,每个服务 程序(Service Application)中可能包含若干个服务(Service),每个服务就 是其中的一个线程(该服务也可以创建多个子线程).采用服务,应用程序可以 获得特殊的权限,而且不会被用户通过Win2000的任务管理器直接结束程序,所以 服务常常用来实现一些特殊的目标. 通过Win2000控制面板中的服务管理工具,我们可以设置/查看服务的特性: (1)服务名称:(

Delphi数组

  静态数组的定义方法 //1. 标准方法: var MyArr: array[0..10] of Integer; //定义静态数组 //2. 可以使用非0下标: var MyArr: array[9..10] of Integer; //不能提倡,这样不容易与系统函数沟通 //3. 根据预定义类型来声明数组: type TMyArr = array[0..10] of Integer; //先定义一个数组类型 var MyArr: TMyArr; //再定义静态数组 //4. 在非过程区可以

[转]李战大师-悟透delphi-第一章 delphi的原子世界

yjmyzz:李战大师的成名,并不是因为08年发表于园子里的那篇"悟透javascript",而是多年前的这篇处女作"悟透delphi",原出处已经找不到了,近日重温delphi研究如何开发原生win32中的activex控件时,无意又找到了这篇文章,想当年这篇文章在delphi编程群体中那是何等轰动,转载于此,以示纪念.(delphi的出现,秒杀了vb/pb,vs的出现又秒杀了delphi,但是windows就其发展来看,不管如何发展,至少在今后相当长的时候间,也