LazMapViewer: Extend demo to show how to add GPS points.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6793 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2019-01-17 23:09:41 +00:00
parent a858d685fa
commit 9fac446b61
7 changed files with 499 additions and 10 deletions

View File

@ -32,7 +32,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="2"> <Units Count="3">
<Unit0> <Unit0>
<Filename Value="MapViewer_Demo.lpr"/> <Filename Value="MapViewer_Demo.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -45,13 +45,20 @@
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="Main"/> <UnitName Value="Main"/>
</Unit1> </Unit1>
<Unit2>
<Filename Value="gpslistform.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="GPSListViewer"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit2>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="11"/> <Version Value="11"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Target> <Target>
<Filename Value="MapViewer_Demo"/> <Filename Value="bin\$(TargetCPU)-$(TargetOS)\MapViewer_Demo"/>
</Target> </Target>
<SearchPaths> <SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/> <IncludeFiles Value="$(ProjOutDir)"/>

View File

@ -7,7 +7,7 @@ uses
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Interfaces, // this includes the LCL widgetset
Forms, Main Forms, Main, gpslistform
{ you can add units after this }; { you can add units after this };
{$R *.res} {$R *.res}
@ -17,6 +17,7 @@ begin
Application.Scaled:=True; Application.Scaled:=True;
Application.Initialize; Application.Initialize;
Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TGPSListViewer, GPSListViewer);
Application.Run; Application.Run;
end. end.

View File

