Issue #1503: reduce flicker when DPI setting for current screen is modified, or window gets moved to another screen

This commit is contained in:
Ansgar Becker
2021-12-29 11:31:18 +01:00
parent 149d16dceb
commit e8e264fa2a
3 changed files with 31 additions and 0 deletions

View File

@ -16,6 +16,8 @@ type
procedure SetHasSizeGrip(Value: Boolean);
protected
procedure DoShow; override;
procedure DoBeforeMonitorDpiChanged(OldDPI, NewDPI: Integer); override;
procedure DoAfterMonitorDpiChanged(OldDPI, NewDPI: Integer); override;
procedure FilterNodesByEdit(Edit: TButtonedEdit; Tree: TVirtualStringTree);
public
constructor Create(AOwner: TComponent); override;
@ -71,6 +73,21 @@ begin
end;
procedure TExtForm.DoBeforeMonitorDpiChanged(OldDPI, NewDPI: Integer);
begin
// Reduce flicker
inherited;
LockWindowUpdate(Handle);
end;
procedure TExtForm.DoAfterMonitorDpiChanged(OldDPI, NewDPI: Integer);
begin
// Release window updates
LockWindowUpdate(0);
inherited;
end;
class procedure TExtForm.FixControls(ParentComp: TComponent);
var
i: Integer;

View File

@ -13,6 +13,7 @@ object MainForm: TMainForm
OldCreateOrder = True
Position = poDesigned
ShowHint = True
OnBeforeMonitorDpiChanged = FormBeforeMonitorDpiChanged
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy

View File

@ -1155,6 +1155,8 @@ type
procedure actSynMoveUpExecute(Sender: TObject);
procedure actCopyTabsToSpacesExecute(Sender: TObject);
procedure actCopyUpdate(Sender: TObject);
procedure FormBeforeMonitorDpiChanged(Sender: TObject; OldDPI,
NewDPI: Integer);
private
// Executable file details
FAppVerMajor: Integer;
@ -1702,6 +1704,17 @@ begin
end;
procedure TMainForm.FormBeforeMonitorDpiChanged(Sender: TObject; OldDPI,
NewDPI: Integer);
var
Factor: Extended;
begin
// Moving window to different screen or user changed DPI setting for current screen
Factor := 100 / PixelsPerInch * NewDPI;
LogSQL(f_('Scaling controls to screen DPI: %d%%', [Round(Factor)]));
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
i: Integer;