diff --git a/WDSPEngine.pas b/WDSPEngine.pas index 3b2dd82..7400e63 100644 --- a/WDSPEngine.pas +++ b/WDSPEngine.pas @@ -1439,9 +1439,18 @@ end; procedure TWDSPEngine.SetZoomPan(AZoom, APan: Double); // Задаёт зум/пан и переармирует RX-анализатор (SetAnalyzer внутри WDSP // защищён собственной критической секцией, дисплей-поток не мешает). +var + NZ, NP: Double; begin - FZoomFactor := EnsureRange(AZoom, 0.0, 1.0); - FPanSlider := EnsureRange(APan, 0.0, 1.0); + NZ := EnsureRange(AZoom, 0.0, 1.0); + NP := EnsureRange(APan, 0.0, 1.0); + // Без изменений — выходим БЕЗ переарма: SetAnalyzer сбрасывает FFT-историю, + // и спектр/водопад замирают на время наполнения окна (~0.7с @ 192к/131072). + // RestoreBand зовёт SetZoomPan безусловно — это било по КАЖДОЙ смене + // диапазона, даже когда зум обоих бандов одинаковый (обычно 0). + if (Abs(NZ - FZoomFactor) < 1E-9) and (Abs(NP - FPanSlider) < 1E-9) then Exit; + FZoomFactor := NZ; + FPanSlider := NP; if FAnalyzerOpen then ApplyRXAnalyzerSettings; end;