📄 gpsunit.pas
字号:
unit GpsUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, Spin, ExtCtrls, SPComm, IniFiles;
type
TGpsForm = class(TForm)
Comm1: TComm;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
Memo1: TMemo;
Panel1: TPanel;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Panel2: TPanel;
Button1: TButton;
Et_out: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
RadioGroup1: TRadioGroup;
SaveDialog1: TSaveDialog;
Memo2: TMemo;
Memo3: TMemo;
BitBtn5: TBitBtn;
procedure Comm1DataReceived(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure FormShow(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
private
{ Private declarations }
ShowRec:boolean;
procedure MyAdd(cmd:string);
public
{ Public declarations }
end;
var
GpsForm: TGpsForm;
implementation
uses MainUnit, GprsUnit;
{$R *.dfm}
procedure TGpsForm.Comm1DataReceived(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var j:integer;
p:PByteArray;
s:string;
begin
p:=buffer;
s:='';
for j:=0 to BufferLength-1 do begin
s:=s+char(p^[j]);
end; {}
MyAdd(s);
if not ShowRec then exit;
s:='';
Memo1.Lines.BeginUpdate;
for j:=0 to BufferLength-1 do begin
case RadioGroup1.ItemIndex of
0: s:=s+' '+inttohex(p^[j],2);
1: s:=s+' '+inttostr(p^[j]);
2: s:=s+char(p^[j]);
end;
end; {}
Memo1.Lines.Add(s);
Memo1.Lines.EndUpdate;
end;
procedure TGpsForm.MyAdd(cmd:string);
var j,i:integer;
ss,sn:string;
s1:string[6];
begin
Memo3.Lines.Text:=cmd;
for j:=0 to Memo3.Lines.Count-1 do begin
ss:=Memo3.Lines.Strings[j];
s1:=ss;
if s1='$GPRMC' then begin
Memo2.Lines.CommaText:=ss;
if Memo2.Lines.Count>=13 then begin
ss:=Memo2.Lines.Strings[1];
sn:=copy(ss,1,2)+':'+copy(ss,3,2)+':'+copy(ss,5,2);
ss:=Memo2.Lines.Strings[2];
if ss='A' then begin
sn:=sn+#13+'定位状态:定位';
GprsForm.GPSxx:=s1+','+Memo2.Lines.Strings[3]+','+Memo2.Lines.Strings[5]+',*';
end
else begin
sn:=sn+#13+'定位状态:不定位';
GprsForm.GPSxx:='';
end;
ss:=Memo2.Lines.Strings[3];
sn:=sn+#13+copy(ss,1,2)+'度'+copy(ss,3,7)+'分';
ss:=Memo2.Lines.Strings[4];
if ss='N' then sn:=sn+'北纬'
else sn:=sn+'南纬';
ss:=Memo2.Lines.Strings[5];
sn:=sn+#13+copy(ss,1,3)+'度'+copy(ss,4,7)+'分';
ss:=Memo2.Lines.Strings[6];
if ss='E' then sn:=sn+'东经'
else sn:=sn+'西经';
ss:=Memo2.Lines.Strings[7];
sn:=sn+#13+'速度:'+floattostr(strtofloat(ss)*1.852)+'km/h';
ss:=Memo2.Lines.Strings[9];
sn:=sn+#13+copy(ss,5,2)+'-'+copy(ss,3,2)+'-'+copy(ss,1,2);
Memo2.Lines.Text:=sn;
end;
end;
end;
end;
procedure TGpsForm.FormShow(Sender: TObject);
begin
ShowRec:=true;
ComboBox1.Text:=Comm1.CommName;
ComboBox2.Text:=inttostr(Comm1.BaudRate);
end;
procedure TGpsForm.BitBtn2Click(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TGpsForm.BitBtn1Click(Sender: TObject);
begin
ShowRec:=not ShowRec;
if ShowRec then
BitBtn1.Caption:='暂停显示'
else BitBtn1.Caption:='继续显示';
end;
procedure TGpsForm.BitBtn3Click(Sender: TObject);
begin
SaveDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TGpsForm.Button1Click(Sender: TObject);
begin
if Trim(Et_out.Text)='' then exit;
Comm1.writeStr:=Et_out.Text+#13#10;
end;
procedure TGpsForm.FormCreate(Sender: TObject);
var Inif:TIniFile;
sf:string;
begin
sf:=CurPath+'set.ini';
Inif:=TIniFile.Create(sf);
Comm1.CommName:=Inif.ReadString('GPS','Com','COM2');
Comm1.BaudRate:=Inif.ReadInteger('GPS','BaudRate',4800);
Inif.Destroy;
end;
procedure TGpsForm.BitBtn5Click(Sender: TObject);
var Inif:TIniFile;
sf:string;
begin
Comm1.StopComm;
Comm1.CommName:=ComboBox1.Text;
Comm1.BaudRate:=strtointdef(ComboBox2.Text,4800);
Comm1.StartComm;
sf:=CurPath+'set.ini';
Inif:=TIniFile.Create(sf);
Inif.WriteString('GPS','Com',Comm1.CommName);
Inif.WriteInteger('GPS','BaudRate',Comm1.BaudRate);
Inif.Destroy;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -