Forms 如何使窗体中的控件以相同的大小和位置显示,而不考虑系统的DPI?
根据我的经验,我注意到有三种类型的应用程序:Forms 如何使窗体中的控件以相同的大小和位置显示,而不考虑系统的DPI?,forms,delphi,controls,scale,dpi,Forms,Delphi,Controls,Scale,Dpi,根据我的经验,我注意到有三种类型的应用程序: 符合Windows DPI设置并正确缩放的 那些总是保持一切在同一像素位置,不缩放任何东西(这就是我想要的) 那些无法处理非标准DPI设置的设备,因此它们的控制到处都是。此类程序有时建议用户更改其DPI设置 我已经知道在Win32 API中有SetProcessDPIAware()和SetProcessDPIAware()函数,在TForm类中有Scaled和PixelsPerInch属性 我已经尝试过这些东西,搜索过网络,但我还没有找到或开发出任何
SetProcessDPIAware()
和SetProcessDPIAware()
函数,在TForm
类中有Scaled
和PixelsPerInch
属性
我已经尝试过这些东西,搜索过网络,但我还没有找到或开发出任何可靠的方法。要实现您的愿望:
Scaled
属性设置为False
。这可确保表单及其控件不会按当前DPI进行缩放<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
请允许我不同意:该用户询问的是“行为良好”。我甚至不知道他那是什么意思。你认为他指的是无论系统的DPI如何,都以相同的大小和位置出现吗?只是想澄清一下:以上评论是对Ken White将问题标记为重复问题的回答。谢谢你,我已经尝试过了,只希望它能起作用,因为我还没有能够测试它。谢谢,我已经试过了,只希望它能起作用,因为我还没能测试它。
type
TBaseForm = class(TForm) // all forms in your program must derive from this base class
protected
procedure WMDpiChanged(var Msg: TMessage); message WM_DPICHANGED;
end;
....
procedure TBaseForm.WMDpiChanged(var Msg: TMessage);
begin
// return 0 to indicate that we have processed the message
Msg.Result := 0;
end;