2012-02-11 203 views
3

我想顯示第二個監視器上FireMonkey形式,用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中如何做到這一點?

+0

這可能是firemonkey的限制。除非表單位置屬性有某種方式在那裏指定它。 – 2012-02-11 19:09:07

回答

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; 
4

FMX還沒有多顯示器支持。您必須使用平臺條件定義編寫特定於平臺的代碼並切換行爲。

2

在XE7,現在有具有Screen.Displays []屬性,可以使用全局變量的屏幕獲取有關可用顯示的信息。 Screen.DisplayCount屬性可以告訴你有多少個顯示。你必須在你的USES子句中添加「FMX.Forms」來使用它。