在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天做定制时遇到Delphi位操作及多显示器扩展显示问题,故总结一下。 AND、OR、NOT。AND、OR、NOT可不仅仅只对逻辑表达式有作用,它们还可以操作数; AND:按位与,如:1 AND 2其结果为0 OR:按位或,如:1 OR 2其结果为3 Not:按位取反:如Not 1其结果对于有符号数是-2,对于无符号数是65534 另外,还有按位异或XOR:如:1 XOR 2结果为3 移位操作:Delphi提供了SHL和SHR进行移位左移和右移:例如:2 SHR1表示2按位右移一位结果为1。 Delphi中的数:既然有位的操作就一定涉及到数的类型:是有符号数(头一位用0和1表示正负)还是无符号数。Delphi中:Shortint(8位)、Smallint(16位)、Longint(32位)、Integer(32位)、Int64(64位)是有符号数;而Byte(8位)、Word(16位)、Longword(32位)是无符号数。它们之间可以像C一样强制转换。例如:Smallint类型的-1转换成Word类型就是65535。转换方法是Word(-1)。 delphi多显示器操作Windows最多支持10个显示器,Windows将所有显示器映射为一个大的虚拟桌面。可以将显示器理解为桌面某个局部的视图。在显示属性中可以根据显示器的物理位置任意排布这些显示器。如果显示器的排列不规则,虚拟桌面上的某些部分可能无法显示在任何一个显示器上。为了不使一个窗体显示在两个显示器之间等原因的考虑,Windows将一个显示器作为主显示器。启动计算机时,登录对话框就显示在主显示器中。绝大多数程序启动示,都会显示在主监视器中。 几个重要的概念:桌面、显示器、主显示器。桌面实际上是指Windows可显示的逻辑区域。实际上是可以将一个窗体显示到桌面之外的。然而这并不是说桌面的所有部分都会显示在某台显示器上(原因如前所述);但反过来说,任何一个显示器显示的内容都必然是桌面的一部分。桌面是一个矩形区域,可以通过顶点坐标(Top,Left)和宽高来描述桌面的尺寸。Windows以主显示器的顶点坐标作为坐标系的原点。 显示器是桌面的局部视图。就好像透过窗户看窗外的风景,站在不同的窗前就可以看到不同的画面。同样的,显示器也是一个矩形区域,同样可以通过顶点坐标(Top,Left)和宽高来描述它的尺寸。顶点坐标是相对于桌面坐标系原点的,也就是相对于主显示器的顶点。 Windows为多显示器应用程序的开发提供了一组API。VCL将这些API封装起来,非常自然的融入整个Framework之中,使得开发多显示器应用程序变得非常简单。一般Delphi开发多显示器程序只需用到两个类:TScreen和TMonitor。 TScreen描述与显示设备有关的一些信息,我们主要关心与显示器逻辑位置和尺寸有关的信息。其他方面的内容可以在Delphi的文档中获知。在程序运行的时候VCL自动创建一个TScreen的实例——全局变量,所以通常情况下程序是不需要实例化TScreen的。TScreen有一组形如Desktop*的属性,这些属性描述了整个桌面的尺寸和各顶点坐标。还有对开发多显示器应用程序有重要意义的连个属性:MonitorCount和Monitors。通过这两个属性我们可以枚举出系统中所有的显示器(TMonitor)的实例,每个实例都反映了相应显示器的相对位置和分辨率等信息(后文会详细说明)。 在TScreen的众多属性之中,我们会找到Height和Width这两个属性。要特别警惕它们不是指整个桌面的尺寸,而是指主显示器的高度和宽度。这非常容易让人产生错觉,无以为是整个桌面的尺寸。与之类似的还有形如WorkArea*的一组属性,它们描述了主显示器的工作区域的尺寸和各顶点坐标。是不是觉得少了什么?为什么没有获取主显示器相对位置的属性?原因就像前面所说的:Windows是以主显示器的左上角为坐标系原点的,所以主显示器的相对位置必然是(0,0)。除了这些属性之外,还要介绍TScreen的三个成员函数:MonitorFromPoint,MonitorFromRect和MonitorFromWindow。顾名思义,他们分别是获取个坐标、某个区域和某个窗口所在的显示器的实例。在实际的开发中可能也会用到。 TMonitor类封装了物理显示器的有关属性——这些属性都是只读的。一些常用属性如下: Handle:获取该显示器的Windows句柄 MonitorNum:获取显示器的编号 Primary:获取该显示器是否是主显示器。又且仅有一个显示器的Primary是True。 Top:获取显示器的上边界 Left:获取显示器的左边界 Height:获取显示器的高度 Width:获取显示器的宽度 BoundsRect:获取显示器的对应桌面的区域,它与上面四个属性是等价的 WorkareaRect:获取显示器的工作区对应桌面的区域。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论