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"/>
|
<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)"/>
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
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
|
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
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user