【问题标题】:Does FireMonkey have anything similar to GetSystemMetrics?FireMonkey 有什么类似于 GetSystemMetrics 的吗?
【发布时间】:2012-05-12 14:16:05
【问题描述】:

我正在使用 Delphi 2010 重写一个旧应用程序,我想在我的代码中放置占位符,以便将其移植到 XE2。只是好奇 FireMonkey 是否具有 GetSystemMetrics 的等价物。我特别感兴趣:

  • GetSystemMetrics(SM_CXSCREEN)
  • GetSystemMetrics(SM_CYSCREEN)

【问题讨论】:

    标签: delphi firemonkey


    【解决方案1】:

    如果您只需要主监视器大小,而不是桌面大小(n 个监视器总和),您可以使用这个:

    uses ..., FMX.Platform;
    
    
    var
      p: TPointF;
    begin
      p := Platform.GetScreenSize;
      ShowMessage(Format('X: %f' + LineFeed + 'Y: %f', [p.X, p.Y]));
    

    【讨论】:

    【解决方案2】:

    事实上SM_CXSCREENSM_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 文件并且并非所有值都已设置,您也可以安全地使用所有值。
    • @Marjan - 同意,我们在同一页上。我正在使用一个名为 IniFileStuff.pas 的单元,其中内置了默认值。最初我将屏幕默认设置为 SM_CXSCREEN 和 SM_CYSCREEN 的 80%,但我更喜欢 85%。
    猜你喜欢
    • 2011-02-24
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多