From fdc48266eb8e983f2b7a24a4ff6878ec8bc7aba0 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Thu, 30 Apr 2026 10:37:11 +0300 Subject: [PATCH] vfo center --- MainForm.pas | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 57eeaa6..cf9b33f 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -1844,7 +1844,7 @@ const // VFO-B получает левый отступ = правому паддингу VFO-A для симметрии зазоров VFO_B_LEFT_PAD = VFO_FREQ_LEFT_PAD + VFO_FREQ_RIGHT_PAD; // = 10 var - BlockH, FreqTop, SafeLeft, SafeRight, GroupLeft, GroupTop: Integer; + BlockH, FreqTop, CenterY, SafeLeft, SafeRight, GroupLeft, GroupTop: Integer; RightW, SMW, SMLeft, AvailW, MinGroupW, ExtraPerSide, DynGap: Integer; TopVfoAW, TopVfoBW, NeedFreqAW, NeedFreqBW, FreqTextW, GroupW: Integer; XferX, XferY: Integer; @@ -1900,23 +1900,29 @@ begin GroupLeft := SafeLeft + (AvailW - GroupW) div 2; GroupTop := TOP_OFFSET; + // Ось выравнивания: центр S-метра на форме (SMTop=3, SMBot=63) → y=33 + // Относительно PanelTopVfoGroup (GroupTop=2): CenterY = 33 - 2 = 31 + CenterY := (PanelToolbar.Height + 30) div 2 - GroupTop; + PanelTopVfoGroup.SetBounds(GroupLeft, GroupTop, GroupW, BlockH); PanelTopVfoGroup.Visible := True; // VFO-A: левый край группы PanelTopVfoA.SetBounds(0, 0, TopVfoAW, BlockH); PanelTopVfoA.Visible := True; - PanelVfoA.SetBounds(0, 0, TopVfoAW, TOP_VFO_FREQ_H); - FreqTop := ((BtnTopVfoASelect.Top + BtnTopVfoASelect.Height + - BtnTopVfoATX.Top) div 2) - (TOP_VFO_FREQ_H div 2); + PanelVfoA.SetBounds(0, 0, TopVfoAW, BlockH); + // A выше оси, TX ниже; 1px зазор с каждой стороны + BtnTopVfoASelect.SetBounds(0, CenterY - BtnTopVfoASelect.Height - 1, + BtnTopVfoASelect.Width, BtnTopVfoASelect.Height); + BtnTopVfoATX.SetBounds(0, CenterY + 1, + BtnTopVfoATX.Width, BtnTopVfoATX.Height); + FreqTop := CenterY - (TOP_VFO_FREQ_H div 2); FreqDispA.SetBounds(FreqDispA.Left, FreqTop, FreqTextW + VFO_FREQ_LEFT_PAD + VFO_FREQ_RIGHT_PAD, TOP_VFO_FREQ_H); - BtnTopVfoASelect.Left := 0; - BtnTopVfoATX.Left := 0; - // Кнопки трансфера: горизонтальный ряд, вертикально по центру + // Кнопки трансфера: горизонтальный ряд, вертикально по оси XferX := TopVfoAW + DynGap; - XferY := (BlockH - XFER_BTN_H) div 2; + XferY := CenterY - (XFER_BTN_H div 2); PanelVfoButtons.SetBounds(XferX, XferY, XFER_PANEL_W, XFER_BTN_H); BtnVfoACopyB.SetBounds(0, 0, XFER_BTN_W, XFER_BTN_H); BtnVfoSwap.SetBounds(XFER_BTN_W + XFER_BTN_GAP, 0, XFER_BTN_W, XFER_BTN_H); @@ -1925,13 +1931,14 @@ begin // VFO-B: правый край группы PanelTopVfoB.SetBounds(TopVfoAW + DynGap + XFER_PANEL_W + DynGap, 0, TopVfoBW, BlockH); PanelTopVfoB.Visible := True; - PanelVfoB.SetBounds(0, 0, TopVfoBW, TOP_VFO_FREQ_H); - FreqTop := ((BtnTopVfoBSelect.Top + BtnTopVfoBSelect.Height + - BtnTopVfoBTX.Top) div 2) - (TOP_VFO_FREQ_H div 2); + PanelVfoB.SetBounds(0, 0, TopVfoBW, BlockH); + BtnTopVfoBSelect.SetBounds(VFO_B_LEFT_PAD, CenterY - BtnTopVfoBSelect.Height - 1, + BtnTopVfoBSelect.Width, BtnTopVfoBSelect.Height); + BtnTopVfoBTX.SetBounds(VFO_B_LEFT_PAD, CenterY + 1, + BtnTopVfoBTX.Width, BtnTopVfoBTX.Height); + FreqTop := CenterY - (TOP_VFO_FREQ_H div 2); FreqDispB.SetBounds(FreqDispB.Left, FreqTop, FreqTextW + VFO_FREQ_LEFT_PAD + VFO_FREQ_RIGHT_PAD, TOP_VFO_FREQ_H); - BtnTopVfoBSelect.Left := VFO_B_LEFT_PAD; - BtnTopVfoBTX.Left := VFO_B_LEFT_PAD; if PanelSep <> nil then PanelSep.SetBounds(0, PanelToolbar.Height + 30, ClientWidth, 2);