diff --git a/DeviceForm.pas b/DeviceForm.pas index 317eaee..5d906a3 100644 --- a/DeviceForm.pas +++ b/DeviceForm.pas @@ -136,7 +136,15 @@ const CLR_BORDER = TColor($00303030); CLR_ACCENT = TColor($0040FF80); 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 } @@ -144,8 +152,8 @@ constructor TDeviceDialog.Create(AOwner: TComponent); begin inherited CreateNew(AOwner); Caption := 'Device Selection'; - Width := 660; - Height := 420; + Width := DLG_W; + Height := DLG_H; Position := poScreenCenter; BorderStyle := bsDialog; Color := CLR_BG; @@ -158,6 +166,7 @@ begin FResult.Accepted := False; BuildUI; + SetTheme(DarkTheme); LoadSaved; RefreshSavedList; end; @@ -165,21 +174,7 @@ end; function TDeviceDialog.MakeBtn(AParent: TWinControl; const Cap: string; X, Y, W, H: Integer; AClick: TNotifyEvent): TFlatButton; begin - Result := TFlatButton.Create(Self); - 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); + Result := MakeFlatBtn(AParent, Cap, X, Y, W, H, AClick); end; function TDeviceDialog.MakeLbl(AParent: TWinControl; const Cap: string; @@ -195,22 +190,24 @@ begin end; procedure TDeviceDialog.BuildUI; +const + LabelH = 18; var LblHint: TLabel; - Ed: TEdit; + FieldTop, ButtonsTop, BottomTop: Integer; begin // --- Левая панель: сохранённые устройства --- PanelLeft := TPanel.Create(Self); PanelLeft.Parent := Self; - PanelLeft.SetBounds(8, 8, 300, 360); + PanelLeft.SetBounds(GAP, GAP, LEFT_W, PANEL_H); PanelLeft.BevelOuter := bvNone; PanelLeft.Color := CLR_PANEL; - MakeLbl(PanelLeft, 'SAVED DEVICES', 6, 6); + MakeLbl(PanelLeft, 'SAVED DEVICES', PAD, PAD); LstSaved := TListBox.Create(Self); LstSaved.Parent := PanelLeft; - LstSaved.SetBounds(4, 22, 292, 140); + LstSaved.SetBounds(PAD, PAD + LabelH, LEFT_W - PAD * 2, 174); LstSaved.Color := CLR_BG; LstSaved.Font.Color:= CLR_TEXT; LstSaved.Font.Name := 'Courier New'; @@ -218,79 +215,122 @@ begin LstSaved.OnClick := @LstSavedClick; LstSaved.OnDblClick := @LstSavedDblClick; - MakeLbl(PanelLeft, 'Name:', 6, 170); + FieldTop := 212; + MakeLbl(PanelLeft, 'Name:', PAD, FieldTop + 5); EdName := TEdit.Create(Self); 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.Font.Color:= CLR_TEXT; EdName.Font.Name := 'Courier New'; 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.Parent := PanelLeft; - EdIP.SetBounds(50, 195, 140, BTN_H); + EdIP.SetBounds(76, FieldTop, LEFT_W - 76 - PAD, EDIT_H); EdIP.Color := CLR_BG; EdIP.Font.Color:= CLR_TEXT; EdIP.Font.Name := 'Courier New'; EdIP.Font.Size := 8; EdIP.TextHint := '192.168.1.x'; - BtnAdd := MakeBtn(PanelLeft, 'ADD', 6, 225, 70, BTN_H, @BtnAddClick); - BtnRemove := MakeBtn(PanelLeft, 'REMOVE', 80, 225, 70, BTN_H, @BtnRemoveClick); + ButtonsTop := FieldTop + EDIT_H + 12; + 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); - LblHint := MakeLbl(PanelLeft, '* = autostart', 150, 260); + Inc(ButtonsTop, BTN_H + 8); + BtnSetAuto := MakeBtn(PanelLeft, 'SET AUTOSTART', PAD, ButtonsTop, 154, BTN_H, @BtnSetAutoClick); + LblHint := MakeLbl(PanelLeft, '* = autostart', PAD + 168, ButtonsTop + 6); 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.ClrTextAct := CLR_ACCENT; // --- Правая панель: discovery --- PanelRight := TPanel.Create(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.Color := CLR_PANEL; - MakeLbl(PanelRight, 'DISCOVERED DEVICES', 6, 6); + MakeLbl(PanelRight, 'DISCOVERED DEVICES', PAD, PAD); LstFound := TListBox.Create(Self); LstFound.Parent := PanelRight; - LstFound.SetBounds(4, 22, 322, 190); + LstFound.SetBounds(PAD, PAD + LabelH, RIGHT_W - PAD * 2, 250); LstFound.Color := CLR_BG; LstFound.Font.Color:= CLR_TEXT; LstFound.Font.Name := 'Courier New'; LstFound.Font.Size := 8; LstFound.OnDblClick := @LstFoundDblClick; - BtnDiscover := MakeBtn(PanelRight, 'DISCOVER', 6, 220, 100, BTN_H, @BtnDiscoverClick); - BtnAddFound := MakeBtn(PanelRight, 'SAVE DEVICE', 6, 250, 100, BTN_H, @BtnAddFoundClick); + ButtonsTop := PAD + LabelH + 250 + 14; + 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; procedure TDeviceDialog.ApplyTheme; begin + SetTheme(DarkTheme); end; procedure TDeviceDialog.SetTheme(const T: TAppTheme); - procedure StyleBtn(B: TFlatButton; Accent: Boolean); + procedure StyleButton(B: TFlatButton; Active: Boolean); begin - B.ClrNorm := T.Panel; - B.ClrBorder := T.Border; - B.ClrHot := T.BG; - B.ClrActive := T.Panel; - B.ClrText := T.Text; - if Accent then B.ClrTextAct := T.FreqActive - else B.ClrTextAct := T.Text; + if B = nil then Exit; + B.Active := Active; + B.ClrNorm := T.BtnNorm; + B.ClrActive := T.BtnActive; + B.ClrHot := T.BtnHot; + if Active then B.ClrBorder := T.BtnBorderActive + 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.Invalidate; 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); var i: Integer; Ctrl: TControl; begin @@ -317,13 +357,13 @@ begin LstFound.Color := T.BG; LstFound.Font.Color := T.Text; end; - if BtnAdd <> nil then StyleBtn(BtnAdd, False); - if BtnRemove <> nil then StyleBtn(BtnRemove, False); - if BtnSetAuto <> nil then StyleBtn(BtnSetAuto, False); - if BtnDiscover <> nil then StyleBtn(BtnDiscover, False); - if BtnAddFound <> nil then StyleBtn(BtnAddFound, False); - if BtnCancel <> nil then StyleBtn(BtnCancel, False); - if BtnConnect <> nil then StyleBtn(BtnConnect, True); + StyleButton(BtnAdd, False); + StyleButton(BtnRemove, False); + StyleButton(BtnSetAuto, False); + StyleDiscoverButton(BtnDiscover); + StyleButton(BtnAddFound, False); + StyleButton(BtnCancel, False); + StyleConnectButton(BtnConnect); // Edit fields: white bg for light theme, dark bg for dark theme if Integer(T.BG) > Integer(TColor($00808080)) then begin