mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
fix button nr nb anf
This commit is contained in:
+25
-12
@@ -3,6 +3,16 @@ unit MainForm;
|
||||
{
|
||||
OpenHPSDR Transceiver - Main Form
|
||||
Lazarus / FPC 3.2+ (нет inline var, нет анонимных процедур)
|
||||
|
||||
ИСПРАВЛЕНИЯ:
|
||||
- (Web NR/NB/ANF fix) BtnNRClick, BtnNBClick, BtnANFClick переписаны
|
||||
без использования «Sender as TFlatButton» — теперь обращаются напрямую
|
||||
к BtnNR / BtnNB / BtnANF. Это устраняет EAccessViolation / EInvalidCast
|
||||
при вызове из SyncWebNR/SyncWebNB/SyncWebANF через TThread.Synchronize,
|
||||
где Sender передавался как nil. Исключение в UI-потоке приводило к
|
||||
разрыву WebSocket-соединения и «отключению» веб-клиента.
|
||||
- SyncWebNR / SyncWebNB / SyncWebANF: передают реальную кнопку (BtnNR /
|
||||
BtnNB / BtnANF) вместо nil — защита на случай изменения обработчиков.
|
||||
}
|
||||
|
||||
{$IFDEF FPC}
|
||||
@@ -3389,23 +3399,26 @@ end;
|
||||
|
||||
procedure TMainForm.BtnNRClick(Sender: TObject);
|
||||
begin
|
||||
(Sender as TFlatButton).Tag := 1 - (Sender as TFlatButton).Tag;
|
||||
StyleButton(Sender as TFlatButton, (Sender as TFlatButton).Tag = 1);
|
||||
if FWDSPReady then FDSPEngine.SetNR((Sender as TFlatButton).Tag = 1);
|
||||
// Используем BtnNR напрямую — корректно работает и при вызове из веб-синхронизации (Sender=nil)
|
||||
BtnNR.Tag := 1 - BtnNR.Tag;
|
||||
StyleButton(BtnNR, BtnNR.Tag = 1);
|
||||
if FWDSPReady then FDSPEngine.SetNR(BtnNR.Tag = 1);
|
||||
end;
|
||||
|
||||
procedure TMainForm.BtnNBClick(Sender: TObject);
|
||||
begin
|
||||
(Sender as TFlatButton).Tag := 1 - (Sender as TFlatButton).Tag;
|
||||
StyleButton(Sender as TFlatButton, (Sender as TFlatButton).Tag = 1);
|
||||
if FWDSPReady then FDSPEngine.SetNB((Sender as TFlatButton).Tag = 1);
|
||||
// Используем BtnNB напрямую — корректно работает и при вызове из веб-синхронизации (Sender=nil)
|
||||
BtnNB.Tag := 1 - BtnNB.Tag;
|
||||
StyleButton(BtnNB, BtnNB.Tag = 1);
|
||||
if FWDSPReady then FDSPEngine.SetNB(BtnNB.Tag = 1);
|
||||
end;
|
||||
|
||||
procedure TMainForm.BtnANFClick(Sender: TObject);
|
||||
begin
|
||||
(Sender as TFlatButton).Tag := 1 - (Sender as TFlatButton).Tag;
|
||||
StyleButton(Sender as TFlatButton, (Sender as TFlatButton).Tag = 1);
|
||||
if FWDSPReady then FDSPEngine.SetANF((Sender as TFlatButton).Tag = 1);
|
||||
// Используем BtnANF напрямую — корректно работает и при вызове из веб-синхронизации (Sender=nil)
|
||||
BtnANF.Tag := 1 - BtnANF.Tag;
|
||||
StyleButton(BtnANF, BtnANF.Tag = 1);
|
||||
if FWDSPReady then FDSPEngine.SetANF(BtnANF.Tag = 1);
|
||||
end;
|
||||
|
||||
|
||||
@@ -3823,7 +3836,7 @@ end;
|
||||
procedure TMainForm.SyncWebNR;
|
||||
begin
|
||||
if FWebSyncBool <> (BtnNR.Tag = 1) then
|
||||
BtnNRClick(nil);
|
||||
BtnNRClick(BtnNR);
|
||||
end;
|
||||
|
||||
// ── NB ────────────────────────────────────────────────────────────────────
|
||||
@@ -3838,7 +3851,7 @@ end;
|
||||
procedure TMainForm.SyncWebNB;
|
||||
begin
|
||||
if FWebSyncBool <> (BtnNB.Tag = 1) then
|
||||
BtnNBClick(nil);
|
||||
BtnNBClick(BtnNB);
|
||||
end;
|
||||
|
||||
// ── ANF ───────────────────────────────────────────────────────────────────
|
||||
@@ -3853,7 +3866,7 @@ end;
|
||||
procedure TMainForm.SyncWebANF;
|
||||
begin
|
||||
if FWebSyncBool <> (BtnANF.Tag = 1) then
|
||||
BtnANFClick(nil);
|
||||
BtnANFClick(BtnANF);
|
||||
end;
|
||||
|
||||
procedure TMainForm.TrkDriveChange(Sender: TObject);
|
||||
|
||||
Reference in New Issue
Block a user