📄 main.pas
字号:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, Math, StrUtils, SPComm, GpsFunc,
ImgList;
type
TfrmMain = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
PaintBox1: TPaintBox;
PaintBox2: TPaintBox;
pbxSat: TPaintBox;
Label4: TLabel;
lblJD: TLabel;
lblWD: TLabel;
lblHB: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
GPS1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Memo1: TMemo;
lblTime: TLabel;
Comm1: TComm;
lblStatus: TLabel;
lblSat: TLabel;
N7: TMenuItem;
procedure N6Click(Sender: TObject);
procedure GPS1Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure pbxSatPaint(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
procedure DrawSatInfo(gps: TGPSInfo; pbx: TPaintBox);
public
{ Public declarations }
GPSR1,GPSR2: TGPSInfo;
end;
var
frmMain: TfrmMain;
implementation
uses GPS, test;
{$R *.dfm}
procedure TfrmMain.N6Click(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.GPS1Click(Sender: TObject);
begin
frmGPS := TfrmGPS.Create(Screen);
try
frmGPS.ShowModal;
finally
frmGPS.Free;
end;
end;
procedure TfrmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
tmpStr: Array [0..1000] of Char;
begin
//SetLength(tmpStr,BufferLength);
Move(Buffer^,PChar((@tmpStr)^),BufferLength);
if Memo1.Visible then begin
Memo1.Lines.Clear;
Memo1.Lines.Add(tmpStr);
end;
DO_GPSString(tmpStr,GPSR1);
lblJD.Caption := GPSR1.LonHemi + FloatToStr(GPSR1.Lon);
lblWD.Caption := GPSR1.LatHemi + FloatToStr(GPSR1.Lat);
lblHB.Caption := IntToStr(Round(GPSR1.Alt));
lblTime.Caption := GPSR1.UTC;
pbxSat.Repaint;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Comm1.StartComm;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Comm1.StopComm;
end;
procedure TfrmMain.DrawSatInfo(gps: TGPSInfo; pbx: TPaintBox);
var
i: integer;
r: integer;
dx,dy: integer;
begin
r := pbx.Width div 2;
for i:= 1 to 12 do begin
if gps.SatInfo[i].PRN <> 0 then begin
dx := r + Round(r*(90-gps.SatInfo[i].EL)*sin((gps.SatInfo[i].AZ - 90)*Pi/180)/90);
dy := r + Round(r*(90-gps.SatInfo[i].EL)*cos((gps.SatInfo[i].AZ - 90)*Pi/180)/90);
dx := dx - 8;
if dx < 0 then dx := 0;
if gps.SatInfo[i].SN > 20 then begin
pbx.Canvas.Font.Color := clBlue;
pbx.Canvas.TextOut(dx,dy,inttostr(gps.SatInfo[i].PRN));
end else begin
pbx.Canvas.Font.Color := clRed;
pbx.Canvas.TextOut(dx,dy,inttostr(gps.SatInfo[i].PRN));
end;
end;
end;
end;
procedure TfrmMain.pbxSatPaint(Sender: TObject);
var
dx,dy: integer;
r: integer;
begin
with (Sender as TPaintBox) do begin
if Width > Height then Height := Width
else Width := Height;
r := Height div 2;
dx := r div 3;
dy := r div 3;
Canvas.Pen.Color := clGreen;
Canvas.Ellipse(0,0,Width,Height);
Canvas.Ellipse(dx,dy,Width-dx,Height-dy);
Canvas.Ellipse(dx*2,dy*2,Width-dx*2,Height-dy*2);
Canvas.MoveTo(0,r);
Canvas.LineTo(Width,r);
Canvas.MoveTo(r,0);
Canvas.LineTo(r,Height);
end;
DrawSatInfo(GPSR1,(Sender as TPaintBox));
end;
procedure TfrmMain.N7Click(Sender: TObject);
begin
Memo1.Visible := not Memo1.Visible;
(Sender as TMenuItem).Checked := Memo1.Visible;
end;
procedure TfrmMain.N3Click(Sender: TObject);
begin
frmTest.ShowModal;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -