2012-02-11 3 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. Если свойства позиции формы не имеют способа указать ее там. –

ответ

2

Для окон вы можете использовать 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 может рассказать вам, сколько показов есть. Вы должны добавить «FMX.Forms» в ваш оператор USES, чтобы использовать это.