You've already forked lazarus-ccr
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:
@ -32,7 +32,7 @@
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Units Count="3">
|
||||
<Unit0>
|
||||
<Filename Value="MapViewer_Demo.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@ -45,13 +45,20 @@
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Main"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="gpslistform.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="GPSListViewer"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
</Unit2>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="MapViewer_Demo"/>
|
||||
<Filename Value="bin\$(TargetCPU)-$(TargetOS)\MapViewer_Demo"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
|
@ -7,7 +7,7 @@ uses
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Main
|
||||
Forms, Main, gpslistform
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
@ -17,6 +17,7 @@ begin
|
||||
Application.Scaled:=True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.CreateForm(TGPSListViewer, GPSListViewer);
|
||||
Application.Run;
|
||||
end.
|
||||
|
||||
|
251
components/lazmapviewer/example/gpslistform.lfm
Normal file
251
components/lazmapviewer/example/gpslistform.lfm
Normal 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
|
173
components/lazmapviewer/example/gpslistform.pas
Normal file
173
components/lazmapviewer/example/gpslistform.pas
Normal 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.
|
||||
|
@ -9,7 +9,7 @@ object MainForm: TMainForm
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnShow = FormShow
|
||||
LCLVersion = '1.9.0.0'
|
||||
LCLVersion = '2.1.0.0'
|
||||
object Panel1: TPanel
|
||||
Left = 632
|
||||
Height = 545
|
||||
@ -345,6 +345,26 @@ object MainForm: TMainForm
|
||||
OnClick = BtnGoToClick
|
||||
TabOrder = 9
|
||||
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
|
||||
object MapView: TMapView
|
||||
Left = 0
|
||||
@ -361,6 +381,7 @@ object MainForm: TMainForm
|
||||
Zoom = 0
|
||||
OnZoomChange = MapViewZoomChange
|
||||
OnMouseMove = MapViewMouseMove
|
||||
OnMouseUp = MapViewMouseUp
|
||||
end
|
||||
object GeoNames: TMVGeoNames
|
||||
OnNameFound = GeoNamesNameFound
|
||||
|
@ -16,6 +16,7 @@ type
|
||||
TMainForm = class(TForm)
|
||||
BtnSearch: TButton;
|
||||
BtnGoTo: TButton;
|
||||
Button1: TButton;
|
||||
CbDoubleBuffer: TCheckBox;
|
||||
CbFoundLocations: TComboBox;
|
||||
CbLocations: TComboBox;
|
||||
@ -25,6 +26,7 @@ type
|
||||
GbCenterCoords: TGroupBox;
|
||||
InfoCenterLatitude: TLabel;
|
||||
InfoCenterLongitude: TLabel;
|
||||
Label1: TLabel;
|
||||
Label8: TLabel;
|
||||
LblCenterLatitude: TLabel;
|
||||
LblPositionLongitude: TLabel;
|
||||
@ -40,6 +42,7 @@ type
|
||||
ZoomTrackBar: TTrackBar;
|
||||
procedure BtnGoToClick(Sender: TObject);
|
||||
procedure BtnSearchClick(Sender: TObject);
|
||||
procedure Button1Click(Sender: TObject);
|
||||
procedure CbDoubleBufferChange(Sender: TObject);
|
||||
procedure CbFoundLocationsDrawItem(Control: TWinControl; Index: Integer;
|
||||
ARect: TRect; State: TOwnerDrawState);
|
||||
@ -52,6 +55,8 @@ type
|
||||
const ALoc: TRealPoint);
|
||||
procedure MapViewMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||||
Y: Integer);
|
||||
procedure MapViewMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure MapViewZoomChange(Sender: TObject);
|
||||
procedure ZoomTrackBarChange(Sender: TObject);
|
||||
|
||||
@ -74,7 +79,8 @@ implementation
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
LCLType, IniFiles, Math;
|
||||
LCLType, IniFiles, Math, mvGpsObj, mvExtraData,
|
||||
gpslistform;
|
||||
|
||||
type
|
||||
TLocationParam = class
|
||||
@ -110,6 +116,19 @@ begin
|
||||
UpdateLocationHistory(CbLocations.Text);
|
||||
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);
|
||||
var
|
||||
s: String;
|
||||
@ -245,6 +264,23 @@ begin
|
||||
InfoCenterLatitude.Caption := Format('%.6f°', [rPt.Lat]);
|
||||
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);
|
||||
begin
|
||||
ZoomTrackbar.Position := MapView.Zoom;
|
||||
|
@ -112,12 +112,12 @@ type
|
||||
|
||||
TGPSObjectList = Class(TGPSObj)
|
||||
private
|
||||
Crit:TCriticalSection;
|
||||
FPending : TObjectList;
|
||||
FRefCount : integer;
|
||||
Crit: TCriticalSection;
|
||||
FPending: TObjectList;
|
||||
FRefCount: integer;
|
||||
FOnModified: TModifiedEvent;
|
||||
FUpdating : integer;
|
||||
FItems : TGPSObjList;
|
||||
FUpdating: integer;
|
||||
FItems: TGPSObjList;
|
||||
function Getcount: integer;
|
||||
protected
|
||||
Procedure _Delete(Idx : Integer;out DelLst : TGPSObjList);
|
||||
|
Reference in New Issue
Block a user