fix s-meter

This commit is contained in:
2026-03-08 23:51:56 +03:00
parent d347a26d6d
commit e5441be063
3 changed files with 39 additions and 27 deletions
+27 -17
View File
@@ -1980,17 +1980,17 @@ procedure TMainForm.DrawSMeterWide(ACanvas: TCanvas; R: TRect;
out ZX1, ZX2, ZY1, ZY2: Integer);
const
DB_MIN = -127.0; // левый край шкалы
DB_MAX = -0.0; // правый край
DB_MAX = -13.0; // правый край шкалы (S9+60)
DB_S9 = -73.0; // граница S9 (зелёная/оранжевая)
DB_OVR = -43.0; // граница "красной" зоны (+30 over S9)
// dBm верхняя шкала: 7 меток
DBM_MARKS: array[0..6] of Double = (-120,-100,-80,-60,-40,-20,0);
DBM_LABELS: array[0..6] of string = ('-120','-100','-80','-60','-40','-20','0');
// dBm верхняя шкала
DBM_MARKS: array[0..5] of Double = (-120,-100,-80,-60,-40,-20);
DBM_LABELS: array[0..5] of string = ('-120','-100','-80','-60','-40','-20');
// S-шкала нижняя: 9 меток
S_MARKS_DBM: array[0..8] of Double = (-121,-115,-109,-103,-93,-83,-73,-53,-33);
S_MARKS_LBL: array[0..8] of string = ('S1','S3','S5','S7','S9','+10','+20','+40','+60');
// S-шкала нижняя: как в VfoOverlay
S_MARKS_DBM: array[0..7] of Double = (-121,-109,-97,-85,-73,-53,-33,-13);
S_MARKS_LBL: array[0..7] of string = ('S1','S3','S5','S7','S9','+20','+40','+60');
// Цвета (BGR в TColor)
CLR_SMETER_BG = TColor($00181818); // фон = CLR_PANEL
@@ -2029,6 +2029,7 @@ var
i, X, TW: Integer;
Lbl: string;
SNum: Integer;
Over: Integer;
function DBtoX(dB: Double): Integer; inline;
begin
@@ -2142,7 +2143,7 @@ begin
ACanvas.Font.Style := [];
ACanvas.Brush.Style:= bsClear;
for i := 0 to 6 do
for i := 0 to High(DBM_MARKS) do
begin
X := DBtoX(DBM_MARKS[i]);
// Длинный тик вверх от полосы
@@ -2156,7 +2157,7 @@ begin
// Мелкие тики каждые 10 dB между основными (каждые 5)
i := -125;
while i < 0 do
while i < -13 do
begin
X := DBtoX(i);
VLine(X, Y_BAR_TOP - TICK_MED, Y_BAR_TOP - 1, CLR_TICK_GREEN);
@@ -2166,7 +2167,7 @@ begin
// ================================================================
// НИЖНЯЯ ШКАЛА — S1..S9..+60
// ================================================================
for i := 0 to 8 do
for i := 0 to High(S_MARKS_DBM) do
begin
X := DBtoX(S_MARKS_DBM[i]);
// Тик вниз от полосы
@@ -2204,17 +2205,26 @@ begin
ACanvas.Font.Size := 8;
ACanvas.Font.Style := [fsBold];
ACanvas.Font.Color := CLR_LABEL_S;
if Value < -93.0 then
if Value >= -73.0 then
begin
SNum := Round((Value - (-127.0)) / 6.0);
if SNum < 1 then SNum := 1;
if SNum > 9 then SNum := 9;
Lbl := Format('S%d', [SNum]);
Over := Round(Value - (-73.0));
if Over < 5 then
Lbl := 'S9'
else
begin
Over := ((Over + 5) div 10) * 10;
if Over = 0 then Over := 10;
Lbl := Format('S9+%d', [Over]);
end;
end
else if Value <= -121.0 then
Lbl := 'S1'
else
begin
SNum := Round(Value - (-93.0));
Lbl := Format('S9+%d', [SNum]);
Lbl := 'S1';
for SNum := 1 to 8 do
if Value >= (-121.0 + (SNum - 1) * 6.0) then
Lbl := 'S' + IntToStr(SNum);
end;
ACanvas.TextOut(R.Left + 1, Y_BAR_BOT + TICK_LONG + 1, Lbl);
end;