⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 gps通讯程序,能够运行在delphi7下
💻 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 + -