Kori 10월 11일, 2021에 포스트됨 공유하기 10월 11일, 2021에 포스트됨 Anbarasan의 Quickly Migrate and Modernize Your Delphi/C++ Apps Using FastReport With Windows High DPI Setup 을 번역했습니다. (원문 작성 시기: 2020년 11월) 디스플레이 패널의 물리적 공간 당 픽셀 수는 점점 더 많아지고 있어서 DPI (인치 당 도트수)가 높은 모니터가 많아졌다. 예전에는 디스플레이 대부분이 96 DPI 즉, 1 인치 당 96 픽셀이 들어있었지만, 2017년에는 거의 300 DPI가 넘는 것들도 생겨났다. 이제 시중에는 SD, Full HD, 4K 울트라 HD, 8K 울트라 HD 등 다양한 모니터가있다. 우리가 사용하는 노트북이나 화면이 작은 데스크탑에서 화면 배율 팩터/DPI를 변경할 수 없으면 사용하기가 매우 어렵다. 더 나아가 Full HD, 4K 울트라 HD, 8K 울트라 HD 모니터에서는 훨씬 더 복잡하다. 우리의 애플리케이션들은 이 모든 것을 다룰 수 있어야 한다. 어떤 사용자가 어떤 사양의 모니터를 사용할 지 모르기 때문이다. 화면 배율 팩터/DPI가 변경되는 일반적인 상황 몇 가지를 살펴보자: 모니터 여러 대를 사용하는데, 각 모니터의 화면 배율이 서로 다르고, 애플리케이션이 한 모니터에서 다른 모니터로 옮겨지는 경우 (예. 모니터 1은 4K이고 모니터 2는 1080p 화면) DPI가 낮은 외부 모니터를 DPI가 높은 노트북에 연결 또는 연결 해제하는 경우 (또는 그 반대의 경우) DPI가 높은 노트북/태블릿에서 원격 데스트탑을 통해 DPI가 낮은 장비를 연결하는 경우 (또는 그 반대의 경우) 애플리케이션이 작동하고 있는 중에 윈도우의 화면 배율 팩터 설정을 변경하는 경우 데스크탑 애플리케이션은 자신이 DPI Scaling을 지원하는 지를 윈도우에게 알려야 한다. 이 정보가 전달되지 않으면 윈도우 시스템은 일단 해당 데스크탑 애플리케이션은 DPI를 인식하지 않는다고 간주하고, 화면에 맞게 비트맵을 확대/축소 한다. 애플리케이션은 자신의 DPI 인식 모드를 Unaware, System, Per-Monitor, Per-MonitorV2 중에서 하나로 설정함으로써 윈도우가 해당 애플리케이션을 화면에 표현할 때 DPI 확장을 어떻게 처리할 지 명확하게 알려주게 된다. 일반 애플리케이션을 Per-MonitorV2 인식으로 업데이트할 때에는, UI 레이아웃을 제어하는 코드 역시 업데이트 되도록 해야 한다. 이 처리는 애플리케이션이 초기화되는 시점 뿐만 아니라 DPI 변경 (Win32의 경우 WM-DPICHANGED 윈도우 메시지) 알림을 받을 때마다 반영되어야 한다. 델파이 애플리케이션을 High DPI로 마이그레이션 할 때 꼭 알아두어야 하는 점들은 무엇일까? DPI Awareness 모드를 설정한다: Project > Options > Application > Manifest-DPI Awareness 에서 Per-MonitorV2를 선택한다. Screen.PixelsPerInch 에 주 모니터의 DPI를 사용한다. TImagesList 대신 TVirtualImageList를 사용한다. 모든 사용자 정의 그리기 작업에서 절대 위치를 확인한다. Control.CurrentPPI를 사용하여 각 컨트롤들이 표현되는 현재 PPI값을 받아낸다. 대화상자 혼합 모드 (SetThreadDPIAwarenesscontext) 폼의 OnBeforMonitorDPIChanged / OnAfterMonitorDPIChanged 이벤트를 사용한다. 주의: 플랫폼과 애플리케이션을 개발한 델파이 버전 호환성을 확인해야 한다. 델파이와 패스트리포트(FastReport)의 High DPI 컨트롤들: TControl: ScaleforPPI, ChangeScale, ScaleControlsForPPI와 같은 프로시저들은 High DPI 변경을 도와준다. TFrxBAseForm: UpdateResources, UpdateFormPPI, ProcessPreferences와 같은 프로시저와 WM_DPICHANGED 윈도우 메세지는 패스트리포트 폼의 DPI 변경을 도와준다. TFrxDPIAwareCustom: DoPPIChanged, GetScale과 같은 프로시저와 WM_DPICHANGED_AFTERPARENT 윈도우 메세지는 패스트리포트의 사용자 지정 컨트롤 DPI 변경을 도와준다. Fast Migration to Windows 10 High DPI 비디오에서 데모를 확인해보자! 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.