2016-06-12 3 views
0

저는 기본 vcl 응용 프로그램을 만들고 기본 폼이 항상 첫 번째 모니터에 나타나는 응용 프로그램을 실행할 때 델파이 10을 사용하고 두 개의 모니터를 사용합니다. 두 번째 모니터는 기본적으로?기본 폼을 만드는 방법 2nd 모니터

는 IDE 또는 속성 또는 코드에서이 될 수있다 옵션

감사

+1

* 기본적으로 *? 아니, 코드? 예. –

+2

일반적으로 나는 이것을하지 말 것을 제안합니다. 사용자가 양식을 놓아 두지 만 어디를 떠났는지를 기억하고 다음 번에 다시 표시하십시오. 디자인은 사용자로부터 멀리 떨어져 있습니다. –

+0

두 번째 모니터가없는 경우에도이 디자인이 실패합니다. 따라서 데이비드 (David)가 말했듯이 일반적인 패턴은 닫힌 상태에서 양식 X, Y 위치를 기억하고, 그것이 보이는 모니터의 가시 영역 인 경우 복원 할 때 초기 위치로 사용할 수 있습니다. 모니터 레이아웃이 변경 될 때 양식이 사용자에게 보이지 않는 곳에 나타나지 않도록 조심하고 양식 위치를 저장하는 데 상당히 많은 코드가 필요합니다. –

답변

6

TForm은 기본적으로 dmActiveForm로 설정되어 DefaultMonitor 속성이 있습니다. Form이 활성화되어 있지 않으면 기본 모니터가 사용됩니다. 그러나 DefaultMonitor을 두 번째 모니터에 구체적으로 설정할 방법이 없습니다.

TFormMonitor 속성을 가지고 있지만 읽기 전용입니다.

그래서, 당신은 다음 글로벌 TScreen.Monitors[] 목록에서 원하는 모니터를 찾은 수, 특정 모니터에 TForm을 표시하려면 다음 중 하나를 수동으로 X 폼의 Left/Top 속성을 설정

  1. /Y 좌표는 모니터의 BoundsRect 또는 WorkareaRect 속성 범위 내에 있습니다.

  2. 모니터를 양식의 공개 MakeFullyVisible() 메소드에 전달하십시오.

+0

* TForm에도 Monitor 속성이 있지만 읽기 전용 인 이유는 무엇입니까 * -이 속성이 읽기 전용인지는 놀랍지 않습니다. 이 속성을 설정하면 양식에서 수행해야하는 작업은 무엇입니까? –

+0

@SirRufo 상상할 수없는 것은'MakeFullyVisible()'alrwady가 - 지정한 모니터로 폼을 옮기는 것일 수도 있습니다. –

+0

어쩌면, MakeFullyVisible은 모니터를 변경하는 것 이상을 의미하며, 메소드의 이름은 당신에게 알려줍니다 그.속성을 변경하면 원하지 않는 동작이 발생할 수 있습니다. 나는 그것을 읽기 전용으로 구현했을 것이다. –

1

나는 1600px 너비의 모니터 두 개를 가지고 있습니다. 내 기본 모니터가 오른쪽에 있으므로 왼쪽에 양식을 넣으려면 그의 Left 속성에 음수 값을 전달해야합니다.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    // (3200/2 = + 1600) * -1 = -1600 
    Left := (Screen.DesktopWidth div 2) * -1; 
end; 

결과는 내 보조 모니터의 왼쪽에있는 가장 의미 -1600입니다.

또한 Screen.Monitors[i].Left이 코드 같은 것을 호출하여 각 모니터의 "가장 왼쪽"위치를 얻을 수 있습니다 :

procedure TForm1.Button1Click(Sender: TObject); 
var 
    I: Integer; 
    lMens: string; 
begin 
    lMens := ''; 
    for I := 0 to Screen.MonitorCount - 1 do 
    begin 
    lMens := lMens + ' | ' 
      + Format('%d - Left = %d', [i, Screen.Monitors[i].Left]) 
    end; 
    ShowMessage(lMens); 
end; 

내가 그 도움의 당신을 바랍니다.

관련 문제