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

📄 gis.txt

📁 gis 试用版代码,delphi开发版,试用期限,三十天
💻 TXT
📖 第 1 页 / 共 4 页
字号:
/////////////////////////////////////////////////////////////////////////////
// 文件名:u_MainFrm.pas 主窗体单元
// 工程:gpsdemo
// 功能:主界面
// 作者: YCL
/////////////////////////////////////////////////////////////////////////////

unit u_MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, ToolWin, ImgList, LTGPSCOMLib_TLB, Buttons,
  OleCtrls, HAWKEYELib_TLB, u_Common, u_Gps;

type
  TMainForm = class(TForm)
    ToolBar: TToolBar;
    StatusBar: TStatusBar;
    ControlPanel: TPanel;
    TargetPanel: TPanel;
    pgcControlPanel: TPageControl;
    tsMonitor: TTabSheet;
    tsTargetAttrib: TTabSheet;
    tsWinAttrib: TTabSheet;
    tsDisplayAttrib: TTabSheet;
    tsMapQuery: TTabSheet;
    btnPolling: TButton;
    btnRemoveWin: TButton;
    btnStopPolling: TButton;
    btnAddWin: TButton;
    GroupBox1: TGroupBox;
    HawkEye: TLTHawkEye;
    GroupBox2: TGroupBox;
    sbnSingle: TSpeedButton;
    sbnNone: TSpeedButton;
    sbnMulti: TSpeedButton;
    sbnRegion: TSpeedButton;
    GpsManager: TLTGpsManager;
    ilsToolbar: TImageList;
    tbnZoomIn: TToolButton;
    tbnZoomOut: TToolButton;
    tbnGrab: TToolButton;
    tbnMeasureLen: TToolButton;
    tbnMeasureArea: TToolButton;
    tbnMagnifier: TToolButton;
    tbnRoundSel: TToolButton;
    tbnPolygonSel: TToolButton;
    tbnRectangleSel: TToolButton;
    tbnPointSel: TToolButton;
    tbnSelTarget: TToolButton;
    tbnMapLayers: TToolButton;
    lvwTargets: TListView;
    Splitter: TSplitter;
    tbrReplaySpeed: TTrackBar;
    Label1: TLabel;
    sbnStart: TSpeedButton;
    sbnPause: TSpeedButton;
    sbnStop: TSpeedButton;
    sbnOpenTrack: TSpeedButton;
    GroupBox3: TGroupBox;
    cbAutoChangeMap: TCheckBox;
    cbShowRuler: TCheckBox;
    cbShowScale: TCheckBox;
    cbShowImage: TCheckBox;
    GroupBox4: TGroupBox;
    cbSmoothTarget: TCheckBox;
    cbShowTargetName: TCheckBox;
    cbShowTail: TCheckBox;
    cbShowErrorCircle: TCheckBox;
    cbAbsoluteMove: TCheckBox;
    cbMatchRoad: TCheckBox;
    GroupBox5: TGroupBox;
    cbDisableMoveOnQuiet: TCheckBox;
    Label2: TLabel;
    udSpeedLimit: TUpDown;
    edtSpeedLimit: TEdit;
    GroupBox6: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    GroupBox7: TGroupBox;
    Label10: TLabel;
    edtQueryString: TEdit;
    btnQuery: TButton;
    lbQueryResult: TListBox;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    GroupBox8: TGroupBox;
    GroupBox9: TGroupBox;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    cbShowTailLine: TCheckBox;
    cbShowTailPoint: TCheckBox;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    cbbRulerColorBg: TComboBox;
    cbbRulerColorFg: TComboBox;
    cbbWinBgColor: TComboBox;
    edtMagnifierH: TEdit;
    edtMagnifierW: TEdit;
    edtMagnifierRatio: TEdit;
    tmrGpsData: TTimer;
    GroupBox10: TGroupBox;
    cbbMaps: TComboBox;
    edtSymbolWidth: TEdit;
    edtSymbolHeight: TEdit;
    cbbCaptionPos: TComboBox;
    edtErrorCircleRadius: TEdit;
    edtErrorCircleWidth: TEdit;
    tbSeparator1: TToolButton;
    tbSeparator2: TToolButton;
    tbPrint: TToolButton;
    edtPointRadius: TEdit;
    edtLineWidth: TEdit;
    cbbPointColor: TComboBox;
    cbbLineColor: TComboBox;
    cbbNormalFg: TComboBox;
    cbbNormalBg: TComboBox;
    cbbActiveFg: TComboBox;
    cbbActiveBg: TComboBox;
    cbbErrCircleColor: TComboBox;
    procedure btnPollingClick(Sender: TObject);
    procedure tbnZoomInClick(Sender: TObject);
    procedure tbnZoomOutClick(Sender: TObject);
    procedure tbnGrabClick(Sender: TObject);
    procedure tbnMeasureLenClick(Sender: TObject);
    procedure tbnMeasureAreaClick(Sender: TObject);
    procedure tbnMagnifierClick(Sender: TObject);
    procedure tbnRoundSelClick(Sender: TObject);
    procedure tbnPolygonSelClick(Sender: TObject);
    procedure tbnRectangleSelClick(Sender: TObject);
    procedure tbnPointSelClick(Sender: TObject);
    procedure btnStopPollingClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnAddWinClick(Sender: TObject);
    procedure tbPrintClick(Sender: TObject);
    procedure tbnMapLayersClick(Sender: TObject);
    procedure cbbMapsChange(Sender: TObject);
    procedure btnRemoveWinClick(Sender: TObject);
    procedure sbnSingleClick(Sender: TObject);
    procedure cbDisableMoveOnQuietClick(Sender: TObject);
    procedure edtSpeedLimitChange(Sender: TObject);
    procedure cbbNormalFgChange(Sender: TObject);
    procedure cbbNormalBgChange(Sender: TObject);
    procedure cbbActiveFgChange(Sender: TObject);
    procedure cbbActiveBgChange(Sender: TObject);
    procedure edtSymbolWidthChange(Sender: TObject);
    procedure edtSymbolHeightChange(Sender: TObject);
    procedure cbbCaptionPosChange(Sender: TObject);
    procedure cbbErrCircleColorChange(Sender: TObject);
    procedure edtErrorCircleRadiusChange(Sender: TObject);
    procedure edtErrorCircleWidthChange(Sender: TObject);
    procedure cbAutoChangeMapClick(Sender: TObject);
    procedure cbShowRulerClick(Sender: TObject);
    procedure cbShowScaleClick(Sender: TObject);
    procedure cbShowImageClick(Sender: TObject);
    procedure cbbRulerColorFgChange(Sender: TObject);
    procedure cbbRulerColorBgChange(Sender: TObject);
    procedure cbSmoothTargetClick(Sender: TObject);
    procedure cbShowTargetNameClick(Sender: TObject);
    procedure cbShowTailClick(Sender: TObject);
    procedure cbShowErrorCircleClick(Sender: TObject);
    procedure cbAbsoluteMoveClick(Sender: TObject);
    procedure cbMatchRoadClick(Sender: TObject);
    procedure edtMagnifierHChange(Sender: TObject);
    procedure edtMagnifierWChange(Sender: TObject);
    procedure edtMagnifierRatioChange(Sender: TObject);
    procedure cbbPointColorChange(Sender: TObject);
    procedure cbbLineColorChange(Sender: TObject);
    procedure edtPointRadiusChange(Sender: TObject);
    procedure edtLineWidthChange(Sender: TObject);
    procedure cbShowTailLineClick(Sender: TObject);
    procedure cbShowTailPointClick(Sender: TObject);
    procedure btnQueryClick(Sender: TObject);
    procedure lbQueryResultClick(Sender: TObject);
    procedure tmrGpsDataTimer(Sender: TObject);
    procedure lvwTargetsMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormResize(Sender: TObject);
    procedure sbnOpenTrackClick(Sender: TObject);
    procedure sbnStartClick(Sender: TObject);
    procedure sbnPauseClick(Sender: TObject);
    procedure sbnStopClick(Sender: TObject);
    procedure tbrReplaySpeedChange(Sender: TObject);
    procedure tbnSelTargetClick(Sender: TObject);
    procedure pgcControlPanelChange(Sender: TObject);
  private
    { Private declarations }
    procedure LoadMapsSymbols;
    procedure SetLTDefault;
    procedure AddComboBoxColors(Control: TWinControl);
    procedure DrawColorItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure WmGpsData(var Msg: TMessage); message(WM_GPSDATA);
    procedure WmReplayData(var Msg: TMessage); message WM_REPLAYDATA;
  protected
    procedure BindTargetData(ATarget: GpsTarget);
    procedure DeleteTargetData(TargetName: string);
    procedure GetReplayData(Sender: TObject);
  public
    { Public declarations }
    ActiveGpsCtrl: TLTGpsCtrl;
    ReplayGpsCtrl: TLTGpsCtrl;
    procedure CreateMonitorWindow(MapIndex: Integer = 0);
    procedure SetWinAttribs;
  end;

