unit HamlibRadioForm; interface uses SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, HamlibComponents, hamlib_rigapi; type TRadioForm = class(TForm) FreqPanel_vfoa: TPanel; FreqEdit_vfoa: TEdit; FreqLabel_vfoa: TLabel; Label2: TLabel; Panel1: TPanel; FreqLabel_vfob: TLabel; FreqEdit_vfob: TEdit; MHzLabel_vfob: TLabel; CloseButton: TButton; MagicCheckButton: TButton; FreqUpButton_vfoA: TButton; FreqDnButton_vfoa: TButton; FreqUpButton_vfob: TButton; FreqDnButton_vfob: TButton; procedure MagicCheckButtonClick(Sender: TObject); procedure FreqButton_Click(Sender: TObject); private { Private declarations } FRigComponent: TRigComponent; procedure RadioFreqCallback(Sender: TObject; vfo: vfo_t; Freq: freq_t); public { Public declarations } function Execute(model: integer): integer; end; var RadioForm: TRadioForm; implementation {$R *.xfm} procedure TRadioForm.RadioFreqCallback(Sender: TObject; vfo: Integer; Freq: Int64); var edit: TEdit; begin if (vfo = RIG_VFO_A) then edit := FreqEdit_vfoa else edit := FreqEdit_vfob; edit.Text := Format('%.6f', [freq / 1.0e6]); end; function TRadioForm.Execute(model: integer): integer; begin result := 0; try FRigComponent := TRigComponent.CreateRig(Self, model); FRigComponent.OnFrequency := RadioFreqCallback; FRigComponent.OpenRig; FRigComponent.Transceive := RIG_TRN_RIG; rig_debug(RIG_DEBUG_TRACE, 'This is where the window is shown...'+chr($a)); result := ShowModal; rig_debug(RIG_DEBUG_TRACE, 'Finished. Window is closed.'+chr($a)); FRigComponent.CloseRig; FRigComponent.Free; except on e: ERigException do begin ShowMessage('Error occurred while using the rig: %s', [e.Message]); FRigComponent.CloseRig; FRigComponent.Free; end; end; end; procedure TRadioForm.FreqButton_Click(Sender: TObject); var newfreq : freq_t; deffreq: float; delta: freq_t; vfo: vfo_t; edit: TEdit; begin deffreq := 145.825; if (Sender = FreqUpButton_vfoA) or (Sender = FreqDnButton_vfoA) then begin vfo := RIG_VFO_A; edit := FreqEdit_vfoa; end else begin vfo := RIG_VFO_B; edit := FreqEdit_vfob; end; if (Sender = FreqUpButton_vfoA) or (Sender = FreqUpButton_vfoB) then delta := +5000 { Hz } else delta := -5000; { Hz } newfreq := trunc( 1.0e6 * StrToFloatDef(edit.Text, deffreq)); newfreq := newfreq + delta; try FRigComponent.SetFreq(vfo, newfreq); edit.text := Format('%.6f', [newfreq / 1.0e6]); except on e: ERigException do ShowMessage('Unable to set rig'); end; end; procedure TRadioForm.MagicCheckButtonClick(Sender: TObject); begin if FRigComponent.checkMagic then ShowMessage('Magic check succeeded.') else ShowMessage('Magic check FAILED!!!'); end; end.