2014-01-08 3 views
7

Retina-Mac에서도 작동하기 때문에 FireMonkey의 응용 프로그램을 쉽게 확장 할 수 있다고 생각했습니다. 다른 스타일을 선택하는 배경 마술이있는 것 같지만 Windows에서는 그렇지 않습니다.높은 DPI Windows 용 Delphi Firemonkey Scale

VCL에서는 작업을 다소 () 수행했습니다.

FireMonkey의 경우이 코드는 Article by Embarcadero입니다.하지만이 접근법이 XE5에서 유용하기 때문에 Embarcadero는 sampleproject "ControlsDemo"에 scale-trackbar가 더 이상 포함되어 있지 않은 것 같습니다. 또한 스케일 인수를 설정할 수있는 모든 형식에 root-TLayout이 있어야합니다. 내 양식에 그런 요소가 없습니다. (또 다른 firemonkey 버그로 실행하면 확신 할 수 없으므로 추가하는 것이 두려워요.)

그럼 FireMonkey를 사용하여 다른 DPI 설정을 어떻게 설명합니까?

편집 : TPlatFormWin 해킹을 시도하고 CurrentScreenScale을 2로 설정했지만 작동하지 않았습니다. 검은 색 도구 모음이 있지만 크기 조정은 없지만 제공된 TImage.MultiResBitmap의 HighRes 대안을 사용했습니다.

+0

그렇다면 높은 dpi 모니터가 있습니까? 아니면 일반 96 dpi 디스플레이에서 시뮬레이션하려고합니까? –

+1

둘 다 ;-) 나는 HighDPI Windows Tablet을 가지고 있으며 글꼴 설정을 통해 PC에서 시뮬레이션합니다. –

+2

아아,하지만 그 기사에서 언급 된 벡터 기반 스타일은 XE3에서 비트 맵 기반 스타일로 대체되었습니다 (또는 정확히 '플랫폼'스타일은 이제 비트 맵 기반 임). 따라서 '망막'디스플레이는 스타일 포맷 자체의 본질적인 해상도 독립성보다는 Mac 비트 맵 스타일의 두 세트를 포함하여 지원됩니다. 즉, 맞춤 스타일을 사용해도 괜찮 으면 맞춤 제품 스타일 중 하나를 사용해 보았습니까? 대부분은 여전히 ​​벡터 기반의 IIRC입니다. –

답변

0

U 루트 TLayout 변경하려면이 같은 작업을 수행 할 수 있습니다 사람이 당신이 가지고 Windows 데스크톱 Firemonkey이 ... 내 경험이다 읽는 경우 기본

if windowsscale>0 then begin 
    LayoutScale.height:=ClientHeight*100/windowsscale; 
    LayoutScale.Width :=Clientwidth*100/windowsscale; 
    LayoutScale.Scale.X:=windowsscale/100; 
    LayoutScale.Scale.Y:=windowsscale/100; 
end; 
0

인 100

을 OS DPI 설정을 수동으로 처리하고 최상위 컨테이너 (TLayout)에 컨트롤을 두는 것이 좋습니다. 스케일은 OS 화면 DPI 설정 (일부 저수준 코드로 결정)에 따라 설정됩니다. 그러나이 스케일링을 되돌릴 필요가있는 경우가 있습니다. 예를 들어, 확대 된 컨테이너 내부에 올바르게 표시하려면 Viewport3D를 1/X로 축소해야합니다. 그렇지 않으면 픽셀 수준 아티팩트가 표시됩니다. 이미지 품질은 끔찍합니다. 이 스케일 업/스케일 백 기술은 훌륭하게 작동합니다.