以下在win10上做的测试,win7未试验,有需要的可以自行测试。
首先应用程序Application.Manifest中设置为:per Monitor V2. 不然有可能窗体收不到屏幕变动通知。
Delphi10.4版本中,窗体有Scaled属性,true为默认,表示屏幕缩放时,窗体也跟着缩放。false时屏幕缩放比例的变化,窗体不会相应跟着变动。
窗体的OnAfterMonitorDpiChanged事件中,加上
ScaleForCurrentDpi;ScaleControls(OldDPI,NewDPI);
即可在Scale设置了true的情况下,反向还原窗口与子控件大小设置。