我正在开发一个带有弹出窗口的文本编辑器组件。弹出窗口的宽度应该在我的组件的属性编辑器中设置时设置。
如何将设置的宽度应用于屏幕分辨率?
如果我输入Width
的值,Delphi会将值存储在.dfm文件中。此外,还存储了PixelsPerInch
值。如果我在使用100%的Windows DPI设置时放置宽度= 96,则将存储.dfm内部:
PixelsPerInch = 96
Width = 96
如果我现在将Windows DPI设置更改为150%并在Delphi中重新打开此项目,则属性编辑器会显示148的宽度。
我也希望这也符合我的价值:
published
property PopupWidth: Integer read FPopupWidth write FPopupWidth;
...但是Delphi没有对我的值应用PixelsPerInch处理。
为什么不呢?我该如何实现呢?
答案 0 :(得分:2)
此缩放机制由VCL中的显式代码处理。该框架提供ChangeScale
的虚拟TControl
方法,以允许您的控件参与。
您可以覆盖控件的ChangeScale
并按照以下方式实现:
procedure TMyControl.ChangeScale(M, D: Integer);
begin
if sfWidth in ScalingFlags then
PopupWidth := MulDiv(PopupWidth, M, D);
inherited;
end;