@ -0,0 +1,251 @@
object GPSListViewer: TGPSListViewer
Left = 282
Height = 352
Top = 135
Width = 483
Caption = 'GPS points'
ClientHeight = 352
ClientWidth = 483
LCLVersion = '2.1.0.0'
object ListView: TListView
Left = 6
Height = 308
Top = 6
Width = 471
Align = alClient
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Right = 6
Columns = <
item
Caption = 'Name'
Width = 150
end
item
Caption = 'Latitude'
Width = 150
end
item
Caption = 'Longitude'
Width = 150
end>
ReadOnly = True
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
OnDblClick = ListViewDblClick
OnSelectItem = ListViewSelectItem
end
object Panel1: TPanel
Left = 0
Height = 38
Top = 314
Width = 483
Align = alBottom
AutoSize = True
BevelOuter = bvNone
ClientHeight = 38
ClientWidth = 483
TabOrder = 1
object BtnDeletePoint: TBitBtn
AnchorSideLeft.Control = BtnGoToPoint
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
Left = 118
Height = 26
Top = 6
Width = 110
AutoSize = True
BorderSpacing.Around = 6
Caption = 'Delete point'
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000002F2FE7433535D2FF2525D7450000000000000000000000002828
E8412F2FD1FF2525D74500000000000000000000000000000000000000000000
0000000000004141DEFF3838DBFF2F2FD4FF2626DD43000000002929EF402E2E
DDFF2C2CD8FF2F2FD1FF00000000000000000000000000000000000000000000
0000000000003F3FF1454040E5FF3636DEFF2D2DD9FF2929ED802A2AE3FF2B2B
E5FF2E2EDDFF2828E84100000000000000000000000000000000000000000000
000000000000000000003939F0433C3CE7FF3131E5FF2B2BE6FF2A2AE8FF2A2A
E3FF2929EF400000000000000000000000000000000000000000000000000000
00000000000000000000000000002B2BEF803131ECFF2C2CEBFF2B2BE6FF2929
ED80000000000000000000000000000000000000000000000000000000000000
000000000000000000002929EF403333ECFF2F2FEDFF3030ECFF3131E5FF2D2D
D9FF2626DD430000000000000000000000000000000000000000000000000000
0000000000003030EF413838E7FF3232EBFF3333ECFF2B2BEF803C3CE7FF3636
DEFF2F2FD4FF2525D74500000000000000000000000000000000000000000000
0000000000004242E5FF3D3DE9FF3838E7FF2929EF40000000003939F0434040
E5FF3838DBFF3535D2FF00000000000000000000000000000000000000000000
0000000000003F3FF1454242E5FF3030EF410000000000000000000000003F3F
F1454141DEFF2F2FE74300000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
}
OnClick = BtnDeletePointClick
TabOrder = 0
end
object BtnGoToPoint: TBitBtn
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
Left = 6
Height = 26
Top = 6
Width = 106
AutoSize = True
BorderSpacing.Around = 6
Caption = 'Go to point'
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000000
000000000000000000000696F2DC0696F2500000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000069AF3A90694F2FF0697F18400000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000595F1350697F3FB05A2F4F50699F29E0080FF040000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000069BF3D802DBFBFF04B1F6F5059AF3C40099
EE0F000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000595F26004B0F6F200FEFFFF03BFF8F70699
F2DE0991EE1E0000000000000000000000000000000000000000000000000000
0000000000000000000000000000008EFF090698F2F301F1FDFF00FFFFFF03CF
F9FC0598F2EE0593F034000000000000000000000000000000000594F2620694
F2FF0694F2FF0694F2FF0694F2FF0694F2FF0694F2FF02D4FAFF00FFFFFF00FF
FFFF02DEFBFE0599F2F40696F2500000000000000000000000000080FF06059A
F3C204BDF7F600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF
FFFF00FFFFFF01EBFDFF059DF4F50697F1840000000000000000000000000099
E60A069AF3D203C7F8F900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF
FFFF00FFFFFF00FFFFFF01F4FEFF05A5F5F40699F2A20099FF05000000000000
00000099F2140699F3E203CFF9FC00FFFFFF00FFFFFF00FFFFFF05A0F4FB0694
F2FF0694F2FF0694F2FF0694F2FF0694F2FF0694F2FF0594F262000000000000
0000000000000992F61C0598F3E902D7FAFD00FFFFFF00FFFFFF01E5FCFF0599
F2F40893F3420000000000000000000000000000000000000000000000000000
000000000000000000000791F1250599F2EF02E0FBFF00FFFFFF00FFFFFF01E5
FCFF0599F2F40893F34200000000000000000000000000000000000000000000
00000000000000000000000000000595F1350699F2F401E5FCFF00FFFFFF00FF
FFFF01E5FCFF0599F2F40893F342000000000000000000000000000000000000
0000000000000000000000000000000000000893F3420599F3F501EBFDFF00FF
FFFF00FFFFFF01E5FCFF0599F2F40893F3420000000000000000000000000000
000000000000000000000000000000000000000000000695F3570695F2FE0694
F2FF0694F2FF0694F2FF0694F2FF0695F2E50000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
}
OnClick = BtnGoToPointClick
TabOrder = 1
end
object BtnClose: TBitBtn
AnchorSideTop.Control = Panel1
AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom
Left = 402
Height = 26
Top = 6
Width = 75
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Around = 6
Caption = 'Close'
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000B6420000C1B40000CBD10000CDDD0000CBD10000
C1B40000B6420000000000000000000000000000000000000000000000000000
00000000BF040000BBA20000E0EE0000FFFF0000FFFF0000FFFF0000FFFF0000
FFFF0000E0EE0000BBA20000BF04000000000000000000000000000000000000
00000000BBA20000F2FC0000FFFF0000FCFF0000DFEF0000D2E10000E0EF0000
FCFF0000FFFF0000F2FC0000BBA2000000000000000000000000000000000000
B3430000E0EE0000FFFF0000EEF60000BFBB0000AE2C0000AA060000AA2D0000
BFBB0000EEF70000FFFF0000DFEE0000B4410000000000000000000000000000
C1B50000FFFF0000FCFF0000BFBA000000000000000000000000000000000000
00000000BFBB0000FCFF0000FFFF0000C1B40000000000000000000000000000
CBD20000FFFF0000DFEE0000AC2B000000000000000000000000000000000000
00000000AA2D0000DFEF0000FFFF0000CBD20000000000000000000000000000
CDDC0000FFFF0000D3E10000AA09000000000000000000000000000000000000
00000000AA090000D3E20000FFFF0000CEDB0000000000000000000000000000
CBCC0000FFFF0000E4F50000AC34000000000000B7E40000CEE00000B7E40000
00000000AF360000E4F40000FFFF0000CBCC0000000000000000000000000000
C0B30000FEFF0000FCFF0000BFBA000000000000CEE00000FFFF0000CEE00000
00000000C0BA0000FCFF0000FEFF0000C0B10000000000000000000000000000
B43A0000DFEE0000FFFF0000D2E30000B30A0000CEE00000FFFF0000CEE00000
00000000CDDA0000FFFF0000DEEE0000B3390000000000000000000000000000
00000000BC9B0000F1F90000D3E20000A20B0000CEE00000FFFF0000CEE00000
00000000CDDA0000F0FB0000BD9B000000000000000000000000000000000000
0000000080020000BC9F0000BBE90000A20B0000CEE00000FFFF0000CEE00000
00000000B9E40000BC9B00008002000000000000000000000000000000000000
000000000000000000000000AC34000080020000CEE00000FFFF0000CEE00000
00000000AC2B0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000CEE00000FFFF0000CEE00000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000B7E40000CEE00000B7E40000
0000000000000000000000000000000000000000000000000000
}
OnClick = BtnCloseClick
TabOrder = 2
end
object BtnClearAll: TBitBtn
AnchorSideLeft.Control = BtnDeletePoint
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
Left = 234
Height = 26
Top = 6
Width = 88
AutoSize = True
BorderSpacing.Around = 6
Caption = 'Clear all'
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000
0000000000000000003300000033000000000000000000000000000000000000
00000000000000000033000000330000000000000000FFFFFF00FFFFFF000000
0000000000333040C4FF3040C4FF000000330000000000000000000000000000
0000000000333040C4FF3040C4FF0000003300000000FFFFFF00FFFFFF000000
00333040C4FF6C7EFCFF6C7EFCFF3040C4FF0000003300000000000000000000
00333040C4FF6C7EFCFF6C7EFCFF3040C4FF00000033FFFFFF00FFFFFF003040
C4FF7182FAFF596EF9FF596EF9FF7182FAFF3040C4FF00000033000000333040
C4FF7182FAFF596EF9FF596EF9FF7182FAFF3040C4FFFFFFFF00FFFFFF003040
C4FF7687F8FF5469F7FF5469F7FF5469F7FF7687F8FF3040C4FF3040C4FF7687
F8FF5469F7FF5469F7FF5469F7FF7687F8FF3040C4FFFFFFFF00FFFFFF000000
00003040C4FF7B8CF7FF4F65F5FF4F65F5FF4F65F5FF7B8CF7FF7B8CF7FF4F65
F5FF4F65F5FF4F65F5FF7B8CF7FF3040C4FF00000000FFFFFF00FFFFFF000000
0000000000003040C4FF8291F6FF4B61F3FF4B61F3FF4B61F3FF4B61F3FF4B61
F3FF4B61F3FF8291F6FF3040C4FF0000000000000000FFFFFF00FFFFFF000000
000000000000000000003040C4FF8896F6FF465DF0FF465DF0FF465DF0FF465D
F0FF8896F6FF3040C4FF000000000000000000000000FFFFFF00FFFFFF000000
000000000000000000333040C4FF8F9DF5FF4159EEFF4159EEFF4159EEFF4159
EEFF8F9DF5FF3040C4FF000000330000000000000000FFFFFF00FFFFFF000000
0000000000333040C4FF97A3F5FF3C55ECFF3C55ECFF3C55ECFF3C55ECFF3C55
ECFF3C55ECFF97A3F5FF3040C4FF0000003300000000FFFFFF00FFFFFF000000
00333040C4FF9EABF4FF3751EAFF3751EAFF3751EAFF9EABF4FF9EABF4FF3751
EAFF3751EAFF3751EAFF9EABF4FF3040C4FF00000033FFFFFF00FFFFFF003040
C4FFA7B3F5FF324DE7FF324DE7FF324DE7FFA7B3F5FF3040C4FF3040C4FFA7B3
F5FF324DE7FF324DE7FF324DE7FFA7B3F5FF3040C4FFFFFFFF00FFFFFF003040
C4FFB0BBF5FF2D49E5FF2D49E5FFB0BBF5FF3040C4FF00000000000000003040
C4FFB0BBF5FF2D49E5FF2D49E5FFB0BBF5FF3040C4FFFFFFFF00FFFFFF000000
00003040C4FFBAC3F6FFBAC3F6FF3040C4FF0000000000000000000000000000
00003040C4FFBAC3F6FFBAC3F6FF3040C4FF00000000FFFFFF00FFFFFF000000
0000000000003040C4FF3040C4FF000000000000000000000000000000000000
0000000000003040C4FF3040C4FF0000000000000000FFFFFF00
}
OnClick = BtnClearAllClick
TabOrder = 3
end
end
end

View File

@ -0,0 +1,173 @@
unit gpslistform;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, ComCtrls,
ExtCtrls, Buttons, mvGpsObj, mvMapViewer;
const
// IDs of GPS items
_CLICKED_POINTS_ = 10;
type
{ TGPSListViewer }
TGPSListViewer = class(TForm)
BtnClearAll: TBitBtn;
BtnDeletePoint: TBitBtn;
BtnGoToPoint: TBitBtn;
BtnClose: TBitBtn;
ListView: TListView;
Panel1: TPanel;
procedure BtnClearAllClick(Sender: TObject);
procedure BtnCloseClick(Sender: TObject);
procedure BtnDeletePointClick(Sender: TObject);
procedure BtnGoToPointClick(Sender: TObject);
procedure ListViewDblClick(Sender: TObject);
procedure ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
private
FViewer: TMapView;
FList: TGpsObjList;
procedure SetViewer(AValue: TMapView);
protected
procedure Populate;
procedure UpdateButtonStates;
public
destructor Destroy; override;
property MapViewer: TMapView read FViewer write SetViewer;
end;
var
GPSListViewer: TGPSListViewer;
implementation
{$R *.lfm}
uses
mvTypes;
destructor TGPSListViewer.Destroy;
begin
FList.Free;
inherited;
end;
procedure TGPSListViewer.Populate;
const
GPS_FORMAT = '0.000000';
var
i: Integer;
item: TListItem;
gpsObj: TGpsObj;
area: TRealArea;
begin
if FViewer = nil then begin
ListView.Items.Clear;
exit;
end;
FViewer.GPSItems.GetArea(area);
FList.Free;
FList := FViewer.GPSItems.GetObjectsInArea(area);
ListView.Items.BeginUpdate;
try
ListView.Items.Clear;
for i:=0 to FList.Count-1 do begin
gpsObj := FList[i];
item := ListView.Items.Add;
item.Caption := gpsObj.Name;
if gpsObj is TGpsPoint then begin
item.Subitems.Add(FormatFloat(GPS_FORMAT, TGpsPoint(gpsObj).Lat));
item.Subitems.Add(FormatFloat(GPS_FORMAT, TGpsPoint(gpsObj).Lon));
end;
end;
finally
ListView.items.EndUpdate;
UpdateButtonStates;
end;
end;
procedure TGPSListViewer.BtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TGPSListViewer.BtnClearAllClick(Sender: TObject);
begin
FViewer.GpsItems.Clear(_CLICKED_POINTS_);
ListView.Items.Clear;
end;
procedure TGPSListViewer.BtnDeletePointClick(Sender: TObject);
var
gpsObj: TGpsObj;
i: Integer;
rPt: TRealPoint;
item: TListItem;
begin
if ListView.itemIndex > -1 then begin
ListView.Items.Delete(ListView.ItemIndex);
// Clear all GPS items in MapViewer
FViewer.GpsItems.Clear(_CLICKED_POINTS_);
// Recreate remaining GPS items from data in ListView
for i:=0 to ListView.Items.Count-1 do begin
item := ListView.Items[i];
rPt.Lon := StrToFloat(item.SubItems[1]);
rPt.Lat := StrToFloat(item.SubItems[0]);
gpsObj := TGpsPoint.CreateFrom(rPt);
gpsObj.Name := item.Caption;
FViewer.GPSItems.Add(gpsObj, _CLICKED_POINTS_);
end;
UpdateButtonStates;
end;
end;
procedure TGPSListViewer.BtnGoToPointClick(Sender: TObject);
var
gpsPt: TGpsPoint;
gpsObj: TGpsObj;
begin
if ListView.ItemIndex > -1 then begin
gpsObj := FList[ListView.ItemIndex];
if gpsObj is TGpsPoint then begin
gpsPt := TGpsPoint(gpsObj);
if Assigned(FViewer) then FViewer.Center := gpsPt.RealPoint;
end;
end;
end;
procedure TGPSListViewer.ListViewDblClick(Sender: TObject);
begin
BtnGotoPointClick(nil);
end;
procedure TGPSListViewer.ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
UpdateButtonStates;
end;
procedure TGPSListViewer.SetViewer(AValue: TMapView);
begin
if FViewer = AValue then
exit;
FViewer := AValue;
Populate;
end;
procedure TGPSListViewer.UpdateButtonStates;
begin
BtnGotoPoint.Enabled := ListView.ItemIndex > -1;
BtnDeletePoint.Enabled := ListView.ItemIndex > -1;
end;
end.

View File

@ -9,7 +9,7 @@ object MainForm: TMainForm
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
LCLVersion = '1.9.0.0' LCLVersion = '2.1.0.0'
object Panel1: TPanel object Panel1: TPanel
Left = 632 Left = 632
Height = 545 Height = 545
@ -345,6 +345,26 @@ object MainForm: TMainForm
OnClick = BtnGoToClick OnClick = BtnGoToClick
TabOrder = 9 TabOrder = 9
end end
object Label1: TLabel
Left = 8
Height = 48
Top = 400
Width = 219
AutoSize = False
Caption = 'Click with right mouse button to add a GPS point.'
ParentColor = False
WordWrap = True
end
object Button1: TButton
Left = 8
Height = 25
Top = 368
Width = 92
AutoSize = True
Caption = 'GPS points...'
OnClick = Button1Click
TabOrder = 10
end
end end
object MapView: TMapView object MapView: TMapView
Left = 0 Left = 0
@ -361,6 +381,7 @@ object MainForm: TMainForm
Zoom = 0 Zoom = 0
OnZoomChange = MapViewZoomChange OnZoomChange = MapViewZoomChange
OnMouseMove = MapViewMouseMove OnMouseMove = MapViewMouseMove
OnMouseUp = MapViewMouseUp
end end
object GeoNames: TMVGeoNames object GeoNames: TMVGeoNames
OnNameFound = GeoNamesNameFound OnNameFound = GeoNamesNameFound

View File

@ -16,6 +16,7 @@ type
TMainForm = class(TForm) TMainForm = class(TForm)
BtnSearch: TButton; BtnSearch: TButton;
BtnGoTo: TButton; BtnGoTo: TButton;
Button1: TButton;
CbDoubleBuffer: TCheckBox; CbDoubleBuffer: TCheckBox;
CbFoundLocations: TComboBox; CbFoundLocations: TComboBox;
CbLocations: TComboBox; CbLocations: TComboBox;
@ -25,6 +26,7 @@ type
GbCenterCoords: TGroupBox; GbCenterCoords: TGroupBox;
InfoCenterLatitude: TLabel; InfoCenterLatitude: TLabel;
InfoCenterLongitude: TLabel; InfoCenterLongitude: TLabel;
Label1: TLabel;
Label8: TLabel; Label8: TLabel;
LblCenterLatitude: TLabel; LblCenterLatitude: TLabel;
LblPositionLongitude: TLabel; LblPositionLongitude: TLabel;
@ -40,6 +42,7 @@ type
ZoomTrackBar: TTrackBar; ZoomTrackBar: TTrackBar;
procedure BtnGoToClick(Sender: TObject); procedure BtnGoToClick(Sender: TObject);
procedure BtnSearchClick(Sender: TObject); procedure BtnSearchClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure CbDoubleBufferChange(Sender: TObject); procedure CbDoubleBufferChange(Sender: TObject);
procedure CbFoundLocationsDrawItem(Control: TWinControl; Index: Integer; procedure CbFoundLocationsDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState); ARect: TRect; State: TOwnerDrawState);
@ -52,6 +55,8 @@ type
const ALoc: TRealPoint); const ALoc: TRealPoint);
procedure MapViewMouseMove(Sender: TObject; Shift: TShiftState; X, procedure MapViewMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); Y: Integer);
procedure MapViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MapViewZoomChange(Sender: TObject); procedure MapViewZoomChange(Sender: TObject);
procedure ZoomTrackBarChange(Sender: TObject); procedure ZoomTrackBarChange(Sender: TObject);
@ -74,7 +79,8 @@ implementation
{$R *.lfm} {$R *.lfm}
uses uses
LCLType, IniFiles, Math; LCLType, IniFiles, Math, mvGpsObj, mvExtraData,
gpslistform;
type type
TLocationParam = class TLocationParam = class
@ -110,6 +116,19 @@ begin
UpdateLocationHistory(CbLocations.Text); UpdateLocationHistory(CbLocations.Text);
end; end;
procedure TMainForm.Button1Click(Sender: TObject);
var
F: TGpsListViewer;
begin
F := TGpsListViewer.Create(nil);
try
F.MapViewer := MapView;
F.ShowModal;
finally
F.Free;
end;
end;
procedure TMainForm.BtnGoToClick(Sender: TObject); procedure TMainForm.BtnGoToClick(Sender: TObject);
var var
s: String; s: String;
@ -245,6 +264,23 @@ begin
InfoCenterLatitude.Caption := Format('%.6f°', [rPt.Lat]); InfoCenterLatitude.Caption := Format('%.6f°', [rPt.Lat]);
end; end;
procedure TMainForm.MapViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
rPt: TRealPoint;
gpsPt: TGpsPoint;
gpsName: String;
begin
if (Button = mbRight) then begin
if not InputQuery('Name of GPS location', 'Please enter name', gpsName) then
exit;
rPt := MapView.ScreenToLonLat(Point(X, Y));
gpsPt := TGpsPoint.CreateFrom(rPt);
gpsPt.Name := gpsName;
MapView.GpsItems.Add(gpsPt, _CLICKED_POINTS_);
end;
end;
procedure TMainForm.MapViewZoomChange(Sender: TObject); procedure TMainForm.MapViewZoomChange(Sender: TObject);
begin begin
ZoomTrackbar.Position := MapView.Zoom; ZoomTrackbar.Position := MapView.Zoom;

View File

@ -112,12 +112,12 @@ type
TGPSObjectList = Class(TGPSObj) TGPSObjectList = Class(TGPSObj)
private private
Crit:TCriticalSection; Crit: TCriticalSection;
FPending : TObjectList; FPending: TObjectList;
FRefCount : integer; FRefCount: integer;
FOnModified: TModifiedEvent; FOnModified: TModifiedEvent;
FUpdating : integer; FUpdating: integer;
FItems : TGPSObjList; FItems: TGPSObjList;
function Getcount: integer; function Getcount: integer;
protected protected
Procedure _Delete(Idx : Integer;out DelLst : TGPSObjList); Procedure _Delete(Idx : Integer;out DelLst : TGPSObjList);