2017-02-12 1 views
0

팝업 창이있는 텍스트 편집기 구성 요소를 개발 중입니다. 내 구성 요소의 속성 편집기에서 디자인 타임 중에 팝업 창의 너비를 설정해야합니다.구성 요소의 등록 정보에서 DPI 인식 값을 사용하는 방법은 무엇입니까?

화면 해상도에 너비를 어떻게 적용 할 수 있습니까?

Width의 값을 입력하면 Delphi는 .dfm 파일에 값을 저장합니다. 또한 PixelsPerInch 값이 저장됩니다. 나는 배치하면 폭 = 96 .DFM가 저장 될 내부에 나는 100 %의 윈도우 DPI 설정을 사용하고있는 동안 :

PixelsPerInch = 96 
Width = 96 

나는 내 Windows DPI가 150 %에 지금 바로 설정하고이를 다시 변경하는 경우 프로젝트 델파이, 속성 편집기 날 너비 148 보여줍니다.

published 
    property PopupWidth: Integer read FPopupWidth write FPopupWidth; 

을 ...하지만 델파이 내 값을 처리 PixelsPerInch 적용되지 않습니다 :

내 값도 이것을 가지고 싶습니다.

왜 안 되니? 어떻게 구현할 수 있습니까?

enter image description here

+0

- * "왜?"* - 컴파일러가 당신의 마음을 읽을 수 있기 때문입니다. * * ".. how .."* - TCustomForm.ReadState에 코드가 표시되어야한다고 생각합니다. 이는 또한 관련성이 있습니다. http://docwiki.embarcadero.com/RADStudio/Seattle/en/Considerations_When_Dynamically_Resizing_Forms_and_Controls –

+0

또한 픽셀 수가 아닌 다른 정수 값의 크기를 조정하지 않습니다. 그것들을 확장해야합니까? –

+0

@DavidHeffernan : 예, 확장 가능해야합니다. Delphi에 속성을 확장하도록 어떻게 알 수 있습니까? – Tahtu

답변

2

이 확장 메커니즘은 VCL에서 명시 적 코드에 의해 처리됩니다. 프레임 워크는 컨트롤이 참여할 수 있도록 TControl 가상 메서드 ChangeScale을 제공합니다.

당신은 당신의 제어를위한 ChangeScale를 무시하고 다음과 같이 그것을 구현하는 것이 :

procedure TMyControl.ChangeScale(M, D: Integer); 
begin 
    if sfWidth in ScalingFlags then 
    PopupWidth := MulDiv(PopupWidth, M, D); 
    inherited; 
end; 
관련 문제