【问题标题】:How to show a firemonkey form on second monitor如何在第二台显示器上显示 firemonkey 表单
【发布时间】:2012-03-03 19:41:38
【问题描述】:

我正在尝试使用带有以下代码的 C++Builder 在第二台显示器上显示 FireMonkey 表单:

 void __fastcall ShowFormOnScreen( int OutMon )
 { 
   MyForm->Top = 0;
   MyForm->BorderStyle = bsNone;
   MyForm->WindowState = wsNormal;
   MyForm->Left   = Screen->Monitors[OutMon]->Left;
   MyForm->Height = Screen->Monitors[OutMon]->Height;
   MyForm->Width  = Screen->Monitors[OutMon]->Width;
   MyForm->Show();
 }

很遗憾,Screen 对象没有Monitors 属性,那么如何在 FireMonkey 中做到这一点?

【问题讨论】:

  • 这可能是 firemonkey 的限制。除非表单位置属性有某种方法可以在那里指定它。

标签: delphi c++builder firemonkey c++builder-xe2


【解决方案1】:

在 XE7 中,现在有一个全局 Screen 变量,它具有 Screen.Displays[] 属性,您可以使用它来获取有关可用显示器的信息。 Screen.DisplayCount 属性可以告诉您有多少显示器。你必须在你的USES子句中添加“FMX.Forms”才能使用它。

【讨论】:

    【解决方案2】:

    对于 Windows,您可以使用 EnumDisplayMonitors 来定位第二个监视器。 这需要一个回调函数,该函数将从找到的每个监视器接收信息。 下面的 Delphi 示例在第二个监视器上显示第二个 Firemonkey 表单并使背景变黑

    // Callback function in function MonitorCount
    function MonCountCB(hm: HMONITOR; dc: HDC; r: PRect; l: LPARAM): Boolean; stdcall;
    var
      mInfo : MonitorInfoEx;
    //  SecondaryRect: RECT;
    begin
    
      minfo.cbSize := sizeof(mInfo);
      GetMonitorInfo(hm, @mInfo);
    
      if mInfo.dwFlags <> MONITORINFOF_PRIMARY then
      begin
         MonitorForm.Left := mInfo.rcWork.Left;
         MonitorForm.Top := mInfo.rcWork.Top;
         MonitorForm.Width := mInfo.rcWork.Width;
         MonitorForm.Height := mInfo.rcWork.Height;
      end;
    
      inc(Integer(pointer(l)^));
      result := true;
    end;
    
    
    procedure TForm1.CornerButton1Click(Sender: TObject);
    var
      MonitorCount : Integer;
    begin
      EnumDisplayMonitors(0,nil,MonCountCB, Integer(@MonitorCount));
      MonitorForm.Viewport3D1.Color := TAlphaColors.Black;
      MonitorForm.Show;
    end;
    

    【讨论】:

      【解决方案3】:

      FMX 尚不支持多显示器。您必须使用平台条件定义编写特定于平台的代码并切换行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 2017-06-04
        • 2011-10-08
        相关资源
        最近更新 更多