【发布时间】:2012-05-12 14:16:05
【问题描述】:
我正在使用 Delphi 2010 重写一个旧应用程序,我想在我的代码中放置占位符,以便将其移植到 XE2。只是好奇 FireMonkey 是否具有 GetSystemMetrics 的等价物。我特别感兴趣:
- GetSystemMetrics(SM_CXSCREEN)
- GetSystemMetrics(SM_CYSCREEN)
【问题讨论】:
标签: delphi firemonkey
我正在使用 Delphi 2010 重写一个旧应用程序,我想在我的代码中放置占位符,以便将其移植到 XE2。只是好奇 FireMonkey 是否具有 GetSystemMetrics 的等价物。我特别感兴趣:
【问题讨论】:
标签: delphi firemonkey
如果您只需要主监视器大小,而不是桌面大小(n 个监视器总和),您可以使用这个:
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 无关。
【讨论】:
SM_CXSCREEN 是合理的。顺便说一句,为什么还要初始化一个偏好的ini文件。如果 ini 文件不存在,则创建默认值。然后在应用关闭时保存首选项。这样你就不必编写特殊的代码来初始化它,并且它可以被删除。但这是题外话。