程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Delphi中開發使用多顯示器的應用程序(2)

在Delphi中開發使用多顯示器的應用程序(2)

編輯:Delphi

那麼怎麼在使窗體在不同的顯示器之間移動呢?這並不困難,估計你也想到了。這裡介紹兩種方法:

第一,可以設置TCustomForm的Top和Left使窗體顯示在桌面的任意位置。正如前面所述,桌面是由所有顯示器組成的。它們有共同的坐標系,所以可以根據顯示器的邏輯位置決定窗體的位置。現在的問題是如何獲得每個顯示器的邏輯位置和尺寸,後面就會介紹。

第二,可以調用TCustomForm的MakeFullyVisible方法將窗體完全顯示到指定的顯示器之中。可以通過這個方法避免窗口在兩個顯示器上各顯示一部分。

剛才我們提出了一個問題:如何獲得每個顯示器的邏輯位置和尺寸。為了解答這個問題,需要再介紹連個類: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

獲取顯示器的工作區對應桌面的區域。

清楚地了解了TScreen和TMonitor之後,前面的問題也就自然解決了。到這裡,本文已經介紹了開發多顯示器應用程序所需的全部知識。相信你可以利用這些知識開發出非常實用的軟件產品。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved