듀얼모니터를 사용하면서 폼을 실행할 때 보조모니터에 띄울까~? 메인모니터에 띄울까~?
고민될 때 있지 않으셨습니까?
저의 경우에는 전체 스크린(메인모니터 + 보조모니터)의 크기를 구한 다음 계산해서 메인모니터 또는 보조모니터 등 원하는 모니터에 폼을 띄울 수 있었습니다.
우선, Delphi 에서는 Screen 이라는 강력한 클래스를 제공합니다.
Screen.MonitorCount
위의 객체를 통해서 모니터의 갯수를 알 수 있습니다.
procedure TfrmMain.scButton1Click(Sender: TObject);
var
i : Integer;
begin
Log('monitor count : ' + IntToStr(Screen.MonitorCount));
Log(Format('[Desktop] top: %d, left: %d, width: %d, height: %d', [Screen.DesktopRect.Top, Screen.DesktopRect.Left, Screen.DesktopRect.Width, Screen.DesktopRect.Height]));
Log(Format('[WorkArea] top: %d, left: %d, width: %d, height: %d', [Screen.WorkAreaRect.Top, Screen.WorkAreaRect.Left, Screen.WorkAreaRect.Width, Screen.WorkAreaRect.Height]));
for i := 0 to Screen.MonitorCount - 1 do
begin
Log(Format('[%d] top: %d, left: %d, width: %d, height: %d', [i, Screen.Monitors[i].Top, Screen.Monitors[i].Left, Screen.Monitors[i].Width, Screen.Monitors[i].Height]));
end;
end;
모니터의 갯수와 데스크톱 좌표, 자업영역 좌표 그리고, 각 모니터의 좌표를 출력하는 예제입니다.
어떻게 하면 메인모니터에 접근하고, 어떻게 하면 보조모니터에 접근을 할 수 있을까 이리저리 찾아봤는데 제가 찾은 정답은 Screen.Monitors[0] 은 무조건 메인모니터이다~ 입니다. 왜 듀얼모니터 위치 및 순서 정할 때 1, 2, 3.. 이런 식으로 표시되는데 그거에 따라서 구성되는 것 같습니다.
또한 Screen.DesktopRect 는 전체 모니터를 합한 좌표가 나옵니다. 이 때, 각 모니터의 좌표를 계산해서 폼을 어디에 띄울지 선택하시면 되는데요. 이 때, 반드시!! 해당하는 폼은 Form.DefaultMonitor := dmDesktop; 를 해줘야 합니다. 어설프게 Form.Left := Screen.DesktopRect.Left; 이런식으로 하면 안먹힙니다. (물론, 재수좋게 또는 모니터가 1개일 때는 원하는데로 됨) 반드시 dmDesktop 를 해줘야 전체 좌표(메인모니터와 보조모니터의 순서에 따라서 -값이 나올 수 있습니다.)로 계산되어져서 지정이 되기 때문입니다.
백문이 불여일견이라고, 예제에 있는 부분을 실행해 보시면서 이러쿵 저러쿵 한 번 해보시면서 시행착오를 겪으시면 어떤 것인지 더 빠르게 감이 오리라 예상됩니다.
'Programming > Delphi' 카테고리의 다른 글
[Delphi] 아이콘 캐시 초기화 (0) | 2022.05.24 |
---|---|
델파이 스킨 적용 (0) | 2016.03.03 |
Delphi Remove PageControl Border 델파이 페이지컨트롤 테두리 없애기 (0) | 2016.01.20 |
RAD Studio 10 seattle 완전삭제 방법 (0) | 2015.12.02 |
<펌> Hook 에 대한 또 다는 설명 (0) | 2015.12.02 |