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
|
OpenHPSDR Transceiver - Main Form
|
||||||
Lazarus / FPC 3.2+ (нет inline var, нет анонимных процедур)
|
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}
|
{$IFDEF FPC}
|
||||||
@@ -3389,23 +3399,26 @@ end;
|
|||||||
|
|
||||||
procedure TMainForm.BtnNRClick(Sender: TObject);
|
procedure TMainForm.BtnNRClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
(Sender as TFlatButton).Tag := 1 - (Sender as TFlatButton).Tag;
|
// Используем BtnNR напрямую — корректно работает и при вызове из веб-синхронизации (Sender=nil)
|
||||||
StyleButton(Sender as TFlatButton, (Sender as TFlatButton).Tag = 1);
|
BtnNR.Tag := 1 - BtnNR.Tag;
|
||||||
if FWDSPReady then FDSPEngine.SetNR((Sender as TFlatButton).Tag = 1);
|
StyleButton(BtnNR, BtnNR.Tag = 1);
|
||||||
|
if FWDSPReady then FDSPEngine.SetNR(BtnNR.Tag = 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainForm.BtnNBClick(Sender: TObject);
|
procedure TMainForm.BtnNBClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
(Sender as TFlatButton).Tag := 1 - (Sender as TFlatButton).Tag;
|
// Используем BtnNB напрямую — корректно работает и при вызове из веб-синхронизации (Sender=nil)
|
||||||
StyleButton(Sender as TFlatButton, (Sender as TFlatButton).Tag = 1);
|
BtnNB.Tag := 1 - BtnNB.Tag;
|
||||||
if FWDSPReady then FDSPEngine.SetNB((Sender as TFlatButton).Tag = 1);
|
StyleButton(BtnNB, BtnNB.Tag = 1);
|
||||||
|
if FWDSPReady then FDSPEngine.SetNB(BtnNB.Tag = 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainForm.BtnANFClick(Sender: TObject);
|
procedure TMainForm.BtnANFClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
(Sender as TFlatButton).Tag := 1 - (Sender as TFlatButton).Tag;
|
// Используем BtnANF напрямую — корректно работает и при вызове из веб-синхронизации (Sender=nil)
|
||||||
StyleButton(Sender as TFlatButton, (Sender as TFlatButton).Tag = 1);
|
BtnANF.Tag := 1 - BtnANF.Tag;
|
||||||
if FWDSPReady then FDSPEngine.SetANF((Sender as TFlatButton).Tag = 1);
|
StyleButton(BtnANF, BtnANF.Tag = 1);
|
||||||
|
if FWDSPReady then FDSPEngine.SetANF(BtnANF.Tag = 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@@ -3823,7 +3836,7 @@ end;
|
|||||||
procedure TMainForm.SyncWebNR;
|
procedure TMainForm.SyncWebNR;
|
||||||
begin
|
begin
|
||||||
if FWebSyncBool <> (BtnNR.Tag = 1) then
|
if FWebSyncBool <> (BtnNR.Tag = 1) then
|
||||||
BtnNRClick(nil);
|
BtnNRClick(BtnNR);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ── NB ────────────────────────────────────────────────────────────────────
|
// ── NB ────────────────────────────────────────────────────────────────────
|
||||||
@@ -3838,7 +3851,7 @@ end;
|
|||||||
procedure TMainForm.SyncWebNB;
|
procedure TMainForm.SyncWebNB;
|
||||||
begin
|
begin
|
||||||
if FWebSyncBool <> (BtnNB.Tag = 1) then
|
if FWebSyncBool <> (BtnNB.Tag = 1) then
|
||||||
BtnNBClick(nil);
|
BtnNBClick(BtnNB);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ── ANF ───────────────────────────────────────────────────────────────────
|
// ── ANF ───────────────────────────────────────────────────────────────────
|
||||||
@@ -3853,7 +3866,7 @@ end;
|
|||||||
procedure TMainForm.SyncWebANF;
|
procedure TMainForm.SyncWebANF;
|
||||||
begin
|
begin
|
||||||
if FWebSyncBool <> (BtnANF.Tag = 1) then
|
if FWebSyncBool <> (BtnANF.Tag = 1) then
|
||||||
BtnANFClick(nil);
|
BtnANFClick(BtnANF);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainForm.TrkDriveChange(Sender: TObject);
|
procedure TMainForm.TrkDriveChange(Sender: TObject);
|
||||||
|
|||||||
Reference in New Issue
Block a user