提要:
目前随着计算机的发展,4K显示器已经逐步在普及,笔记本的显示器分辨率也都已经超过2K,多显示器更是普及速度很快。本文介绍下Delphi中操作多显示器的基本知识点(Windows系统),这些知识点在使用屏幕截图,多显示器拼接大图等方面使必须的。这些知识点在其他语言中也是通用的。
一、名词解释:
1. 屏幕(Screen):
我们看到的多块显示器组成一个矩阵墙面,这个矩阵墙面就是一个屏幕,注意,屏幕物理位置摆放未必一定是矩阵墙面,也可以摆成各种位置,但是逻辑位置一定是矩阵模式。
2. 显示器(Monitor):
显示器就是组成屏幕(Screen)的一块块监视器(Monitor),习惯上叫显示器,其实就是监视器。早期的时候,由于没有屏幕拼接,电脑就配置一个监视器,所以习惯性的把显示器、监视器、屏幕都叫成显示器,实际上是有区别的。
3. 主显示器(Primary Monitor):
在所有组成屏幕的显示其中,必须有且只能有一个主显示器,这个主显示器的左上角坐标约定为(0,0),其余显示器根据和主显示器摆放的逻辑位置(注意是逻辑位置,不是物理位置,一般最好物理位置和逻辑位置一致,否则操作起来会出现左右手问题,极不方便)来决定左上角的坐标位置。
4. 桌面(DeskTop):
桌面是一个逻辑概念,就是整个屏幕的显示区域,是包含有Left、Top、Width、Height属性的矩形区域,但是这个矩形区域未必都有物理显示器。左面中主显示器的左上角一定是(0,0)。
5. 分辨率(Resolution ):
用来表示显示器显示区域大小的参数,用点阵(Pixel)多少来表示长和高Width和Height,例如:1920 X1080 表示水平可以显示1920个点阵,高度可以显示1080个点阵,以此类推。
二、图例说明:
1. 标准6显示器矩阵示例:
说明:
- 黄色部分整体是整个屏幕区域(Screen)
- 屏幕有六块显示器组成两排,每排3个显示器;
- 左上角蓝色显示器为主显示器,还有其余5块显示器;
- 假定每个显示器的分辨率为 1920 x 1080;
具体得到的参数如下:
整个屏幕的大小为:
width :1920 x 3 = 5760
height:1080 x 3 = 3240
每块显示器的坐标参数如下:
|----------|------|------|------|-------|
| 显示器 | left | top | wdth | heigh |
| 主显示器 | 0 | 0 | 1920 | 1080 |
| 显示器1 | 1920 | 0 | 1920 | 1080 |
| 显示器2 | 3840 | 0 | 1920 | 1080 |
| 显示器3 | 0 | 1080 | 1920 | 1080 |
| 显示器4 | 0 | 2160 | 1920 | 1080 |
| 显示器5 | 0 | 3240 | 1920 | 1080 |
1)获取屏幕中显示器数量代码:
Delphi
uses
Vcl.Forms;
//获取显示器数量
Count := Screen.MonitorCount;
//判断显示器是否是主显示器 True表示主显示器,i是数量Count循环
isPrimary := Screen.Monitors[i].Primary;
2)获取桌面工作区域大小代码:
Delphi
x := Screen.DesktopRect.Left;
y := Screen.DesktopRect.Top;
w := Screen.DesktopRect.Width;
h := Screen.DesktopRect.Height;
本例中执行结果为:
x : 0; y := 0; w : 5760 ; h : 3240
说明:
本例因为主屏幕在左上角位置,所有桌面左上角坐标为(0,0)
3)设置程序Form覆盖整个屏幕(不是整个显示器)
Delphi
// Self 表示 Form
Self.Left := 0;
Self.Top := 0;
Self.Width := Screen.DesktopWidth;
Self.Height:= Screen.DesktopHeight;
注意:
整个屏幕的坐标系为无论主显示器在那个位置,左上角都是(0,0),width是所有最大并排显示器宽度之和,高度依然。
2. 非标准6显示器矩阵示例 1
说明:
- 黄色部分整体是整个屏幕区域(Screen)
- 屏幕有六块显示器组成两排,每排3个显示器;
- 主显示器位移第二排的第二个,还有其余5块显示器;
- 假定每个显示器的分辨率为 1920 x 1080;
具体得到的参数如下:
整个屏幕的大小为:
width :1920 x 3 = 5760
height:1080 x 3 = 3240
每块显示器的坐标参数如下:
|----------|-------|-------|------|-------|
| 显示器 | left | top | wdth | heigh |
| 主显示器 | 0 | 0 | 1920 | 1080 |
| 显示器1 | -1920 | -1080 | 1920 | 1080 |
| 显示器2 | 0 | -1080 | 1920 | 1080 |
| 显示器3 | 1920 | -1080 | 1920 | 1080 |
| 显示器4 | -1920 | 0 | 1920 | 1080 |
| 显示器5 | 1920 | 0 | 1920 | 1080 |
桌面工作区域大小:
x : -1920; y := -1080; w : 5760 ; h : 3240