我正在使用Delphi 2010重寫一箇舊的應用程序,我想在我的代碼中放置佔位符,以便將它移植到XE2。只是好奇,如果FireMonkey的GetSystemMetrics等價。我在特別感興趣:FireMonkey是否有與GetSystemMetrics類似的東西?
- GetSystemMetrics的(SM_CXSCREEN)
- GetSystemMetrics的(SM_CYSCREEN)
我正在使用Delphi 2010重寫一箇舊的應用程序,我想在我的代碼中放置佔位符,以便將它移植到XE2。只是好奇,如果FireMonkey的GetSystemMetrics等價。我在特別感興趣:FireMonkey是否有與GetSystemMetrics類似的東西?
如果你只需要在主顯示器的大小,而不是桌面大小(ñ顯示器之和),您可以使用此:
uses ..., FMX.Platform;
var
p: TPointF;
begin
p := Platform.GetScreenSize;
ShowMessage(Format('X: %f' + LineFeed + 'Y: %f', [p.X, p.Y]));
事實上SM_CXSCREEN
和SM_CYSCREEN
可能不應該使用的。這只是告訴你主監視器的尺寸。在多臺顯示器的這些日子裏,這不是非常有用。在VCL代碼中,您應該使用Screen.Monitors[]
和相關屬性來獲取有關您的顯示器的信息。
至於FMX,沒有多顯示器支持,也沒有平臺獨立的方式來查找屏幕尺寸指標。在你的鞋子裏,我會簡單地使用Screen.Monitors[]
,並在你遇到它時處理FMX端口。無論如何,當您移植到FMX時,您將不得不重新編寫所有GUI代碼,並且這個特定問題是您最擔心的問題。
最後,當你說
我想放在佔位符在我的代碼時,我將它移植到XE2
我相信大家都知道,移植到FMX不強制性的。 VCL在XE2中仍然支持並且可用,並且我看不到它將在很長一段時間內被移除。您可以移植到XE2,而不需要任何與FMX有關的事情。
我正在創建IniFile初始化例程。我希望SM_CXSCREEN和SM_CYSCREEN的唯一原因是IniFile的值(如果尚未創建)。我可以選擇任意值,但我想將主屏幕設置爲主監視器的80%。 –
好的,在這種情況下,'SM_CXSCREEN'是合理的。順便說一句,爲什麼要花費初始化喜好的ini文件。如果ini文件不存在,則創建默認值。然後在應用程序關閉時保存偏好設置。這樣你就不必編寫特殊的代碼來初始化它,並且它可以強大的刪除。但這不是主題。 –
@CapeCodGunny:同意David對ini文件的方法。只要確保從ini文件中讀取的所有值都使用正確的默認值,最好是來自某個mydefaultconsts.pas單元的常量。這樣,即使有人手動創建ini文件並且並未設置所有值,您也可以安全使用所有值。 –
+1屏幕截圖。留言Merci。 –
剛剛在我的博客上發了一條消息...... http://capecodgunny.blogspot.com/2012/05/keeping-screen-resolution-in-mind.html –