samplerate button

This commit is contained in:
2026-03-09 00:07:51 +03:00
parent e5441be063
commit f216277736
2 changed files with 97 additions and 14 deletions
+96 -13
View File
@@ -355,6 +355,8 @@ type
procedure BuildUI; procedure BuildUI;
procedure ApplyDarkTheme; procedure ApplyDarkTheme;
procedure StyleButton(B: TFlatButton; Active: Boolean = False); procedure StyleButton(B: TFlatButton; Active: Boolean = False);
procedure StyleSpanButton(B: TFlatButton; Active: Boolean = False);
procedure PositionSpanOverlayButtons;
procedure UpdateVfoDisplay; procedure UpdateVfoDisplay;
function FormatFreq(Hz: Double): string; function FormatFreq(Hz: Double): string;
function ScaleX(X, Total, Width: Integer): Integer; function ScaleX(X, Total, Width: Integer): Integer;
@@ -687,12 +689,12 @@ begin
// SampleRate — глобальный, не per-band. Не восстанавливаем из диапазона. // SampleRate — глобальный, не per-band. Не восстанавливаем из диапазона.
// Обновляем только FSpanHz для отображения (берём текущий FSampleRate) // Обновляем только FSpanHz для отображения (берём текущий FSampleRate)
FSpanHz := FSampleRate; FSpanHz := FSampleRate;
StyleButton(BtnSpan48k, FSampleRate = 48000); StyleSpanButton(BtnSpan48k, FSampleRate = 48000);
StyleButton(BtnSpan96k, FSampleRate = 96000); StyleSpanButton(BtnSpan96k, FSampleRate = 96000);
StyleButton(BtnSpan192k, FSampleRate = 192000); StyleSpanButton(BtnSpan192k, FSampleRate = 192000);
StyleButton(BtnSpan384k, FSampleRate = 384000); StyleSpanButton(BtnSpan384k, FSampleRate = 384000);
StyleButton(BtnSpan768k, FSampleRate = 768000); StyleSpanButton(BtnSpan768k, FSampleRate = 768000);
StyleButton(BtnSpan1536k, FSampleRate = 1536000); StyleSpanButton(BtnSpan1536k, FSampleRate = 1536000);
// --- VFO A: центрируем на новой частоте, сбрасываем shift --- // --- VFO A: центрируем на новой частоте, сбрасываем shift ---
FCenterFreq := B.VfoA; // DDC = центр диапазона FCenterFreq := B.VfoA; // DDC = центр диапазона
@@ -1255,7 +1257,12 @@ begin
BtnSpan384k.Tag := 384000; BtnSpan384k.Tag := 384000;
BtnSpan768k.Tag := 768000; BtnSpan768k.Tag := 768000;
BtnSpan1536k.Tag := 1536000; BtnSpan1536k.Tag := 1536000;
StyleButton(BtnSpan192k, True); StyleSpanButton(BtnSpan48k, False);
StyleSpanButton(BtnSpan96k, False);
StyleSpanButton(BtnSpan192k, True);
StyleSpanButton(BtnSpan384k, False);
StyleSpanButton(BtnSpan768k, False);
StyleSpanButton(BtnSpan1536k, False);
// Waterfall AGC + Noise Floor кнопки справа в той же панели // Waterfall AGC + Noise Floor кнопки справа в той же панели
BtnWfAGC := MakeBtn(PanelSpanButtons, 'WF AGC', 379, 3, 62, BTN_SM, BtnWfAGCClick); BtnWfAGC := MakeBtn(PanelSpanButtons, 'WF AGC', 379, 3, 62, BTN_SM, BtnWfAGCClick);
@@ -1294,6 +1301,16 @@ begin
PbWaterfall.OnMouseMove := PbWaterfallMouseMove; PbWaterfall.OnMouseMove := PbWaterfallMouseMove;
PbWaterfall.OnMouseUp := PbWaterfallMouseUp; PbWaterfall.OnMouseUp := PbWaterfallMouseUp;
// SPAN кнопки как оверлей на спектре (в стиле web)
BtnSpan48k.Parent := PanelRight;
BtnSpan96k.Parent := PanelRight;
BtnSpan192k.Parent := PanelRight;
BtnSpan384k.Parent := PanelRight;
BtnSpan768k.Parent := PanelRight;
BtnSpan1536k.Parent := PanelRight;
LblSpan.Visible := False;
PositionSpanOverlayButtons;
// Initial layout // Initial layout
ResizeSpectrumPanels; ResizeSpectrumPanels;
end; end;
@@ -1364,6 +1381,7 @@ begin
PbSpectrum.SetBounds(0, TopOff, RW, SH); PbSpectrum.SetBounds(0, TopOff, RW, SH);
PbRuler.SetBounds (0, TopOff + SH, RW, 18); PbRuler.SetBounds (0, TopOff + SH, RW, 18);
PbWaterfall.SetBounds(0, TopOff + SH + 18, RW, WH); PbWaterfall.SetBounds(0, TopOff + SH + 18, RW, WH);
PositionSpanOverlayButtons;
// Обновляем переменные размеров // Обновляем переменные размеров
FSpectrumWidth := RW; FSpectrumWidth := RW;
@@ -1448,6 +1466,71 @@ begin
B.Font.Size := 8; B.Font.Size := 8;
end; end;
procedure TMainForm.StyleSpanButton(B: TFlatButton; Active: Boolean);
begin
B.Active := Active;
B.ClrNorm := TColor($0013191B);
B.ClrActive := TColor($001E3C1E);
B.ClrHot := TColor($001E2D1E);
B.ClrBorder := TColor($005A7A5A);
B.ClrText := TColor($0090B890);
B.ClrTextAct := TColor($00AAFFAA);
B.Font.Name := 'Courier New';
B.Font.Size := 7;
end;
procedure TMainForm.PositionSpanOverlayButtons;
const
BTN_TOP = 6;
GAP = 3;
W48 = 40;
W96 = 40;
W192 = 44;
W384 = 44;
W768 = 44;
W1536 = 50;
HBTN = 18;
var
X, NeedW, BaseX, BaseY: Integer;
begin
if (PbSpectrum = nil) or (BtnSpan48k = nil) then Exit;
NeedW := W48 + W96 + W192 + W384 + W768 + W1536 + GAP * 5 + 8;
if PbSpectrum.Width < NeedW then
begin
BtnSpan48k.Visible := False;
BtnSpan96k.Visible := False;
BtnSpan192k.Visible := False;
BtnSpan384k.Visible := False;
BtnSpan768k.Visible := False;
BtnSpan1536k.Visible := False;
Exit;
end;
BaseX := PbSpectrum.Left;
BaseY := PbSpectrum.Top;
X := BaseX + 56;
BtnSpan48k.SetBounds(X, BaseY + BTN_TOP, W48, HBTN); Inc(X, W48 + GAP);
BtnSpan96k.SetBounds(X, BaseY + BTN_TOP, W96, HBTN); Inc(X, W96 + GAP);
BtnSpan192k.SetBounds(X, BaseY + BTN_TOP, W192, HBTN); Inc(X, W192 + GAP);
BtnSpan384k.SetBounds(X, BaseY + BTN_TOP, W384, HBTN); Inc(X, W384 + GAP);
BtnSpan768k.SetBounds(X, BaseY + BTN_TOP, W768, HBTN); Inc(X, W768 + GAP);
BtnSpan1536k.SetBounds(X, BaseY + BTN_TOP, W1536, HBTN);
BtnSpan48k.Visible := True;
BtnSpan96k.Visible := True;
BtnSpan192k.Visible := True;
BtnSpan384k.Visible := True;
BtnSpan768k.Visible := True;
BtnSpan1536k.Visible := True;
BtnSpan48k.BringToFront;
BtnSpan96k.BringToFront;
BtnSpan192k.BringToFront;
BtnSpan384k.BringToFront;
BtnSpan768k.BringToFront;
BtnSpan1536k.BringToFront;
end;
// =========================================================================== // ===========================================================================
// VFO // VFO
// =========================================================================== // ===========================================================================
@@ -3651,12 +3734,12 @@ begin
DDCRate := NewRate div 1000; DDCRate := NewRate div 1000;
// Обновляем кнопки сразу — UI отзывчив // Обновляем кнопки сразу — UI отзывчив
StyleButton(BtnSpan48k, FSampleRate = 48000); StyleSpanButton(BtnSpan48k, FSampleRate = 48000);
StyleButton(BtnSpan96k, FSampleRate = 96000); StyleSpanButton(BtnSpan96k, FSampleRate = 96000);
StyleButton(BtnSpan192k, FSampleRate = 192000); StyleSpanButton(BtnSpan192k, FSampleRate = 192000);
StyleButton(BtnSpan384k, FSampleRate = 384000); StyleSpanButton(BtnSpan384k, FSampleRate = 384000);
StyleButton(BtnSpan768k, FSampleRate = 768000); StyleSpanButton(BtnSpan768k, FSampleRate = 768000);
StyleButton(BtnSpan1536k, FSampleRate = 1536000); StyleSpanButton(BtnSpan1536k, FSampleRate = 1536000);
Application.ProcessMessages; Application.ProcessMessages;
FBandCache[FCurrentBand].SpanHz := FSpanHz; // для обратной совместимости FBandCache[FCurrentBand].SpanHz := FSpanHz; // для обратной совместимости
+1 -1
View File
@@ -307,7 +307,7 @@
"span_hz" : 1.9200000000000000E+005 "span_hz" : 1.9200000000000000E+005
}, },
"3" : { "3" : {
"vfo_a" : 7.1100000000000000E+006, "vfo_a" : 7.1250000000000000E+006,
"vfo_b" : 7.1000000000000000E+006, "vfo_b" : 7.1000000000000000E+006,
"mode" : 0, "mode" : 0,
"filter_idx" : 5, "filter_idx" : 5,