Scanner Screen software for 436 and 536

Status
Not open for further replies.

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Here is some code I threw together in a few minutes using Lazarus and FreePascal and the Synapse library.

It has a timer of 1/2 second sends the GLG command to the scanner and displays the rcvd data in a memo box. I will be adding to it this weekend giving it config and autosizing fonts and etc based on windows size. I want to be able to see the scanner info from across the room.

Wanted to throw some sample code out there to inspire others as I could not find any.

Code:
procedure TForm1.Timer1Timer(Sender: TObject);

var
ser: TBlockSerial;
rawmessage: string;
begin
ser := TBlockSerial.Create;
try
ser.ConvertLineEnd := True;
ser.Connect('COM4');
ser.config(115200, 8, 'N', 0, False, False);
ser.sendstring('GLG' + #13#10);
if (ser.LastError <> 0) then
Exit;

rawmessage := ser.Recvstring(4000);

if pos('GLG,,,,,', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add('Scanning....');

end
else
begin
memo1.Clear;
memo1.Lines.Add(rawmessage);

end;
finally
ser.Free;
end;

end;

*+*+*+*+*
Moderator note: to download this software please view the newest post first and then work back
*+*+*+*+*
 

Attachments

  • ScreenShot124.jpg
    ScreenShot124.jpg
    15.3 KB · Views: 6,231
Last edited by a moderator:

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Here is a newer version of source and screen shot object is to see info across the room when receiving transmission.

Very basic maybe others can use.

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, RTTICtrls, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, synaser;

type

{ TForm1 }

TForm1 = class(TForm)
Memo1: TMemo;
StaticTextFreq: TStaticText;
StaticTextsystemname: TStaticText;
StaticTextdepartmentname: TStaticText;
StaticTextchannelname: TStaticText;
TILabel1: TTILabel;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure DumpExceptionCallStack(E: Exception);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);

var
ser: TBlockSerial;

begin
ser := TBlockSerial.Create;
try
ser.ConvertLineEnd := True;
ser.Connect('COM4');
ser.config(115200, 8, 'N', 0, False, False);
ser.sendstring('GLG' + #13#10);
if (ser.LastError <> 0) then
Exit;

ShowMessage(ser.Recvstring(4000));

finally
ser.Free;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);

var
ser: TBlockSerial;
rawmessage, cmd, modulation, systemname, departmentname, channelname, freq: string;
glgs: TStringList;
begin
ser := TBlockSerial.Create;
try
try
ser.ConvertLineEnd := True;
ser.Connect('COM4');
ser.config(115200, 8, 'N', 0, False, False);
ser.sendstring('GLG' + #13#10);
if (ser.LastError <> 0) then
begin
memo1.Lines.Add('I/O Error!');
StaticTextFreq.Caption := 'I/O Error!';

Exit;

end;

rawmessage := ser.Recvstring(4000);

if pos('GLG,,,,,', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add('Scanning....');
StaticTextFreq.Caption := 'Scanning....';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';

end
else
begin
memo1.Clear;
memo1.Lines.Add(rawmessage);

GLGS := TStringList.Create;
glgs.Text := rawmessage;
glgs.Delimiter := ',';
glgs.StrictDelimiter := True;
glgs.DelimitedText := glgs.Strings[0];

//cmd := glgs.ValueFromIndex[0];
freq := glgs.ValueFromIndex[1];
modulation := glgs.ValueFromIndex[2];
systemname := glgs.ValueFromIndex[5];
departmentname := glgs.ValueFromIndex[6];
Channelname := glgs.ValueFromIndex[7];
glgs.Free;

StaticTextFreq.Caption := freq + ' (' + modulation + ')';
StaticTextsystemname.Caption := systemname;
StaticTextdepartmentname.Caption := departmentname;
StaticTextchannelname.Caption := channelname;

end;

finally
ser.Free;
end;
except
on E: Exception do
DumpExceptionCallStack(E);
end;

end;

procedure TForm1.DumpExceptionCallStack(E: Exception);
var
I: integer;
Frames: PPointer;
Report: string;
begin
Report := 'Program exception! ' + LineEnding + 'Stacktrace:' +
LineEnding + LineEnding;
if E <> nil then
begin
Report := Report + 'Exception class: ' + E.ClassName + LineEnding +
'Message: ' + E.Message + LineEnding;
end;
Report := Report + BackTraceStrFunc(ExceptAddr);
Frames := ExceptFrames;
for I := 0 to ExceptFrameCount - 1 do
Report := Report + LineEnding + BackTraceStrFunc(Frames);
ShowMessage(Report);
//Halt; // End of program execution
end;

end.
 

Attachments

  • ScreenShot126s.jpg
    ScreenShot126s.jpg
    32.4 KB · Views: 6,222
Last edited:

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Even Newer version of code.

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, RTTICtrls, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, synaser;

type

{ TForm1 }

TForm1 = class(TForm)
Memo1: TMemo;
StaticTextFreq: TStaticText;
StaticTextsystemname: TStaticText;
StaticTextdepartmentname: TStaticText;
StaticTextchannelname: TStaticText;
TILabel1: TTILabel;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure DumpExceptionCallStack(E: Exception);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }


procedure TForm1.Timer1Timer(Sender: TObject);

var
ser: TBlockSerial;
rawmessage, cmd, modulation, systemname, departmentname, channelname, freq: string;
glgs: TStringList;
begin
ser := TBlockSerial.Create;
try
try
ser.ConvertLineEnd := True;
ser.Connect('COM4');
ser.config(115200, 8, 'N', 0, False, False);
ser.sendstring('GLG' + #13#10);
if (ser.LastError <> 0) then
begin
memo1.Clear;
memo1.Lines.Add('I/O Error!');
StaticTextFreq.Caption := 'I/O Error!';
StaticTextsystemname.Caption :=
'Disconnect Cable, Restart Scanner and Try again!';
Exit;

end;

rawmessage := ser.Recvstring(4000);

if pos('GLG,,,,,', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add('Scanning....');
StaticTextFreq.Caption := 'Scanning....';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
exit;
end;

if pos('GLG', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add(rawmessage);

GLGS := TStringList.Create;
glgs.Text := rawmessage;
glgs.Delimiter := ',';
glgs.StrictDelimiter := True;
glgs.DelimitedText := glgs.Strings[0];

//cmd := glgs.ValueFromIndex[0];
freq := glgs.ValueFromIndex[1];
modulation := glgs.ValueFromIndex[2];
systemname := glgs.ValueFromIndex[5];
departmentname := glgs.ValueFromIndex[6];
Channelname := glgs.ValueFromIndex[7];
glgs.Free;

StaticTextFreq.Caption := freq + ' (' + modulation + ')';
StaticTextsystemname.Caption := systemname;
StaticTextdepartmentname.Caption := departmentname;
StaticTextchannelname.Caption := channelname;
end
else
begin
memo1.Clear;
memo1.Lines.Add('Data Error!');
StaticTextFreq.Caption := 'Data Error!';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
exit;
end;

finally
ser.Free;
end;
except
on E: Exception do
DumpExceptionCallStack(E);
end;

end;

procedure TForm1.DumpExceptionCallStack(E: Exception);
var
I: integer;
Frames: PPointer;
Report: string;
begin
Report := 'Program exception! ' + LineEnding + 'Stacktrace:' +
LineEnding + LineEnding;
if E <> nil then
begin
Report := Report + 'Exception class: ' + E.ClassName + LineEnding +
'Message: ' + E.Message + LineEnding;
end;
Report := Report + BackTraceStrFunc(ExceptAddr);
Frames := ExceptFrames;
for I := 0 to ExceptFrameCount - 1 do
Report := Report + LineEnding + BackTraceStrFunc(Frames);
ShowMessage(Report);
//Halt; // End of program execution
end;

end.
 

Attachments

  • ScreenShot127s.jpg
    ScreenShot127s.jpg
    44.6 KB · Views: 6,102

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Want to test the program or use it?

Its pretty simple.

Select the com port when starting then click Connect to Scanner.

This opens up a 800*600 window

When a transmission is received on the scanner it displays the info on the computer in a large font that is easy to read.

Its a self contained exe no installer just run it that's it.
 

Attachments

  • ScreenShot128s.jpg
    ScreenShot128s.jpg
    32.1 KB · Views: 6,054

n3617400

Member
Joined
Jun 28, 2013
Messages
242
Location
MOON 2112
Publish the source code in posts is bad idea.
99.9 percent are not programmers and do not understand what is written here.
99.441 percent of programmers not use the pascal (proof)
Any way, thanx.
 

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Not really posting the code may help others who can use it as a starting point for other programing languages.

Pascal at least free pascal is open and free for anyone to use and the lazarus IDE is as good as most of the paid ones.

Because it is free its a great hobbyist language.
 

AZScanner

Member
Joined
Dec 19, 2002
Messages
3,342
Location
Somewhere in this room. Right now, you're very col
What Vonskie said. Code is code is code and regardless of what language it's written in, a programmer who is also a good Googler can figure out how to convert it to their preferred development language. I plan to experiment with this if I get enough time this weekend. They always go by way too fast... I'd like to make something that runs on Android for the scanner as I have a whole mess of older Android devices that largely just sit around.

-AZ
 

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Anyway if anyone wants the program let me know and I will send a working version to you compiled exe.
 

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
It now has text to speech using the MS Text to speech should work with windows 7 and 8 have no clue about XP. It reads the department and channel name. Now you do not even have to look at the monitor.


unit ScannerScreen;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, RTTICtrls, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, synaser, ComObj;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBoxtexttospeech: TCheckBox;
ComboBoxcomport: TComboBox;
Label1: TLabel;
Memo1: TMemo;
StaticTextFreq: TStaticText;
StaticTextsystemname: TStaticText;
StaticTextdepartmentname: TStaticText;
StaticTextchannelname: TStaticText;
TILabel1: TTILabel;
Timer1: TTimer;

procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure DumpExceptionCallStack(E: Exception);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }



procedure TForm1.Timer1Timer(Sender: TObject);

var
ser: TBlockSerial;
rawmessage, cmd, modulation, systemname, departmentname, channelname, freq: string;
glgs: TStringList;
SpVoice: variant;
readtext: WideString;
SavedCW: word;

begin
ser := TBlockSerial.Create;
try
try
ser.ConvertLineEnd := True;
ser.Connect(comboboxcomport.Text);
ser.config(115200, 8, 'N', 0, False, False);
ser.sendstring('GLG' + #13#10);
if (ser.LastError <> 0) then
begin
memo1.Clear;
memo1.Lines.Add('I/O Error!');
StaticTextFreq.Caption := 'I/O Error!';
StaticTextsystemname.Caption :=
'Disconnect Cable, Restart Scanner and Try again!';
timer1.Enabled := False;
button2.Enabled := False;
button1.Enabled := True;
comboboxcomport.Enabled := True;
Exit;

end;

rawmessage := ser.Recvstring(2000);

if pos('GLG,,,,,', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add('Scanning....');
StaticTextFreq.Caption := 'Scanning....';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
exit;
end;

if pos('GLG', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add(rawmessage);

GLGS := TStringList.Create;
glgs.Text := rawmessage;
glgs.Delimiter := ',';
glgs.StrictDelimiter := True;
glgs.DelimitedText := glgs.Strings[0];

//cmd := glgs.ValueFromIndex[0];
freq := glgs.ValueFromIndex[1];
modulation := glgs.ValueFromIndex[2];
systemname := glgs.ValueFromIndex[5];
departmentname := glgs.ValueFromIndex[6];
Channelname := glgs.ValueFromIndex[7];
glgs.Free;

if ((TRIM(StaticTextchannelname.Caption) <> TRIM(channelname)) or
(trim(StaticTextdepartmentname.Caption) <> trim(departmentname))) then
begin
StaticTextFreq.Caption := freq + ' (' + modulation + ')';
StaticTextsystemname.Caption := systemname;
StaticTextdepartmentname.Caption := departmentname;
StaticTextchannelname.Caption := channelname;

if CheckBoxtexttospeech.Checked = True then
begin

SpVoice := CreateOleObject('SAPI.SpVoice');
// Change FPU interrupt mask to avoid SIGFPE exceptions
SavedCW := Get8087CW;



if pos(departmentname, channelname) > 0 then
begin
READTEXT := TRIM(channelname);
end
else
READTEXT := trim(DEPARTMENTNAME) + ',' + TRIM(channelname);

try
Set8087CW(SavedCW or $4);
SpVoice.Speak(READTEXT, 0);
spvoice.WaitUntilDone(10000);
finally
// Restore FPU mask
Set8087CW(SavedCW);
end;
end;
end;
end
else
begin
memo1.Clear;
memo1.Lines.Add('Data Error!');
StaticTextFreq.Caption := 'Data Error!';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
timer1.Enabled := False;
button2.Enabled := False;
button1.Enabled := True;
comboboxcomport.Enabled := True;
exit;
end;

finally
ser.Free;

end;
except
on E: Exception do
begin
timer1.Enabled := False;
button2.Enabled := False;
button1.Enabled := True;
comboboxcomport.Enabled := True;
DumpExceptionCallStack(E);
end;
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled := False;
button2.Enabled := False;
button1.Enabled := True;
comboboxcomport.Enabled := True;
memo1.Clear;
StaticTextFreq.Caption := '';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

if ComboBoxcomport.ItemIndex = -1 then
begin
ShowMessage('Select Correct COM Port!');
exit;
end;
timer1.Enabled := True;
button2.Enabled := True;
button1.Enabled := False;
comboboxcomport.Enabled := False;

end;

procedure TForm1.DumpExceptionCallStack(E: Exception);
var
I: integer;
Frames: PPointer;
Report: string;
begin
Report := 'Program exception! ' + LineEnding + 'Stacktrace:' +
LineEnding + LineEnding;
if E <> nil then
begin
Report := Report + 'Exception class: ' + E.ClassName + LineEnding +
'Message: ' + E.Message + LineEnding;
end;
Report := Report + BackTraceStrFunc(ExceptAddr);
Frames := ExceptFrames;
for I := 0 to ExceptFrameCount - 1 do
Report := Report + LineEnding + BackTraceStrFunc(Frames);
ShowMessage(Report);
//Halt; // End of program execution
end;

end.
 

Attachments

  • screenshot.gif
    screenshot.gif
    52.4 KB · Views: 5,904
Last edited:

w2xq

Mentor
Joined
Jul 13, 2004
Messages
2,358
Location
Burlington County, NJ
Wirelessly posted (Moto Droid Bionic: Mozilla/5.0 (Linux; U; Android 2.2; en-us; UPC300-2.2 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1)

Wow! Thanks. Your tinkering and upgrades reminds me of the DOS dBase programming I did to control sending and receiving data to the JRC, Kenwood and other HF receivers back in the day. Good times and mind games...
 

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Newer code

unit ScannerScreen;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, RTTICtrls, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, synaser, ComObj;

type

{ TForm1 }

TForm1 = class(TForm)
Buttonconnecttoscanner: TButton;
Buttondisconnectfromscanner: TButton;
CheckBoxtexttospeech: TCheckBox;
ComboBoxcomport: TComboBox;
Label1: TLabel;
Memo1: TMemo;
statictexttime: TStaticText;
StaticTextsystemname: TStaticText;
StaticTextdepartmentname: TStaticText;
StaticTextchannelname: TStaticText;
StaticTextFreq: TStaticText;
TILabel1: TTILabel;
Timerprobescanner: TTimer;
TimerClock: TTimer;

procedure ButtonconnecttoscannerClick(Sender: TObject);
procedure ButtondisconnectfromscannerClick(Sender: TObject);
procedure TimerprobescannerTimer(Sender: TObject);
procedure DumpExceptionCallStack(E: Exception);
procedure TimerClockTimer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }



procedure TForm1.TimerprobescannerTimer(Sender: TObject);

var
ser: TBlockSerial;
rawmessage, modulation, systemname, departmentname, channelname, freq: string;
glgs: TStringList;
SpVoice: variant;
readtext: WideString;
SavedCW: word;

begin
ser := TBlockSerial.Create;
try
try
ser.ConvertLineEnd := True;
ser.Connect(comboboxcomport.Text);
ser.config(115200, 8, 'N', 0, False, False);
ser.sendstring('GLG' + #13#10);
if (ser.LastError <> 0) then
begin
memo1.Clear;
memo1.Lines.Add('I/O Error!');
StaticTextFreq.Caption := 'I/O Error!';
StaticTextsystemname.Caption :=
'Disconnect cable, Restart scanner and Try again!';

StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
Timerprobescanner.Enabled := False;
Buttondisconnectfromscanner.Enabled := False;
Buttonconnecttoscanner.Enabled := True;
comboboxcomport.Enabled := True;
Exit;

end;

rawmessage := ser.Recvstring(2000);

if pos('GLG,,,,,', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add('Scanning....');
StaticTextFreq.Caption := 'Scanning....';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
exit;
end;

if pos('GLG', rawmessage) > 0 then
begin
memo1.Clear;
memo1.Lines.Add(rawmessage);

GLGS := TStringList.Create;
glgs.Text := rawmessage;
glgs.Delimiter := ',';
glgs.StrictDelimiter := True;
glgs.DelimitedText := glgs.Strings[0];

//cmd := glgs.ValueFromIndex[0];
freq := glgs.ValueFromIndex[1];
modulation := glgs.ValueFromIndex[2];
systemname := glgs.ValueFromIndex[5];
departmentname := glgs.ValueFromIndex[6];
Channelname := glgs.ValueFromIndex[7];
glgs.Free;

if ((TRIM(StaticTextchannelname.Caption) <> TRIM(channelname)) or
(trim(StaticTextdepartmentname.Caption) <> trim(departmentname))) then
begin
StaticTextFreq.Caption := freq + ' (' + modulation + ')';
StaticTextsystemname.Caption := systemname;
StaticTextdepartmentname.Caption := departmentname;
StaticTextchannelname.Caption := channelname;

if CheckBoxtexttospeech.Checked = True then
begin

SpVoice := CreateOleObject('SAPI.SpVoice');
// Change FPU interrupt mask to avoid SIGFPE exceptions
SavedCW := Get8087CW;



if pos(departmentname, channelname) > 0 then
begin
READTEXT := TRIM(channelname);
end
else
READTEXT := trim(DEPARTMENTNAME) + ',' + TRIM(channelname);

try
Set8087CW(SavedCW or $4);
SpVoice.Speak(READTEXT, 0);
spvoice.WaitUntilDone(10000);

finally
// Restore FPU mask
Set8087CW(SavedCW);
end;
end;
end;
end
else
begin
memo1.Clear;
memo1.Lines.Add('Data Error!');
StaticTextFreq.Caption := 'Data Error!';
StaticTextsystemname.Caption :=
'Reconnect to scanner';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
Timerprobescanner.Enabled := False;
Buttondisconnectfromscanner.Enabled := False;
Buttonconnecttoscanner.Enabled := True;
comboboxcomport.Enabled := True;
exit;
end;

finally
ser.Free;

end;
except
on E: Exception do
begin
Timerprobescanner.Enabled := False;
Buttondisconnectfromscanner.Enabled := False;
Buttonconnecttoscanner.Enabled := True;
comboboxcomport.Enabled := True;
DumpExceptionCallStack(E);
end;
end;

end;

procedure TForm1.ButtondisconnectfromscannerClick(Sender: TObject);
begin
Timerprobescanner.Enabled := False;
Buttondisconnectfromscanner.Enabled := False;
Buttonconnecttoscanner.Enabled := True;
comboboxcomport.Enabled := True;
memo1.Clear;
StaticTextFreq.Caption := '';
StaticTextsystemname.Caption := '';
StaticTextdepartmentname.Caption := '';
StaticTextchannelname.Caption := '';
end;

procedure TForm1.ButtonconnecttoscannerClick(Sender: TObject);
begin

if ComboBoxcomport.ItemIndex = -1 then
begin
ShowMessage('Select Correct COM Port!');
exit;
end;
Timerprobescanner.Enabled := True;
Buttondisconnectfromscanner.Enabled := True;
Buttonconnecttoscanner.Enabled := False;
comboboxcomport.Enabled := False;

end;

procedure TForm1.DumpExceptionCallStack(E: Exception);
var
I: integer;
Frames: PPointer;
Report: string;
begin
Report := 'Program exception! ' + LineEnding + 'Stacktrace:' +
LineEnding + LineEnding;
if E <> nil then
begin
Report := Report + 'Exception class: ' + E.ClassName + LineEnding +
'Message: ' + E.Message + LineEnding;
end;
Report := Report + BackTraceStrFunc(ExceptAddr);
Frames := ExceptFrames;
for I := 0 to ExceptFrameCount - 1 do
Report := Report + LineEnding + BackTraceStrFunc(Frames);
ShowMessage(Report);
//Halt; // End of program execution
end;

procedure TForm1.TimerClockTimer(Sender: TObject);

var
ThisMoment: TDateTime;

begin
ThisMoment := Now;
statictexttime.Caption := FormatDateTime('hh:nn', ThisMoment) +
' ' + FormatDateTime('MM/DD/YYYY', ThisMoment);

end;


end.
 

Attachments

  • screenshot.gif
    screenshot.gif
    37.8 KB · Views: 5,801
Last edited:

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Wirelessly posted (Moto Droid Bionic: Mozilla/5.0 (Linux; U; Android 2.2; en-us; UPC300-2.2 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1)

Wow! Thanks. Your tinkering and upgrades reminds me of the DOS dBase programming I did to control sending and receiving data to the JRC, Kenwood and other HF receivers back in the day. Good times and mind games...

Yes it was fun tinkering, first digital scanner I have owned.

Wish they would publish a doc file on all the commands for the 436 and 536 scanners.

Have a great day
 

Vonskie

Member
Joined
Feb 7, 2005
Messages
521
Location
Allen, TX
Why wouldn't this work with other scanners?

It should work on any uniden scanner that accepts the GLG command via serial interface and returns the data in a similar format.

Currently I have the baudrate set to 115200 that might have to be lowered for older scanners, do not know. Its hard coded right now.

And if it does not work the code can serve as a starting point for writing your own.
 
Status
Not open for further replies.
Top