📄 gis.txt
字号:
/////////////////////////////////////////////////////////////////////////////
// 文件名: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 + -