mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix(ui): DPI-масштабирование SettingsForm/DeviceForm + общий DpiScale
Вся раскладка окон, построенных кодом (SettingsForm, DeviceForm), была захардкожена в пикселях под неявные 96 DPI — на Windows 125-200% или HiDPI-десктопах контролы физически не росли вместе с укрупнившимся шрифтом. Добавлено масштабирование SetBounds через MulDiv(V, Screen.PixelsPerInch, 96) на каждой листовой точке потребления (const-блоки раскладки не трогались). Общий DpiScale вынесен в новый юнит DpiUtils.pas — убрана дублированная копия одноимённого приватного метода в 9 классах (FlatCheckBox, FlatComboBox, FlatListBox, FlatSpinEdit, FlatFloatSpinEdit, FlatEdit, FlatRadioButton, FlatPopupMenu, SettingsForm, DeviceForm) и инлайн-MulDiv без обёртки в MainForm.pas/PanafallPanel.pas. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+16
-12
@@ -6,8 +6,8 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FlatButton, FlatEdit, FlatListBox, AppTheme, Forms, Controls, Graphics, Dialogs,
|
||||
StdCtrls, ExtCtrls, ComCtrls,
|
||||
BoardUtils, PlatformUtils, DeviceStore, RadioBackend;
|
||||
StdCtrls, ExtCtrls, ComCtrls, LCLType,
|
||||
BoardUtils, PlatformUtils, DeviceStore, RadioBackend, DpiUtils;
|
||||
|
||||
type
|
||||
// Результат диалога
|
||||
@@ -124,8 +124,8 @@ constructor TDeviceDialog.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited CreateNew(AOwner);
|
||||
Caption := 'Device Selection';
|
||||
Width := DLG_W;
|
||||
Height := DLG_H;
|
||||
Width := DpiScale(DLG_W);
|
||||
Height := DpiScale(DLG_H);
|
||||
Position := poScreenCenter;
|
||||
BorderStyle := bsDialog;
|
||||
Color := CLR_BG;
|
||||
@@ -149,7 +149,11 @@ end;
|
||||
function TDeviceDialog.MakeBtn(AParent: TWinControl; const Cap: string;
|
||||
X, Y, W, H: Integer; AClick: TNotifyEvent): TFlatButton;
|
||||
begin
|
||||
Result := MakeFlatBtn(AParent, Cap, X, Y, W, H, AClick);
|
||||
// MakeFlatBtn — общая фабрика в FlatButton.pas, используется и другими
|
||||
// окнами (PanafallPanel/PopSignalPopup/...) со своей раскладкой; масштаб
|
||||
// применяем только здесь, на границе вызова из DeviceForm, а не внутри
|
||||
// самой MakeFlatBtn (иначе задело бы все остальные вызовы).
|
||||
Result := MakeFlatBtn(AParent, Cap, DpiScale(X), DpiScale(Y), DpiScale(W), DpiScale(H), AClick);
|
||||
end;
|
||||
|
||||
function TDeviceDialog.MakeLbl(AParent: TWinControl; const Cap: string;
|
||||
@@ -158,7 +162,7 @@ begin
|
||||
Result := TLabel.Create(Self);
|
||||
Result.Parent := AParent;
|
||||
Result.Caption := Cap;
|
||||
Result.Left := X; Result.Top := Y;
|
||||
Result.Left := DpiScale(X); Result.Top := DpiScale(Y);
|
||||
Result.Font.Name := 'Courier New';
|
||||
Result.Font.Size := 8;
|
||||
Result.Font.Color := CLR_TEXTDIM;
|
||||
@@ -174,7 +178,7 @@ begin
|
||||
// --- Левая панель: сохранённые устройства ---
|
||||
PanelLeft := TPanel.Create(Self);
|
||||
PanelLeft.Parent := Self;
|
||||
PanelLeft.SetBounds(GAP, GAP, LEFT_W, PANEL_H);
|
||||
PanelLeft.SetBounds(DpiScale(GAP), DpiScale(GAP), DpiScale(LEFT_W), DpiScale(PANEL_H));
|
||||
PanelLeft.BevelOuter := bvNone;
|
||||
PanelLeft.Color := CLR_PANEL;
|
||||
|
||||
@@ -182,7 +186,7 @@ begin
|
||||
|
||||
LstSaved := TFlatListBox.Create(Self);
|
||||
LstSaved.Parent := PanelLeft;
|
||||
LstSaved.SetBounds(PAD, PAD + LabelH, LEFT_W - PAD * 2, 174);
|
||||
LstSaved.SetBounds(DpiScale(PAD), DpiScale(PAD + LabelH), DpiScale(LEFT_W - PAD * 2), DpiScale(174));
|
||||
LstSaved.Color := CLR_BG;
|
||||
LstSaved.Font.Color:= CLR_TEXT;
|
||||
LstSaved.Font.Name := 'Courier New';
|
||||
@@ -194,7 +198,7 @@ begin
|
||||
MakeLbl(PanelLeft, 'Name:', PAD, FieldTop + 5);
|
||||
EdName := TFlatEdit.Create(Self);
|
||||
EdName.Parent := PanelLeft;
|
||||
EdName.SetBounds(76, FieldTop, LEFT_W - 76 - PAD, EDIT_H);
|
||||
EdName.SetBounds(DpiScale(76), DpiScale(FieldTop), DpiScale(LEFT_W - 76 - PAD), DpiScale(EDIT_H));
|
||||
EdName.Color := CLR_BG;
|
||||
EdName.Font.Color:= CLR_TEXT;
|
||||
EdName.Font.Name := 'Courier New';
|
||||
@@ -204,7 +208,7 @@ begin
|
||||
MakeLbl(PanelLeft, 'IP:', PAD, FieldTop + 5);
|
||||
EdIP := TFlatEdit.Create(Self);
|
||||
EdIP.Parent := PanelLeft;
|
||||
EdIP.SetBounds(76, FieldTop, LEFT_W - 76 - PAD, EDIT_H);
|
||||
EdIP.SetBounds(DpiScale(76), DpiScale(FieldTop), DpiScale(LEFT_W - 76 - PAD), DpiScale(EDIT_H));
|
||||
EdIP.Color := CLR_BG;
|
||||
EdIP.Font.Color:= CLR_TEXT;
|
||||
EdIP.Font.Name := 'Courier New';
|
||||
@@ -228,7 +232,7 @@ begin
|
||||
// --- Правая панель: discovery ---
|
||||
PanelRight := TPanel.Create(Self);
|
||||
PanelRight.Parent := Self;
|
||||
PanelRight.SetBounds(GAP + LEFT_W + GAP, GAP, RIGHT_W, PANEL_H);
|
||||
PanelRight.SetBounds(DpiScale(GAP + LEFT_W + GAP), DpiScale(GAP), DpiScale(RIGHT_W), DpiScale(PANEL_H));
|
||||
PanelRight.BevelOuter := bvNone;
|
||||
PanelRight.Color := CLR_PANEL;
|
||||
|
||||
@@ -236,7 +240,7 @@ begin
|
||||
|
||||
LstFound := TFlatListBox.Create(Self);
|
||||
LstFound.Parent := PanelRight;
|
||||
LstFound.SetBounds(PAD, PAD + LabelH, RIGHT_W - PAD * 2, 250);
|
||||
LstFound.SetBounds(DpiScale(PAD), DpiScale(PAD + LabelH), DpiScale(RIGHT_W - PAD * 2), DpiScale(250));
|
||||
LstFound.Color := CLR_BG;
|
||||
LstFound.Font.Color:= CLR_TEXT;
|
||||
LstFound.Font.Name := 'Courier New';
|
||||
|
||||
Reference in New Issue
Block a user