Polish device dialog layout

This commit is contained in:
2026-05-21 14:23:08 +03:00
parent a0019493b6
commit 343735389e
+92 -52
View File
@@ -136,7 +136,15 @@ const
CLR_BORDER = TColor($00303030); CLR_BORDER = TColor($00303030);
CLR_ACCENT = TColor($0040FF80); CLR_ACCENT = TColor($0040FF80);
CLR_AUTO = TColor($0000CCFF); // цвет авто-устройства CLR_AUTO = TColor($0000CCFF); // цвет авто-устройства
BTN_H = 24; DLG_W = 760;
DLG_H = 500;
GAP = 12;
PAD = 14;
BTN_H = 28;
EDIT_H = 26;
PANEL_H = 412;
LEFT_W = 348;
RIGHT_W = 372;
{ TDeviceDialog } { TDeviceDialog }
@@ -144,8 +152,8 @@ constructor TDeviceDialog.Create(AOwner: TComponent);
begin begin
inherited CreateNew(AOwner); inherited CreateNew(AOwner);
Caption := 'Device Selection'; Caption := 'Device Selection';
Width := 660; Width := DLG_W;
Height := 420; Height := DLG_H;
Position := poScreenCenter; Position := poScreenCenter;
BorderStyle := bsDialog; BorderStyle := bsDialog;
Color := CLR_BG; Color := CLR_BG;
@@ -158,6 +166,7 @@ begin
FResult.Accepted := False; FResult.Accepted := False;
BuildUI; BuildUI;
SetTheme(DarkTheme);
LoadSaved; LoadSaved;
RefreshSavedList; RefreshSavedList;
end; end;
@@ -165,21 +174,7 @@ end;
function TDeviceDialog.MakeBtn(AParent: TWinControl; const Cap: string; function TDeviceDialog.MakeBtn(AParent: TWinControl; const Cap: string;
X, Y, W, H: Integer; AClick: TNotifyEvent): TFlatButton; X, Y, W, H: Integer; AClick: TNotifyEvent): TFlatButton;
begin begin
Result := TFlatButton.Create(Self); Result := MakeFlatBtn(AParent, Cap, X, Y, W, H, AClick);
Result.Parent := AParent;
Result.Caption := Cap;
Result.Left := X; Result.Top := Y;
Result.Width := W; Result.Height := H;
Result.OnClick := AClick;
Result.Font.Name := 'Courier New';
Result.Font.Size := 8;
Result.Font.Color := CLR_TEXT;
Result.ClrNorm := CLR_PANEL;
Result.ClrBorder := TColor($00404040);
Result.ClrHot := TColor($00303030);
Result.ClrActive := TColor($00003300);
Result.ClrText := CLR_TEXT;
Result.ClrTextAct := TColor($0000FF88);
end; end;
function TDeviceDialog.MakeLbl(AParent: TWinControl; const Cap: string; function TDeviceDialog.MakeLbl(AParent: TWinControl; const Cap: string;
@@ -195,22 +190,24 @@ begin
end; end;
procedure TDeviceDialog.BuildUI; procedure TDeviceDialog.BuildUI;
const
LabelH = 18;
var var
LblHint: TLabel; LblHint: TLabel;
Ed: TEdit; FieldTop, ButtonsTop, BottomTop: Integer;
begin begin
// --- Левая панель: сохранённые устройства --- // --- Левая панель: сохранённые устройства ---
PanelLeft := TPanel.Create(Self); PanelLeft := TPanel.Create(Self);
PanelLeft.Parent := Self; PanelLeft.Parent := Self;
PanelLeft.SetBounds(8, 8, 300, 360); PanelLeft.SetBounds(GAP, GAP, LEFT_W, PANEL_H);
PanelLeft.BevelOuter := bvNone; PanelLeft.BevelOuter := bvNone;
PanelLeft.Color := CLR_PANEL; PanelLeft.Color := CLR_PANEL;
MakeLbl(PanelLeft, 'SAVED DEVICES', 6, 6); MakeLbl(PanelLeft, 'SAVED DEVICES', PAD, PAD);
LstSaved := TListBox.Create(Self); LstSaved := TListBox.Create(Self);
LstSaved.Parent := PanelLeft; LstSaved.Parent := PanelLeft;
LstSaved.SetBounds(4, 22, 292, 140); LstSaved.SetBounds(PAD, PAD + LabelH, LEFT_W - PAD * 2, 174);
LstSaved.Color := CLR_BG; LstSaved.Color := CLR_BG;
LstSaved.Font.Color:= CLR_TEXT; LstSaved.Font.Color:= CLR_TEXT;
LstSaved.Font.Name := 'Courier New'; LstSaved.Font.Name := 'Courier New';
@@ -218,79 +215,122 @@ begin
LstSaved.OnClick := @LstSavedClick; LstSaved.OnClick := @LstSavedClick;
LstSaved.OnDblClick := @LstSavedDblClick; LstSaved.OnDblClick := @LstSavedDblClick;
MakeLbl(PanelLeft, 'Name:', 6, 170); FieldTop := 212;
MakeLbl(PanelLeft, 'Name:', PAD, FieldTop + 5);
EdName := TEdit.Create(Self); EdName := TEdit.Create(Self);
EdName.Parent := PanelLeft; EdName.Parent := PanelLeft;
EdName.SetBounds(50, 167, 140, BTN_H); EdName.SetBounds(76, FieldTop, LEFT_W - 76 - PAD, EDIT_H);
EdName.Color := CLR_BG; EdName.Color := CLR_BG;
EdName.Font.Color:= CLR_TEXT; EdName.Font.Color:= CLR_TEXT;
EdName.Font.Name := 'Courier New'; EdName.Font.Name := 'Courier New';
EdName.Font.Size := 8; EdName.Font.Size := 8;
MakeLbl(PanelLeft, 'IP:', 6, 198); Inc(FieldTop, EDIT_H + 10);
MakeLbl(PanelLeft, 'IP:', PAD, FieldTop + 5);
EdIP := TEdit.Create(Self); EdIP := TEdit.Create(Self);
EdIP.Parent := PanelLeft; EdIP.Parent := PanelLeft;
EdIP.SetBounds(50, 195, 140, BTN_H); EdIP.SetBounds(76, FieldTop, LEFT_W - 76 - PAD, EDIT_H);
EdIP.Color := CLR_BG; EdIP.Color := CLR_BG;
EdIP.Font.Color:= CLR_TEXT; EdIP.Font.Color:= CLR_TEXT;
EdIP.Font.Name := 'Courier New'; EdIP.Font.Name := 'Courier New';
EdIP.Font.Size := 8; EdIP.Font.Size := 8;
EdIP.TextHint := '192.168.1.x'; EdIP.TextHint := '192.168.1.x';
BtnAdd := MakeBtn(PanelLeft, 'ADD', 6, 225, 70, BTN_H, @BtnAddClick); ButtonsTop := FieldTop + EDIT_H + 12;
BtnRemove := MakeBtn(PanelLeft, 'REMOVE', 80, 225, 70, BTN_H, @BtnRemoveClick); BtnAdd := MakeBtn(PanelLeft, 'ADD', PAD, ButtonsTop, 94, BTN_H, @BtnAddClick);
BtnRemove := MakeBtn(PanelLeft, 'REMOVE', PAD + 102, ButtonsTop, 94, BTN_H, @BtnRemoveClick);
BtnSetAuto := MakeBtn(PanelLeft, 'SET AUTOSTART', 6, 255, 130, BTN_H, @BtnSetAutoClick); Inc(ButtonsTop, BTN_H + 8);
LblHint := MakeLbl(PanelLeft, '* = autostart', 150, 260); BtnSetAuto := MakeBtn(PanelLeft, 'SET AUTOSTART', PAD, ButtonsTop, 154, BTN_H, @BtnSetAutoClick);
LblHint := MakeLbl(PanelLeft, '* = autostart', PAD + 168, ButtonsTop + 6);
LblHint.Font.Color := CLR_AUTO; LblHint.Font.Color := CLR_AUTO;
BtnConnect := MakeBtn(PanelLeft, 'CONNECT', 6, 295, 130, BTN_H+4, @BtnConnectClick); BottomTop := PANEL_H - PAD - BTN_H - 6;
BtnConnect := MakeBtn(PanelLeft, 'CONNECT', PAD, BottomTop, LEFT_W - PAD * 2, BTN_H + 6, @BtnConnectClick);
BtnConnect.ClrText := CLR_ACCENT; BtnConnect.ClrText := CLR_ACCENT;
BtnConnect.ClrTextAct := CLR_ACCENT; BtnConnect.ClrTextAct := CLR_ACCENT;
// --- Правая панель: discovery --- // --- Правая панель: discovery ---
PanelRight := TPanel.Create(Self); PanelRight := TPanel.Create(Self);
PanelRight.Parent := Self; PanelRight.Parent := Self;
PanelRight.SetBounds(320, 8, 330, 360); PanelRight.SetBounds(GAP + LEFT_W + GAP, GAP, RIGHT_W, PANEL_H);
PanelRight.BevelOuter := bvNone; PanelRight.BevelOuter := bvNone;
PanelRight.Color := CLR_PANEL; PanelRight.Color := CLR_PANEL;
MakeLbl(PanelRight, 'DISCOVERED DEVICES', 6, 6); MakeLbl(PanelRight, 'DISCOVERED DEVICES', PAD, PAD);
LstFound := TListBox.Create(Self); LstFound := TListBox.Create(Self);
LstFound.Parent := PanelRight; LstFound.Parent := PanelRight;
LstFound.SetBounds(4, 22, 322, 190); LstFound.SetBounds(PAD, PAD + LabelH, RIGHT_W - PAD * 2, 250);
LstFound.Color := CLR_BG; LstFound.Color := CLR_BG;
LstFound.Font.Color:= CLR_TEXT; LstFound.Font.Color:= CLR_TEXT;
LstFound.Font.Name := 'Courier New'; LstFound.Font.Name := 'Courier New';
LstFound.Font.Size := 8; LstFound.Font.Size := 8;
LstFound.OnDblClick := @LstFoundDblClick; LstFound.OnDblClick := @LstFoundDblClick;
BtnDiscover := MakeBtn(PanelRight, 'DISCOVER', 6, 220, 100, BTN_H, @BtnDiscoverClick); ButtonsTop := PAD + LabelH + 250 + 14;
BtnAddFound := MakeBtn(PanelRight, 'SAVE DEVICE', 6, 250, 100, BTN_H, @BtnAddFoundClick); BtnDiscover := MakeBtn(PanelRight, 'DISCOVER', PAD, ButtonsTop, 116, BTN_H, @BtnDiscoverClick);
BtnAddFound := MakeBtn(PanelRight, 'SAVE DEVICE', PAD + 128, ButtonsTop, 140, BTN_H, @BtnAddFoundClick);
BtnCancel := MakeBtn(PanelRight, 'CANCEL', 220, 295, 100, BTN_H+4, @BtnCancelClick); BtnCancel := MakeBtn(PanelRight, 'CANCEL', RIGHT_W - PAD - 116, BottomTop, 116, BTN_H + 6, @BtnCancelClick);
end; end;
procedure TDeviceDialog.ApplyTheme; procedure TDeviceDialog.ApplyTheme;
begin begin
SetTheme(DarkTheme);
end; end;
procedure TDeviceDialog.SetTheme(const T: TAppTheme); procedure TDeviceDialog.SetTheme(const T: TAppTheme);
procedure StyleBtn(B: TFlatButton; Accent: Boolean); procedure StyleButton(B: TFlatButton; Active: Boolean);
begin begin
B.ClrNorm := T.Panel; if B = nil then Exit;
B.ClrBorder := T.Border; B.Active := Active;
B.ClrHot := T.BG; B.ClrNorm := T.BtnNorm;
B.ClrActive := T.Panel; B.ClrActive := T.BtnActive;
B.ClrText := T.Text; B.ClrHot := T.BtnHot;
if Accent then B.ClrTextAct := T.FreqActive if Active then B.ClrBorder := T.BtnBorderActive
else B.ClrTextAct := T.Text; else B.ClrBorder := T.BtnBorderNorm;
B.ClrText := T.BtnText;
B.ClrTextAct := T.BtnTextActive;
B.Font.Name := 'Courier New';
B.Font.Size := 8;
B.Font.Color := T.Text; B.Font.Color := T.Text;
B.Invalidate; B.Invalidate;
end; end;
procedure StyleDiscoverButton(B: TFlatButton);
begin
if B = nil then Exit;
B.Active := False;
B.ClrNorm := T.TbDiscoverNorm;
B.ClrHot := T.TbDiscoverHot;
B.ClrActive := T.TbDiscoverHot;
B.ClrBorder := T.TbDiscoverBorder;
B.ClrText := T.TbDiscoverText;
B.ClrTextAct := T.TbDiscoverText;
B.Font.Name := 'Courier New';
B.Font.Size := 8;
B.Font.Color := T.TbDiscoverText;
B.Invalidate;
end;
procedure StyleConnectButton(B: TFlatButton);
begin
if B = nil then Exit;
B.Active := False;
B.ClrNorm := T.TbStartNorm;
B.ClrActive := T.BtnActive;
B.ClrHot := T.BtnHot;
B.ClrBorder := T.TbStartBorder;
B.ClrText := T.TbStartText;
B.ClrTextAct := T.TbStartText;
B.Font.Name := 'Courier New';
B.Font.Size := 8;
B.Font.Color := T.TbStartText;
B.Invalidate;
end;
procedure WalkLabels(C: TWinControl); procedure WalkLabels(C: TWinControl);
var i: Integer; Ctrl: TControl; var i: Integer; Ctrl: TControl;
begin begin
@@ -317,13 +357,13 @@ begin
LstFound.Color := T.BG; LstFound.Color := T.BG;
LstFound.Font.Color := T.Text; LstFound.Font.Color := T.Text;
end; end;
if BtnAdd <> nil then StyleBtn(BtnAdd, False); StyleButton(BtnAdd, False);
if BtnRemove <> nil then StyleBtn(BtnRemove, False); StyleButton(BtnRemove, False);
if BtnSetAuto <> nil then StyleBtn(BtnSetAuto, False); StyleButton(BtnSetAuto, False);
if BtnDiscover <> nil then StyleBtn(BtnDiscover, False); StyleDiscoverButton(BtnDiscover);
if BtnAddFound <> nil then StyleBtn(BtnAddFound, False); StyleButton(BtnAddFound, False);
if BtnCancel <> nil then StyleBtn(BtnCancel, False); StyleButton(BtnCancel, False);
if BtnConnect <> nil then StyleBtn(BtnConnect, True); StyleConnectButton(BtnConnect);
// Edit fields: white bg for light theme, dark bg for dark theme // Edit fields: white bg for light theme, dark bg for dark theme
if Integer(T.BG) > Integer(TColor($00808080)) then if Integer(T.BG) > Integer(TColor($00808080)) then
begin begin