델파이/C++ 프로그램 현대화 – 패스트리포트(FastReport)를 활용해 윈도우 High DPI 지원 버전으로 마이그레이션하기

요즘 디스플레이 패널들은 물리적 공간 당 픽셀 수가 점점 더 늘어나고 있습니다. 즉, DPI (인치 당 도트수)가 더 많아지고 있다는 의미이죠. 예전 대부분의 디스플레이는 96 DPI로 한 선형 인치 당 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 unaware 상태이며, 화면에 맞추어 비트맵을 확장하는 상태를 기본값으로 설정하고 있습니다. 일반적으로 DPI 설정은 Unaware, System, Per-Monitor, Per-MonitorV2 중에서 하나로 설정됩니다. DPI Awareness 모드인 경우, 애플리케이션은 윈도우에 DPI 확장을 어떻게 처리할 지 명확하게 알려줄 수 있습니다.

DPI Aware 상태의 애플리케이션이 Per-MonitorV2 Aware로 업데이트 되면, UI 레이아웃을 제어하는 코드 또한 애플리케이션이 초기화되거나 DPI 변경 알림(Win32의 경우 WM-DPICHANGED)이 있을 때마다 업데이트 되어야 합니다.

델파이 애플리케이션을 High DPI로 마이그레이션 할 때 꼭 알아두어야 하는 점들은 무엇일까요?

  • DPI Awareness 모드를 설정합니다: Project -> Coptions -> Application -> Manifest-DPI Awareness -> Per-MonitorV2 선택
  • Screen.PixelsPerInch-primaryDiaplay DPI 활용
  • TImagesList가 아닌 TVirtualImageList 사용
  • 이미지에 대한 모든 절대 위치값 확인
  • Control.CurrentPPI로 각 컨트롤들에 대한 현재 PPI값 확인
  • 대화상자 혼합 모드 (SetThreadDPIAwarenesscontext)
  • 이벤트 OnBeforMonitorDPIChanged / OnAfterMonitorDPIChanged 활용

Note: 플랫폼과 애플리케이션을 개발한 델파이 버전 호환성이 보장되어야 합니다.

델파이와 패스트리포트(FastReport) High DPI 컨트롤들:

  • TControl: ScaleforPPI, ChangeScale, ScaleControlsForPPI와 같은 프로시저로, High DPI 변경 작업을 지원합니다.
  • TFrxBAseForm: UpdateResources, UpdateFormPPI, ProcessPreferences와 같은 프로시저와 WM_DPICHANGED 메세지로 패스트리포트 폼 DPI 변경이 가능합니다.
  • TFrxDPIAwareCustom: DoPPIChanged, GetScale과 같은 프로시저와 WM_DPICHANGED_AFTERPARENT 메세지로 패스트리포트 사용자 지정 컨트롤 DPI 변경이 가능합니다.

윈도우 10 High DPI로 빠르게 마이그레이션 하는 방법을 데모와 함께 알기 쉽게 설명한 아래 영상이 많은 도움이 될 것입니다!

api C++ c++builder c++빌더 code database Delphi fmx IDE ideas interbase ios migration modernization news python radstudio RAD스튜디오 tips UI UIUX vcl windows 개발 개발사례 개발팁 교육 기술레터 기술백서 데이터 데이터베이스 델파이 마이그레이션 모바일 윈도우 윈도우11 인터베이스 출시 코드 파이썬 파이어몽키 프로그래밍 프로젝트 현대화