const
  MAX_TARGETS = 5;

var
  MainForm: TMainForm;
  ReplayPaused: Boolean;
  PkgSelections: IRTPkgSelections;

implementation

uses u_MonitorWin, u_SelTargetDlg, u_ReplayDlg;

{$R *.DFM}


//////////////////////////////////////////////////////////
// 创建监控窗口
// 参数:   MapIndex -- 地图序号
//////////////////////////////////////////////////////////
procedure TMainForm.CreateMonitorWindow(MapIndex: Integer);
var
  AGeoMap: IRTGeoMap;
begin
  with TMonitorWin.Create(Self) do
  begin
   // GpsCtrl.HandleNeeded;

   (************************************************)
   (*                                              *)
    GpsManager.AddGpsWin(GpsCtrl.ControlInterface);
   (*                                              *)
   (************************************************)

    GpsCtrl.CurrentTargetID := 1;
    ActiveGpsCtrl := GpsCtrl;

    (******************************************************)
    (*                                                    *)
    AGeoMap := GpsManager.GeoMaps.GetMapOnIndex(MapIndex);
    GpsCtrl.CurrentMap := AGeoMap;
    (*                                                    *)
    (******************************************************)

    Caption := AGeoMap.Name;
    OnActivate(nil);
  end;
end;

//////////////////////////////////////////////////////////
// 装入地图数据及符号库
//////////////////////////////////////////////////////////
procedure TMainForm.LoadMapsSymbols;
var
  strPath: string;
begin
  strPath := ExtractFilePath(Application.ExeName);

  (***************************************************)
  (*                                                 *)
  GpsManager.LoadMaps(strPath + 'chart\index.mlb');
  GpsManager.LoadSymbol(strPath + 'config\car.slb');
  (*                                                 *)
  (***************************************************)
end;


////////////////////////////////////////////////////////////
// 绑定目标数据到目标列表
////////////////////////////////////////////////////////////
procedure TMainForm.BindTargetData(ATarget: GpsTarget);
var
  I: Integer;
  Index: Integer;
  ////////////////////////////////////////////////////
  // 添加目标数据结点
  ////////////////////////////////////////////////////
  procedure AddTargetData(ATarget: GpsTarget);
  var
    GpsData: IGpsData;
  begin
    (****************************************************)
    (*                                                  *)
    GpsData := ATarget.GetGpsData;
    (*                                                  *)
    (****************************************************)

    with lvwTargets.Items.Add do
    begin
      Caption := ATarget.Name;
      Data := Pointer(ATarget.TargetID);
      SubItems.Add(ATarget.CurrentRoadName);         //路名
      SubItems.Add(GpstimeToStr(GpsData));   //时间
      SubItems.Add(StatusToStr(GpsData.Status ));    //状态
      SubItems.Add(LlToStr(GpsData.longitude ));    //经度
      SubItems.Add(LlToStr(GpsData.latitude ));   //纬度
      SubItems.Add(SpeedToStr(GpsData.Speed ));    //速度
      SubItems.Add(HeadingToStr(GpsData.Heading ));//方向

    end;
  end;
  //////////////////////////////////////////////////////
  // 更新目标数据结点
  //////////////////////////////////////////////////////
  procedure UpdateTargetData(Index: Integer; ATarget: GpsTarget);
  var
    GpsData: IGpsData;
  begin
    GpsData := ATarget.GetGpsData;
    with lvwTargets.Items[Index] do
    begin
      Data := Pointer(ATarget.TargetID);
      Caption := ATarget.Name;
      SubItems[0] := string(ATarget.CurrentRoadName); //当前路名
      SubItems[1] := GpstimeToStr(GpsData);   //时间
      SubItems[2] := StatusToStr(GpsData.Status);     //状态
      SubItems[3] := LlToStr(GpsData.longitude);   //经度
      SubItems[4] := LlToStr(GpsData.latitude);    //纬度
      SubItems[5] := SpeedToStr(GpsData.Speed);    //速度
      SubItems[6] := HeadingToStr(GpsData.Heading);//方向

    end;
  end;

begin
  Index := -1;
  //搜索列表视图,看要绑定的目标是否在其中
  for I := 0 to lvwTargets.Items.Count - 1 do
  begin
    if Integer(lvwTargets.Items[I].Data) = ATarget.TargetID then
    begin
      Index := I;
      Break;
    end;
  end;

  if Index >= 0 then
    UpdateTargetData(Index, ATarget)
  else
    AddTargetData(ATarget);
end;

////////////////////////////////////////////////////////////
// 从目标数据列表删除目标数据
////////////////////////////////////////////////////////////
procedure TMainForm.DeleteTargetData(TargetName: string);
var
  I: Integer;
  ListItem: TListItem;
begin
  for I := 0 to lvwTargets.Items.Count - 1 do
  begin
    ListItem := lvwTargets.Items[I];
    if ListItem.Caption = TargetName then
    begin
      lvwTargets.Items.Delete(I);
      Break;
    end;
  end;
end;

///////////////////////////////////////////////////////////
// 呼叫操作
///////////////////////////////////////////////////////////
procedure TMainForm.btnPollingClick(Sender: TObject);
var
  I: Integer;
  SelTargetDlg: TSelTargetDlg;
begin
  if tmrGpsData.Enabled then
    tmrGpsData.Enabled := False;

  SelTargetDlg := TSelTargetDlg.Create(Self);
  SelTargetDlg.clbTargets.Items.Clear;
  for I := 0 to Length(Targets) - 1 do

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -