mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
fix s-meter
This commit is contained in:
+27
-17
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user