Windows는 여러 모니터를 가상 데스크톱에 매핑 할 수 있으므로 작업을 쉽게 설계하기 위해 작업을 수행 할 수 있습니다. 예를 들어, PowerPoint는 듀얼 모니터의 장점을 완전히 활용합니다 (대부분의 노트북은 하나의 모니터에서 슬라이드 쇼를 재생하고 다른 모니터에서 메모를 할 수 있습니다. . 그렇다면 어떻게 그러한 응용 프로그램을 개발합니까? 이 기사에서는 Delphi를 사용하여 여러 모니터를 사용하여 응용 프로그램을 구현하는 경우 표시됩니다.
Windows는 클로닝 디스플레이 방법을 지원하며 각 모니터는 동일한 콘텐츠를 출력하여 일부 응용 프로그램에 적합합니다. 일부 그래픽 카드는 두 개의 모니터를 지원하지만 실제로는 다중 공연이 아니지만 가상 고해상도 디스플레이 모드 (예 : 2048 × 768 또는 1024 × 1536). 이 두 디스플레이 모드 중 어느 것도이 기사에서 Zhongdian이 소개되지 않았으며, 또한 매우 간단하므로 다시 반복하지 않을 것입니다.
Windows는 최대 10 개의 모니터를 지원하며 Windows는 모든 모니터를 대형 가상 데스크탑에 맵핑합니다. 디스플레이는 데스크탑의 부분보기로 이해할 수 있습니다. 이 디스플레이는 디스플레이의 물리적 위치에 따라 디스플레이 속성에 임의로 배열 될 수 있습니다. 모니터가 불규칙적으로 배열되면 가상 데스크탑의 일부 부분이 어느 모니터에도 표시되지 않을 수 있습니다. 두 모니터 사이에 양식이 나타나지 않기 위해 Windows는 기본 모니터로 디스플레이를 사용합니다. 컴퓨터가 시작되면 주 모니터에 로그인 대화 상자가 표시됩니다. 대부분의 프로그램 시작 디스플레이는 기본 모니터에 표시됩니다.
위의 소개에 따르면 데스크탑, 모니터, 주 모니터 등 몇 가지 중요한 개념을 찾는 것은 어렵지 않습니다. 먼저, 먼저 이러한 개념과 이전 관계를 알아 내야합니다. 이것은 멀티 디스플레이 응용 프로그램의 개발 방법을 마스터하는 열쇠입니다. 이러한 개념을 이해하면 다른 부분은 이해하기 쉽습니다.
데스크탑은 실제로 Windows가 표시 할 수있는 논리 영역을 나타냅니다. 실제로 데스크탑 외부에는 양식이 표시 될 수 있습니다. 그러나 이것은 데스크탑의 모든 부분이 특정 모니터에 표시 될 것이라는 의미는 아닙니다 (이유는 이전에 언급 된 바와 같이).
데스크탑은 정점 좌표 (상단, 왼쪽)와 너비 및 높이로 데스크탑의 크기를 설명하는 직사각형 영역입니다. 왜 여전히 정점 좌표가 필요한가요? 정점 좌표는 당연한 것으로 여겨지지 않기 때문에 (0,0). 그렇다면 (0,0)는 어디에 있습니까? 긴 이야기이므로 먼저 지금 언급 한 개념 인 메인 모니터를 검토합시다. Windows는 사람들이 가장 가까운 모니터에주의를 기울이는 데 사용되기 때문에 처음에는 메인 모니터에 일반 프로그램이 표시되기를 원합니다. Windows는 사용자가 가장 왼쪽 모니터를 메인 모니터로 사용하도록 강요 할 수 없으므로 응용 프로그램은 기본 모니터에 스스로 표시하려면 계산에 대해 걱정해야합니다. 그러나 대부분의 사용자는 하나의 모니터 만 가지고 있으며 (두 개의 모니터가 너무 많은 공간을 차지함) 일반 애플리케이션은 기본 모니터의 위치와 표시 위치를 계산하기 위해 많은 노력을 기울이고 싶지 않습니다. 따라서 Windows는 합리적인 솔루션을 제안합니다. 기본 디스플레이의 정점 좌표를 좌표계의 원점으로 사용하십시오. 이러한 방식으로 일반 프로그램은 단일 모니터 환경에서 문제를 고려해야합니다.
모니터는 데스크탑의 부분보기입니다. 그것은 창문을 통해 창문 외부의 풍경을보고 다른 창문 앞에 서서 다른 그림을 볼 수 있습니다. 마찬가지로, 디스플레이는 또한 직사각형 영역이며, 그 크기는 정점 좌표 (상단, 왼쪽)와 너비 및 높이로 설명 할 수 있습니다. 정점 좌표는 데스크탑 좌표 시스템의 원점, 즉 메인 디스플레이의 정점과 관련이 있습니다.
작업 공간의 개념은 비교적 간단합니다. 작업 표시 줄과 데스크탑에 도킹 된 기타 양식을 제외하고는 모니터의 직사각형 영역을 나타냅니다.
Windows는 멀티 디스플레이 응용 프로그램 개발을위한 API 세트를 제공합니다. VCL은 이러한 API를 캡슐화하여 전체 프레임 워크에 매우 자연스럽게 통합하여 멀티 디스플레이 응용 프로그램을 쉽게 개발할 수 있습니다. 다음은 관련 내용입니다.
가장 친숙한 VCL은 아마도 tcustomform 일 것입니다. 이것은 모든 형태의 기본 클래스입니다. tcustomform의 위치 특성은 양식의 실제 위치를 설정하는 데 사용됩니다. 메인 디스플레이 중 하나는 포지션 속성이 PodeskTopCenter로 설정되면 전체 데스크탑의 중앙에 표시됩니다. 이 속성이 PodeskTopCenter로 설정되고 프로그램이 여러 모니터가있는 시스템에서 실행되면이 창은 두 모니터 사이에 표시되어 사용자에게 불필요한 문제가 발생합니다. 따라서 우리 프로그램이 다중 디스플레이를 위해 설계되지 않더라도이 값은 신중하게 처리해야합니다. 다른 속성은 DefaultMonitor이며, 위치와 유사한 기능을 갖는 기본 모니터이며, 이는 처음에 표시되는 모니터를 결정합니다. DMDESKTOP, DMPRIMARY, DMMAINFORM 및 DMACTIVEFORM의 네 가지 대체 값이 있습니다. 그들의 의미는 다음과 같습니다.
값 | 의미 |
DMDESKTOP | 특별한 대우가 없습니다 |
DMPRIMARY | 첫 번째 모니터에 양식을 표시하십시오. 이것은 말 그대로 메인 모니터 인 또 다른 트랩이며 실제로 화면을 나타냅니다. Monitor [0] 모니터. |
dmmainform | 기본 양식이있는 모니터에 양식을 표시합니다. |
dmactiveform | 활성 양식이 데스크탑에있는 모니터에 양식을 표시하십시오. |
Tcustomform에는도 읽기 전용 공통 속성 (게시되지 않은) 모니터가 있으며,이 값은 기본 모니터와 밀접한 관련이 있습니다.
그렇다면 다른 디스플레이간에 양식을 어떻게 이동합니까? 이것은 어렵지 않습니다. 아마도 당신도 생각했을 것입니다. 두 가지 방법은 다음과 같습니다.
먼저, tcustomform의 상단과 왼쪽을 설정하여 데스크탑의 어느 곳에도 양식을 표시 할 수 있습니다. 앞에서 언급했듯이 데스크탑은 모든 모니터로 구성됩니다. 그것들은 공통 좌표계를 가지므로, 디스플레이의 논리적 위치에 따라 양식의 위치를 결정할 수 있습니다. 문제는 이제 각 모니터의 논리적 위치와 크기를 얻는 방법입니다. 나중에 소개됩니다.
둘째, tcustomform의 makelyvervisible 메소드를 호출하여 양식을 지정된 디스플레이에 완전히 표시 할 수 있습니다. 이 방법은 창이 두 모니터 각각의 일부를 표시하는 것을 방지하는 데 사용될 수 있습니다.
방금 질문을했습니다. 각 모니터의 논리적 위치와 크기를 얻는 방법. 이 질문에 답하려면 Tscreen과 Tmonitor라는 다른 범주를 소개해야합니다.
Tscreen은 디스플레이 장치와 관련된 일부 정보를 설명하며 주로 디스플레이의 논리적 위치 및 크기와 관련된 정보에 관심이 있습니다. 다른 측면은 델파이의 문서에서 찾을 수 있습니다. 프로그램이 실행될 때 VCL은 전역 변수 인 Tscreen 인스턴스를 자동으로 생성하므로 일반적으로 프로그램은 Tscreen을 인스턴스화 할 필요가 없습니다.
Tscreen에는 데스크탑 모양의 속성 세트가 있으며, 전체 데스크탑의 크기와 각 정점의 좌표를 설명합니다. 다중 모니터 응용 프로그램의 개발에 큰 의미가있는 여러 속성이 있습니다 : MonitorCount 및 Monitors. 이 두 속성을 통해 시스템의 모든 모니터 (tmonitors) 인스턴스를 열거 할 수 있습니다.
Tscreen의 많은 특성 중에서도 높이와 너비의 두 가지 특성을 찾을 수 있습니다. 특히 전체 데스크탑의 크기를 언급하지 않고 기본 디스플레이의 높이와 너비를 언급하는 것이 특히주의하십시오. 이것은 사람들이 전체 데스크탑의 크기를 생각할 수 없다는 환상을 느끼게하기가 매우 쉽습니다. 마찬가지로, workarea*와 같은 속성 세트가 있는데, 이는 메인 디스플레이의 작업 영역의 크기와 각 정점의 좌표를 설명합니다. 뭔가 빠진 것 같아? 메인 모니터의 상대 위치의 속성이 왜 얻지 못하는가? 그 이유는 앞에서 언급했듯이 : Windows는 기본 모니터의 왼쪽 상단을 좌표계의 원점으로 사용하므로 기본 모니터의 상대 위치는 (0, 0)이어야합니다.
이러한 특성 외에도 Tscreen의 3 가지 멤버 기능 (Monitorfrompoint, MonitorFromErct 및 MonitorFromWindow)을 소개합니다. 이름에서 알 수 있듯이 좌표, 특정 영역 및 특정 창이있는 디스플레이의 인스턴스입니다. 실제 개발에도 사용될 수 있습니다.
최고, tmonitor 클래스를 살펴 보겠습니다. 물리적 디스플레이의 관련 특성 (모든 읽기 전용)을 캡슐화합니다. 다음 표는 이러한 속성의 의미를 간략하게 설명하며,이 속성은 멀티 디스플레이 응용 프로그램을 작성하는 데 매우 유용합니다.
재산 | 설명 |
핸들 | 이 모니터의 Windows 핸들을 가져옵니다 |
모니토 늄 | 모니터 번호를 얻으십시오 |
주요한 | 모니터가 기본 모니터인지 여부를 가져옵니다. 모니터가 하나만있는 기본은 사실입니다. |
맨 위 | 모니터의 상단 경계를 가져옵니다 |
왼쪽 | 모니터의 왼쪽 테두리를 가져옵니다 |
키 | 모니터의 높이를 얻으십시오 |
너비 | 모니터의 너비를 얻으십시오 |
boundsRect | 위의 4 가지 속성에 해당하는 모니터의 해당 데스크탑 영역을 가져옵니다. |
workarecect | 모니터 작업 공간의 데스크탑에 해당하는 영역을 가져옵니다. |
Tscreen과 tmonitor에 대한 명확한 이해 후, 이전 문제는 자연스럽게 해결 될 것입니다. 이 시점 에서이 기사는 멀티 디스플레이 응용 프로그램을 개발하는 데 필요한 모든 지식을 다루었습니다. 이 지식을 사용하여 매우 실용적인 소프트웨어 제품을 개발할 수 있다고 생각합니다.
부록 :이 기사를 이해하는 데 도움이되는 데모를 다운로드 할 수 있습니다.