저는 기본 vcl 응용 프로그램을 만들고 기본 폼이 항상 첫 번째 모니터에 나타나는 응용 프로그램을 실행할 때 델파이 10을 사용하고 두 개의 모니터를 사용합니다. 두 번째 모니터는 기본적으로?기본 폼을 만드는 방법 2nd 모니터
는 IDE 또는 속성 또는 코드에서이 될 수있다 옵션
감사
저는 기본 vcl 응용 프로그램을 만들고 기본 폼이 항상 첫 번째 모니터에 나타나는 응용 프로그램을 실행할 때 델파이 10을 사용하고 두 개의 모니터를 사용합니다. 두 번째 모니터는 기본적으로?기본 폼을 만드는 방법 2nd 모니터
는 IDE 또는 속성 또는 코드에서이 될 수있다 옵션
감사
TForm
은 기본적으로 dmActiveForm
로 설정되어 DefaultMonitor
속성이 있습니다. Form이 활성화되어 있지 않으면 기본 모니터가 사용됩니다. 그러나 DefaultMonitor
을 두 번째 모니터에 구체적으로 설정할 방법이 없습니다.
TForm
도 Monitor
속성을 가지고 있지만 읽기 전용입니다.
그래서, 당신은 다음 글로벌 TScreen.Monitors[]
목록에서 원하는 모니터를 찾은 수, 특정 모니터에 TForm
을 표시하려면 다음 중 하나를 수동으로 X 폼의 Left
/Top
속성을 설정
BoundsRect
또는 WorkareaRect
속성 범위 내에 있습니다.모니터를 양식의 공개 MakeFullyVisible()
메소드에 전달하십시오.
* TForm에도 Monitor 속성이 있지만 읽기 전용 인 이유는 무엇입니까 * -이 속성이 읽기 전용인지는 놀랍지 않습니다. 이 속성을 설정하면 양식에서 수행해야하는 작업은 무엇입니까? –
@SirRufo 상상할 수없는 것은'MakeFullyVisible()'alrwady가 - 지정한 모니터로 폼을 옮기는 것일 수도 있습니다. –
어쩌면, MakeFullyVisible은 모니터를 변경하는 것 이상을 의미하며, 메소드의 이름은 당신에게 알려줍니다 그.속성을 변경하면 원하지 않는 동작이 발생할 수 있습니다. 나는 그것을 읽기 전용으로 구현했을 것이다. –
나는 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;
내가 그 도움의 당신을 바랍니다.
* 기본적으로 *? 아니, 코드? 예. –
일반적으로 나는 이것을하지 말 것을 제안합니다. 사용자가 양식을 놓아 두지 만 어디를 떠났는지를 기억하고 다음 번에 다시 표시하십시오. 디자인은 사용자로부터 멀리 떨어져 있습니다. –
두 번째 모니터가없는 경우에도이 디자인이 실패합니다. 따라서 데이비드 (David)가 말했듯이 일반적인 패턴은 닫힌 상태에서 양식 X, Y 위치를 기억하고, 그것이 보이는 모니터의 가시 영역 인 경우 복원 할 때 초기 위치로 사용할 수 있습니다. 모니터 레이아웃이 변경 될 때 양식이 사용자에게 보이지 않는 곳에 나타나지 않도록 조심하고 양식 위치를 저장하는 데 상당히 많은 코드가 필요합니다. –