Align left panel button margins

This commit is contained in:
2026-05-25 19:41:19 +03:00
parent f87869cd91
commit 16c5f6d428
+123 -49
View File
@@ -126,6 +126,8 @@ const
SMETER_MARGIN = 3; SMETER_MARGIN = 3;
TOP_SMETER_GAP = 8; TOP_SMETER_GAP = 8;
TOP_VFO_FONT = 25; TOP_VFO_FONT = 25;
LEFT_PANEL_BTN_PAD = 3;
LEFT_PANEL_BTN_GAP = 2;
type type
TDeviceItem = record TDeviceItem = record
@@ -434,6 +436,8 @@ type
// ---- Helpers ---- // ---- Helpers ----
procedure BuildUI; procedure BuildUI;
function LeftPanelButtonLeft(PanelWidth, ColCount, ColIndex: Integer): Integer;
function LeftPanelButtonWidth(PanelWidth, ColCount, ColIndex: Integer): Integer;
procedure ApplyDarkTheme; procedure ApplyDarkTheme;
procedure SetLightTheme(V: Boolean); procedure SetLightTheme(V: Boolean);
procedure StyleButton(B: TFlatButton; Active: Boolean = False); procedure StyleButton(B: TFlatButton; Active: Boolean = False);
@@ -762,6 +766,31 @@ uses SettingsForm;
{$R *.lfm} {$R *.lfm}
function TMainForm.LeftPanelButtonWidth(PanelWidth, ColCount,
ColIndex: Integer): Integer;
var
InnerW, BaseW, Extra: Integer;
begin
if ColCount <= 0 then Exit(0);
InnerW := PanelWidth - 2 * LEFT_PANEL_BTN_PAD -
(ColCount - 1) * LEFT_PANEL_BTN_GAP;
BaseW := InnerW div ColCount;
Extra := InnerW mod ColCount;
Result := BaseW;
if ColIndex < Extra then Inc(Result);
end;
function TMainForm.LeftPanelButtonLeft(PanelWidth, ColCount,
ColIndex: Integer): Integer;
var
i: Integer;
begin
Result := LEFT_PANEL_BTN_PAD;
for i := 0 to ColIndex - 1 do
Inc(Result, LeftPanelButtonWidth(PanelWidth, ColCount, i) +
LEFT_PANEL_BTN_GAP);
end;
constructor TWisdomBuildThread.Create(const ADirectory: string); constructor TWisdomBuildThread.Create(const ADirectory: string);
begin begin
inherited Create(False); inherited Create(False);
@@ -1807,9 +1836,12 @@ begin
PanelTX.BevelOuter := bvNone; PanelTX.BevelOuter := bvNone;
MakeLbl(PanelTX, 'TX', 4, 2); MakeLbl(PanelTX, 'TX', 4, 2);
W := (LEFT_W - 6) div 4; BtnMOX := MakeBtn(PanelTX, 'MOX',
BtnMOX := MakeBtn(PanelTX, 'MOX', 2, 16, W - 2, BTN_SM, BtnMOXClick); LeftPanelButtonLeft(LEFT_W, 4, 0), 16,
BtnTUN := MakeBtn(PanelTX, 'TUN', W + 2, 16, W - 2, BTN_SM, BtnTUNClick); LeftPanelButtonWidth(LEFT_W, 4, 0), BTN_SM, BtnMOXClick);
BtnTUN := MakeBtn(PanelTX, 'TUN',
LeftPanelButtonLeft(LEFT_W, 4, 1), 16,
LeftPanelButtonWidth(LEFT_W, 4, 1), BTN_SM, BtnTUNClick);
LblDrv := TLabel.Create(Self); LblDrv := TLabel.Create(Self);
LblDrv.Parent := PanelTX; LblDrv.Left := 4; LblDrv.Top := 53; LblDrv.Parent := PanelTX; LblDrv.Left := 4; LblDrv.Top := 53;
@@ -1832,13 +1864,13 @@ begin
PanelBands.SetBounds(0, Y, LEFT_W, 74); PanelBands.SetBounds(0, Y, LEFT_W, 74);
PanelBands.BevelOuter := bvNone; PanelBands.BevelOuter := bvNone;
MakeLbl(PanelBands, 'BAND', 4, 2); MakeLbl(PanelBands, 'BAND', 4, 2);
W := (LEFT_W - 6) div 6;
for i := 0 to BAND_COUNT - 1 do for i := 0 to BAND_COUNT - 1 do
begin begin
B := MakeBtn(PanelBands, BAND_NAMES[i], B := MakeBtn(PanelBands, BAND_NAMES[i],
2 + (i mod 6) * W, LeftPanelButtonLeft(LEFT_W, 6, i mod 6),
16 + (i div 6) * 27, 16 + (i div 6) * 27,
W - 2, BTN_SM, BtnBandClick); LeftPanelButtonWidth(LEFT_W, 6, i mod 6),
BTN_SM, BtnBandClick);
B.Tag := i; B.Tag := i;
BtnBand[i] := B; BtnBand[i] := B;
end; end;
@@ -1854,13 +1886,13 @@ begin
PanelMode.SetBounds(0, Y, LEFT_W, 74); PanelMode.SetBounds(0, Y, LEFT_W, 74);
PanelMode.BevelOuter := bvNone; PanelMode.BevelOuter := bvNone;
MakeLbl(PanelMode, 'MODE', 4, 2); MakeLbl(PanelMode, 'MODE', 4, 2);
W := (LEFT_W - 6) div 4;
for i := 0 to MODE_COUNT - 1 do for i := 0 to MODE_COUNT - 1 do
begin begin
B := MakeBtn(PanelMode, MODE_NAMES[i], B := MakeBtn(PanelMode, MODE_NAMES[i],
2 + (i mod 4) * W, LeftPanelButtonLeft(LEFT_W, 4, i mod 4),
16 + (i div 4) * 27, 16 + (i div 4) * 27,
W - 2, BTN_SM, BtnModeClick); LeftPanelButtonWidth(LEFT_W, 4, i mod 4),
BTN_SM, BtnModeClick);
B.Tag := i; B.Tag := i;
BtnMode[i] := B; BtnMode[i] := B;
StyleButton(B, i = FMode); StyleButton(B, i = FMode);
@@ -1874,13 +1906,13 @@ begin
PanelFilter.SetBounds(0, Y, LEFT_W, 74); PanelFilter.SetBounds(0, Y, LEFT_W, 74);
PanelFilter.BevelOuter := bvNone; PanelFilter.BevelOuter := bvNone;
MakeLbl(PanelFilter, 'FILTER', 4, 2); MakeLbl(PanelFilter, 'FILTER', 4, 2);
W := (LEFT_W - 6) div 5;
for i := 0 to FILT_COUNT - 1 do for i := 0 to FILT_COUNT - 1 do
begin begin
B := MakeBtn(PanelFilter, '---', B := MakeBtn(PanelFilter, '---',
2 + (i mod 5) * W, LeftPanelButtonLeft(LEFT_W, 5, i mod 5),
16 + (i div 5) * 27, 16 + (i div 5) * 27,
W - 2, BTN_SM, BtnFilterClick); LeftPanelButtonWidth(LEFT_W, 5, i mod 5),
BTN_SM, BtnFilterClick);
B.Tag := i; B.Tag := i;
BtnFilter[i] := B; BtnFilter[i] := B;
end; end;
@@ -1894,16 +1926,18 @@ begin
PanelFMSQ.BevelOuter := bvNone; PanelFMSQ.BevelOuter := bvNone;
PanelFMSQ.Visible := False; PanelFMSQ.Visible := False;
MakeLbl(PanelFMSQ, 'SQL', 4, 4); MakeLbl(PanelFMSQ, 'SQL', 4, 4);
W := LEFT_W div 4 - 2; // button width ~56px W := LeftPanelButtonWidth(LEFT_W, 4, 0);
BtnFMSQ := MakeBtn(PanelFMSQ, 'SQL', 2, 20, W, BTN_SM, BtnFMSQClick); BtnFMSQ := MakeBtn(PanelFMSQ, 'SQL',
LeftPanelButtonLeft(LEFT_W, 4, 0), 20,
W, BTN_SM, BtnFMSQClick);
StyleButton(BtnFMSQ, False); StyleButton(BtnFMSQ, False);
// Slider: vertically centred with button text (button top=20, h=24 → center=32) // Slider: vertically centred with button text (button top=20, h=24 → center=32)
// Reserve 28px on the right for the numeric label // Reserve 28px on the right for the numeric label
TrkFMSQ := TFlatSlider.Create(Self); TrkFMSQ := TFlatSlider.Create(Self);
TrkFMSQ.Parent := PanelFMSQ; TrkFMSQ.Parent := PanelFMSQ;
TrkFMSQ.Left := W + 6; TrkFMSQ.Left := BtnFMSQ.Left + BtnFMSQ.Width + 3;
TrkFMSQ.Top := 25; // 32 - 14/2 = 25 TrkFMSQ.Top := 25; // 32 - 14/2 = 25
TrkFMSQ.Width := LEFT_W - W - 6 - 30 - 4; // leave 30px for label + margins TrkFMSQ.Width := LEFT_W - TrkFMSQ.Left - 30 - 4; // leave 30px for label + margins
TrkFMSQ.Height := 14; TrkFMSQ.Height := 14;
TrkFMSQ.Min := 0; TrkFMSQ.Max := 100; TrkFMSQ.Min := 0; TrkFMSQ.Max := 100;
TrkFMSQ.Position := FFMSQLevel; TrkFMSQ.Position := FFMSQLevel;
@@ -1926,10 +1960,16 @@ begin
PanelFMCTCSS.BevelOuter := bvNone; PanelFMCTCSS.BevelOuter := bvNone;
PanelFMCTCSS.Visible := False; PanelFMCTCSS.Visible := False;
MakeLbl(PanelFMCTCSS, 'CTCSS', 4, 4); MakeLbl(PanelFMCTCSS, 'CTCSS', 4, 4);
W := LEFT_W div 3 - 2; BtnFMCTCSS := MakeBtn(PanelFMCTCSS, 'CTCSS',
BtnFMCTCSS := MakeBtn(PanelFMCTCSS, 'CTCSS', 2, 20, W, BTN_H, BtnFMCTCSSClick); LeftPanelButtonLeft(LEFT_W, 3, 0), 20,
LeftPanelButtonWidth(LEFT_W, 3, 0),
BTN_H, BtnFMCTCSSClick);
StyleButton(BtnFMCTCSS, False); StyleButton(BtnFMCTCSS, False);
BtnFMCTCSSTone := MakeBtn(PanelFMCTCSS, CTCSS_NAMES[0], W + 4, 20, LEFT_W - W - 8, BTN_H, BtnFMCTCSSToneClick); BtnFMCTCSSTone := MakeBtn(PanelFMCTCSS, CTCSS_NAMES[0],
LeftPanelButtonLeft(LEFT_W, 3, 1), 20,
LEFT_W - LEFT_PANEL_BTN_PAD -
LeftPanelButtonLeft(LEFT_W, 3, 1),
BTN_H, BtnFMCTCSSToneClick);
StyleButton(BtnFMCTCSSTone, False); StyleButton(BtnFMCTCSSTone, False);
FCTCSSDropDown := TFlatDropDown.Create(BtnFMCTCSSTone, PanelLeft, 4, BTN_SM); FCTCSSDropDown := TFlatDropDown.Create(BtnFMCTCSSTone, PanelLeft, 4, BTN_SM);
@@ -1944,11 +1984,16 @@ begin
PanelFMStep.BevelOuter := bvNone; PanelFMStep.BevelOuter := bvNone;
PanelFMStep.Visible := False; PanelFMStep.Visible := False;
MakeLbl(PanelFMStep, 'STEP', 4, 4); MakeLbl(PanelFMStep, 'STEP', 4, 4);
W := LEFT_W div 3 - 2; BtnFMStep := MakeBtn(PanelFMStep, 'STEP',
BtnFMStep := MakeBtn(PanelFMStep, 'STEP', 2, 20, W, BTN_H, BtnFMStepClick); LeftPanelButtonLeft(LEFT_W, 3, 0), 20,
LeftPanelButtonWidth(LEFT_W, 3, 0),
BTN_H, BtnFMStepClick);
StyleButton(BtnFMStep, FFMStepOn); StyleButton(BtnFMStep, FFMStepOn);
BtnFMStepSel := MakeBtn(PanelFMStep, FM_STEP_NAMES[FFMStepIdx], BtnFMStepSel := MakeBtn(PanelFMStep, FM_STEP_NAMES[FFMStepIdx],
W + 4, 20, LEFT_W - W - 8, BTN_H, BtnFMStepSelClick); LeftPanelButtonLeft(LEFT_W, 3, 1), 20,
LEFT_W - LEFT_PANEL_BTN_PAD -
LeftPanelButtonLeft(LEFT_W, 3, 1),
BTN_H, BtnFMStepSelClick);
StyleButton(BtnFMStepSel, False); StyleButton(BtnFMStepSel, False);
FStepDropDown := TFlatDropDown.Create(BtnFMStepSel, PanelLeft, FM_STEP_COUNT, BTN_SM); FStepDropDown := TFlatDropDown.Create(BtnFMStepSel, PanelLeft, FM_STEP_COUNT, BTN_SM);
@@ -1957,12 +2002,17 @@ begin
FStepDropDown.OnSelect := OnStepDropDownSelect; FStepDropDown.OnSelect := OnStepDropDownSelect;
// CTUN / DUP buttons (display-related) // CTUN / DUP buttons (display-related)
BtnCTun := MakeBtn(PanelLeft, 'CTUN', 2, Y, LEFT_W div 3 - 2, BTN_H, BtnCTunClick); BtnCTun := MakeBtn(PanelLeft, 'CTUN',
LeftPanelButtonLeft(LEFT_W, 3, 0), Y,
LeftPanelButtonWidth(LEFT_W, 3, 0),
BTN_H, BtnCTunClick);
BtnCTun.Tag := 0; BtnCTun.Tag := 0;
StyleButton(BtnCTun, FCTun); StyleButton(BtnCTun, FCTun);
BtnDUP := MakeBtn(PanelLeft, 'DUP', BtnDUP := MakeBtn(PanelLeft, 'DUP',
2 + (LEFT_W div 3) + 0, Y, LEFT_W div 3 - 2, BTN_H, BtnDUPClick); LeftPanelButtonLeft(LEFT_W, 3, 1), Y,
LeftPanelButtonWidth(LEFT_W, 3, 1),
BTN_H, BtnDUPClick);
BtnDUP.Tag := 0; BtnDUP.Tag := 0;
StyleButton(BtnDUP, FDisplayDuplex); StyleButton(BtnDUP, FDisplayDuplex);
@@ -1976,12 +2026,31 @@ begin
// AGC mode — 5 кнопок в ряд // AGC mode — 5 кнопок в ряд
MakeLbl(PanelRX, 'AGC', 4, 4); MakeLbl(PanelRX, 'AGC', 4, 4);
W := (LEFT_W - 10) div 5; BtnAGCMode[0] := MakeBtn(PanelRX, 'FAST',
BtnAGCMode[0] := MakeBtn(PanelRX,'FAST', 2, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[0].Tag:=0; LeftPanelButtonLeft(LEFT_W, 5, 0), 22,
BtnAGCMode[1] := MakeBtn(PanelRX,'MED', W+4, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[1].Tag:=1; LeftPanelButtonWidth(LEFT_W, 5, 0),
BtnAGCMode[2] := MakeBtn(PanelRX,'SLOW', 2*W+6, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[2].Tag:=2; BTN_SM, BtnAGCModeClick);
BtnAGCMode[3] := MakeBtn(PanelRX,'LONG', 3*W+8, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[3].Tag:=3; BtnAGCMode[0].Tag := 0;
BtnAGCMode[4] := MakeBtn(PanelRX,'OFF', 4*W+10, 22, W, BTN_SM, BtnAGCModeClick); BtnAGCMode[4].Tag:=4; BtnAGCMode[1] := MakeBtn(PanelRX, 'MED',
LeftPanelButtonLeft(LEFT_W, 5, 1), 22,
LeftPanelButtonWidth(LEFT_W, 5, 1),
BTN_SM, BtnAGCModeClick);
BtnAGCMode[1].Tag := 1;
BtnAGCMode[2] := MakeBtn(PanelRX, 'SLOW',
LeftPanelButtonLeft(LEFT_W, 5, 2), 22,
LeftPanelButtonWidth(LEFT_W, 5, 2),
BTN_SM, BtnAGCModeClick);
BtnAGCMode[2].Tag := 2;
BtnAGCMode[3] := MakeBtn(PanelRX, 'LONG',
LeftPanelButtonLeft(LEFT_W, 5, 3), 22,
LeftPanelButtonWidth(LEFT_W, 5, 3),
BTN_SM, BtnAGCModeClick);
BtnAGCMode[3].Tag := 3;
BtnAGCMode[4] := MakeBtn(PanelRX, 'OFF',
LeftPanelButtonLeft(LEFT_W, 5, 4), 22,
LeftPanelButtonWidth(LEFT_W, 5, 4),
BTN_SM, BtnAGCModeClick);
BtnAGCMode[4].Tag := 4;
for i := 0 to 4 do StyleButton(BtnAGCMode[i], i = FAGCMode); for i := 0 to 4 do StyleButton(BtnAGCMode[i], i = FAGCMode);
// AGC level slider // AGC level slider
@@ -2011,12 +2080,21 @@ begin
TrkVolume.OnChange := TrkVolumeChange; TrkVolume.OnChange := TrkVolumeChange;
// NR NB SNB ANF MUTE // NR NB SNB ANF MUTE
W := (LEFT_W - 10) div 5; BtnNR := MakeBtn(PanelRX, 'NR',
BtnNR := MakeBtn(PanelRX, 'NR', 2, 96, W, BTN_SM, BtnNRClick); LeftPanelButtonLeft(LEFT_W, 5, 0), 96,
BtnNB := MakeBtn(PanelRX, 'NB', W+4, 96, W, BTN_SM, BtnNBClick); LeftPanelButtonWidth(LEFT_W, 5, 0), BTN_SM, BtnNRClick);
BtnSNB := MakeBtn(PanelRX, 'SNB', 2*W+6, 96, W, BTN_SM, BtnSNBClick); BtnNB := MakeBtn(PanelRX, 'NB',
BtnANF := MakeBtn(PanelRX, 'ANF', 3*W+8, 96, W, BTN_SM, BtnANFClick); LeftPanelButtonLeft(LEFT_W, 5, 1), 96,
BtnMute:= MakeBtn(PanelRX, 'MUTE', 4*W+10, 96, W, BTN_SM, BtnMuteClick); LeftPanelButtonWidth(LEFT_W, 5, 1), BTN_SM, BtnNBClick);
BtnSNB := MakeBtn(PanelRX, 'SNB',
LeftPanelButtonLeft(LEFT_W, 5, 2), 96,
LeftPanelButtonWidth(LEFT_W, 5, 2), BTN_SM, BtnSNBClick);
BtnANF := MakeBtn(PanelRX, 'ANF',
LeftPanelButtonLeft(LEFT_W, 5, 3), 96,
LeftPanelButtonWidth(LEFT_W, 5, 3), BTN_SM, BtnANFClick);
BtnMute := MakeBtn(PanelRX, 'MUTE',
LeftPanelButtonLeft(LEFT_W, 5, 4), 96,
LeftPanelButtonWidth(LEFT_W, 5, 4), BTN_SM, BtnMuteClick);
Inc(Y, 126); Inc(Y, 126);
@@ -4329,7 +4407,6 @@ var
i: Integer; i: Integer;
Names: array[0..FILT_COUNT-1] of string; Names: array[0..FILT_COUNT-1] of string;
DefIdx: Integer; DefIdx: Integer;
W: Integer;
begin begin
if FMode = MODE_FM then if FMode = MODE_FM then
begin begin
@@ -4338,16 +4415,15 @@ begin
if FFilter > 1 then FFilter := FILT_FM_DEF; // sanitize, keep NFM/WFM as-is if FFilter > 1 then FFilter := FILT_FM_DEF; // sanitize, keep NFM/WFM as-is
FFilterBW := FILT_FM_BW[FFilter]; FFilterBW := FILT_FM_BW[FFilter];
FFMDeviation := FILT_FM_DEV[FFilter]; FFMDeviation := FILT_FM_DEV[FFilter];
W := (PanelFilter.Width - 6) div 2;
BtnFilter[0].Caption := FILT_FM_NAMES[0]; BtnFilter[0].Caption := FILT_FM_NAMES[0];
BtnFilter[0].Left := 2; BtnFilter[0].Left := LeftPanelButtonLeft(PanelFilter.Width, 2, 0);
BtnFilter[0].Width := W - 2; BtnFilter[0].Width := LeftPanelButtonWidth(PanelFilter.Width, 2, 0);
BtnFilter[0].Top := 16; BtnFilter[0].Top := 16;
BtnFilter[0].Visible := True; BtnFilter[0].Visible := True;
StyleButton(BtnFilter[0], FFilter = 0); StyleButton(BtnFilter[0], FFilter = 0);
BtnFilter[1].Caption := FILT_FM_NAMES[1]; BtnFilter[1].Caption := FILT_FM_NAMES[1];
BtnFilter[1].Left := W + 2; BtnFilter[1].Left := LeftPanelButtonLeft(PanelFilter.Width, 2, 1);
BtnFilter[1].Width := W - 2; BtnFilter[1].Width := LeftPanelButtonWidth(PanelFilter.Width, 2, 1);
BtnFilter[1].Top := 16; BtnFilter[1].Top := 16;
BtnFilter[1].Visible := True; BtnFilter[1].Visible := True;
StyleButton(BtnFilter[1], FFilter = 1); StyleButton(BtnFilter[1], FFilter = 1);
@@ -4377,12 +4453,11 @@ begin
if PanelFMSQ <> nil then PanelFMSQ.Visible := False; if PanelFMSQ <> nil then PanelFMSQ.Visible := False;
if PanelFMCTCSS <> nil then PanelFMCTCSS.Visible := False; if PanelFMCTCSS <> nil then PanelFMCTCSS.Visible := False;
if PanelFMStep <> nil then begin CloseFMStepPopup; PanelFMStep.Visible := False; end; if PanelFMStep <> nil then begin CloseFMStepPopup; PanelFMStep.Visible := False; end;
W := (PanelFilter.Width - 6) div 5;
for i := 0 to FILT_COUNT - 1 do for i := 0 to FILT_COUNT - 1 do
begin begin
BtnFilter[i].Left := 2 + (i mod 5) * W; BtnFilter[i].Left := LeftPanelButtonLeft(PanelFilter.Width, 5, i mod 5);
BtnFilter[i].Top := 16 + (i div 5) * 27; BtnFilter[i].Top := 16 + (i div 5) * 27;
BtnFilter[i].Width := W - 2; BtnFilter[i].Width := LeftPanelButtonWidth(PanelFilter.Width, 5, i mod 5);
BtnFilter[i].Visible := True; BtnFilter[i].Visible := True;
end; end;
@@ -6420,7 +6495,7 @@ end;
procedure TMainForm.RebuildXvtrButtons; procedure TMainForm.RebuildXvtrButtons;
var var
i, Pos, XvtrRows: Integer; i, Pos, XvtrRows: Integer;
W, BtnH, RowH, MaxBottom: Integer; BtnH, RowH, MaxBottom: Integer;
B: TFlatButton; B: TFlatButton;
Cap: string; Cap: string;
begin begin
@@ -6447,7 +6522,6 @@ begin
if BtnH = 0 then BtnH := MulDiv(24, Screen.PixelsPerInch, 96); if BtnH = 0 then BtnH := MulDiv(24, Screen.PixelsPerInch, 96);
RowH := BtnH + 3; // шаг ряда: высота кнопки + 3px зазор (как 27=24+3 при 1x) RowH := BtnH + 3; // шаг ряда: высота кнопки + 3px зазор (как 27=24+3 при 1x)
W := (PanelBands.Width - 6) div 6;
Pos := 0; // позиция среди enabled слотов Pos := 0; // позиция среди enabled слотов
for i := 0 to CFG_XVTR_COUNT - 1 do for i := 0 to CFG_XVTR_COUNT - 1 do
if FXvtrSettings.Entries[i].Enabled then if FXvtrSettings.Entries[i].Enabled then
@@ -6458,9 +6532,9 @@ begin
B := TFlatButton.Create(Self); B := TFlatButton.Create(Self);
B.Parent := PanelBands; B.Parent := PanelBands;
B.Caption := Cap; B.Caption := Cap;
B.Left := 2 + (Pos mod 6) * W; B.Left := LeftPanelButtonLeft(PanelBands.Width, 6, Pos mod 6);
B.Top := MaxBottom + 4 + (Pos div 6) * RowH; B.Top := MaxBottom + 4 + (Pos div 6) * RowH;
B.Width := W - 2; B.Width := LeftPanelButtonWidth(PanelBands.Width, 6, Pos mod 6);
B.Height := BtnH; B.Height := BtnH;
B.OnClick := BtnXvtrBandClick; B.OnClick := BtnXvtrBandClick;
B.Tag := -(i + 1); // отрицательное значение = XVTR индекс B.Tag := -(i + 1); // отрицательное значение = XVTR индекс