unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; BlockScanButton: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BlockScanButtonClick(Sender: TObject); private procedure WMUser(var Msg: TMessage); message WM_USER; { Private declarations } public { Public declarations } end; var Form1: TForm1; Dll: HMODULE; hRadio: Integer; curFreq: DWORD; Freqs: array[0..1000] of DWORD; // buffer for scan data OpenRadioDevice: function(iDeviceNum: Integer): Integer; stdcall; CloseRadioDevice: function(hRadio: Integer): Bool; stdcall; SetAtten: function(hRadio: Integer; fAtten: Bool): Bool; stdcall; SetPower: function(hRadio: Integer; fPower: Bool): Bool; stdcall; SetAGC: function(hRadio: Integer; iAGC: Integer): Bool; stdcall; G3BlockScan: function(hRadio: Integer; Freqs: PDWORD; Count: Integer; StopSquelchRaw: Integer; FeedbackTime: DWORD; WinHandle: HWND; Msg: DWORD): Bool; stdcall; G3StopBlockScan: function(hRadio: Integer): Bool; stdcall; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Dll:=LoadLibrary('wrg3130api.dll'); hRadio:=0; if (Dll=0) then ShowMessage('WRG3130API.DLL not found !') else begin OpenRadioDevice:=GetProcAddress(dll,'OpenRadioDevice'); CloseRadioDevice:=GetProcAddress(dll,'CloseRadioDevice'); SetAtten:=GetProcAddress(dll,'SetAtten'); SetPower:=GetProcAddress(dll,'SetPower'); SetAGC:=GetProcAddress(dll,'SetAGC'); G3BlockScan:=GetProcAddress(dll,'G3BlockScan'); G3StopBlockScan:=GetProcAddress(dll,'G3StopBlockScan'); hRadio:=OpenRadioDevice(0); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if (hRadio <> 0) then begin G3StopBlockScan(hRadio); // just to be sure CloseRadioDevice(hRadio); end; if (Dll <> 0) then FreeLibrary(Dll); end; procedure TForm1.BlockScanButtonClick(Sender: TObject); var i: Integer; begin if (hRadio <> 0) then begin // if a radio is opened // set the properties SetPower(hRadio,TRUE); SetAtten(hRadio,FALSE); SetAGC(hRadio,3); // FAST AGC for i:=0 to 1000 do Freqs[i]:=600000+200*i; // frequencies from 600 to 800 kHz curFreq:=600000; // variable used to display scanned data if (not G3BlockScan(hRadio,@Freqs,1001,256,500,Handle,WM_USER)) then ShowMessage('Block scan failed to start'); end; end; procedure TForm1.WMUser(var Msg: TMessage); var i: Integer; pi: PDWORD; begin if (Msg.WParam=0) then ListBox1.Items.Add('Block scan ended') else begin pi:=PDWORD(Msg.WParam); for i:=1 to Msg.LParam do begin ListBox1.Items.Add('Freq: '+IntToStr(curFreq)+' RAW: '+IntToStr(pi^)); inc(pi); inc(curFreq,200); // next frequency to display end; end; end; end.