vfo center

This commit is contained in:
2026-04-30 10:37:11 +03:00
parent ece5a70041
commit fdc48266eb
+20 -13
View File
@@ -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);