Addition for grayline to show LongPath

- Grayline map can now show great circle short- and Long path for qso.
	  User can select Short Path or long Path or both together.
	- Plotting steps can be fixed via Preferences/Program. How ever default
	  values seems to work for most of cases. But as there are 10^N different
	  plotting cases user can now play with steps.
	- Help files are fixed

Squashed commit of the following:

commit bd7ff20bec3ab90075dbe8932b37a6995dbf6e4a
Author: OH1KH <oh1kh@sral.fi>
Date:   Mon Feb 21 18:22:07 2022 +0200

    fixed prefernces help

commit 98793175b21fef6842796f68c39f556e82dbc7c2
Author: OH1KH <oh1kh@sral.fi>
Date:   Mon Feb 21 18:11:14 2022 +0200

    Fixed preferences

commit 04ef090f26a94a1fd3c482f04ecaefb905f1c024
Author: OH1KH <oh1kh@sral.fi>
Date:   Mon Feb 21 18:03:26 2022 +0200

    adjustable plot stepping

commit 65503ee718dec80cf75228b82d64ab0d50c157eb
Author: OH1KH <oh1kh@sral.fi>
Date:   Sun Feb 20 14:06:04 2022 +0200

    fixed help

commit c3ada778b769d5d6b7e5d81ddbbdc25a9b456622
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Feb 19 15:32:18 2022 +0200

    small fixes

commit bf7c2dbf42f24a24102f723e5e2cb4219a07add3
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Feb 19 15:21:15 2022 +0200

    Works now. TODO check code clean, fix help, test

commit be33d8fc81c7f2cfaae04ec1ad2dab3ce91822ff
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Feb 19 12:33:28 2022 +0200

    SP or LP plotting works and can be selected. TODO show both SP&LP together

commit dcd59150546daed974390f205980bc075c62adff
Author: OH1KH <oh1kh@sral.fi>
Date:   Sat Feb 19 09:38:52 2022 +0200

    Now can plot also LongPath
This commit is contained in:
OH1KH 2022-02-21 18:28:48 +02:00
parent 0e9dcdf767
commit 76c414e2f0
11 changed files with 554 additions and 207 deletions

View File

@ -101,6 +101,9 @@
<strong>Grayline offset</strong> - sometimes the gray line position is not accurate. <strong>Grayline offset</strong> - sometimes the gray line position is not accurate.
You can set your own correction. You can set your own correction.
<br><br> <br><br>
<strong>Great circle </strong> Short and Long path line plotting may be adjusted here. Plotting step is decimal degrees &gt; 0.0 and &lt; 40.0. In polar areas where distance/degree is smaller this value is divided by integer divisor value &gt; 0 and &lt; 40.
<br>You may test different values if you like. If Columns are left empty the default values 1.5 and 10 are replaced.
<br><br>
<strong>Check for newer version of DXCC tables after program startup</strong></a> - if checked, <strong>Check for newer version of DXCC tables after program startup</strong></a> - if checked,
CQRLOG will check if any update of the country files is available. If a new version is found, CQRLOG will check if any update of the country files is available. If a new version is found,
an update will be performed, however you are asked first if you want this update.<br><br> an update will be performed, however you are asked first if you want this update.<br><br>

View File

@ -37,17 +37,16 @@
<li> <b>Connect to RBN</b> If autoconnect is not seleceted, see: <a href="h1.html#ch6">RBN support</a>, the connect and disconnect to RBN can be done here.</li> <li> <b>Connect to RBN</b> If autoconnect is not seleceted, see: <a href="h1.html#ch6">RBN support</a>, the connect and disconnect to RBN can be done here.</li>
<li> <b>Link to RBNMonitor</b> This is alternative to RBN connection and will use same connection as RBN monitor window has (if connected).</li> <li> <b>Link to RBNMonitor</b> This is alternative to RBN connection and will use same connection as RBN monitor window has (if connected).</li>
<li> <b>Show statusbar</b> Shows connection or linking state</li> <li> <b>Show statusbar</b> Shows connection or linking state</li>
<li> <b>Show GreatCirclePath</b> By default Grayline map will show straight line from your station (from your locator defined) to station you enter to NewQSO/callsign. <li> <b>Show ShortPath</b> By default Grayline map will show straight line from your station (from your locator defined) to station you enter to NewQSO/callsign.
With this selection you can switch the straight line to plotted great circle path. </li> With this selection you can switch the straight line to plotted great circle short path. </li>
<li> <b>Show LongPath</b> As another option you can select great circle longpath. This can be selected with, or without short path.
<li> <b>Clear all spots</b> Clears all RBN spots from map. <li> <b>Clear all spots</b> Clears all RBN spots from map.
<br><b> Note:</b> Dots also depend on the band, if you change band, dots will always be deleted. All data is band related.</li> <br><b> Note:</b> Dots also depend on the band, if you change band, dots will always be deleted. All data is band related.</li>
<li> <b>Watch for</b> Opens an edit window where you can change callsign or prefix watched without opening preferences. see: <a href="h1.html#ch6">RBN support</a></li> <li> <b>Watch for</b> Opens an edit window where you can change callsign or prefix watched without opening preferences. see: <a href="h1.html#ch6">RBN support</a></li>
</ul> </ul>
<img src="img/h1114b.png"><br><br>
<img src="img/h1114c.png"><br><br>
<img src="img/h1114d.png"><br><br> <img src="img/h1114d.png"><br><br>
<img src="img/h1114b.png"><br><br>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

@ -196,9 +196,13 @@ object frmGrayline: TfrmGrayline
object pumShowStatusbar: TMenuItem object pumShowStatusbar: TMenuItem
Action = acShowStatusBar Action = acShowStatusBar
end end
object pumShowGreatCircle: TMenuItem object pumShowShortPath: TMenuItem
Caption = 'Show GreatCirclePath' Caption = 'Show ShortPath'
OnClick = pumShowGreatCircleClick OnClick = pumShowShortPathClick
end
object pumShowLongPath: TMenuItem
Caption = 'Show LongPath'
OnClick = pumShowLongPathClick
end end
object pumMnuLine2: TMenuItem object pumMnuLine2: TMenuItem
Caption = '-' Caption = '-'

View File

@ -32,7 +32,8 @@ type
acConnect : TAction; acConnect : TAction;
acShowStatusBar : TAction; acShowStatusBar : TAction;
acLinkToRbnMonitor: TAction; acLinkToRbnMonitor: TAction;
pumShowGreatCircle: TMenuItem; pumShowLongPath: TMenuItem;
pumShowShortPath: TMenuItem;
pumMnuLine2: TMenuItem; pumMnuLine2: TMenuItem;
pumClearAllSpots: TMenuItem; pumClearAllSpots: TMenuItem;
pumWatchFor: TMenuItem; pumWatchFor: TMenuItem;
@ -59,7 +60,8 @@ type
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure popGrayLinePopup(Sender: TObject); procedure popGrayLinePopup(Sender: TObject);
procedure pumClearAllSpotsClick(Sender: TObject); procedure pumClearAllSpotsClick(Sender: TObject);
procedure pumShowGreatCircleClick(Sender: TObject); procedure pumShowLongPathClick(Sender: TObject);
procedure pumShowShortPathClick(Sender: TObject);
procedure pumWatchForClick(Sender: TObject); procedure pumWatchForClick(Sender: TObject);
procedure sbtnGrayLineClick(Sender : TObject); procedure sbtnGrayLineClick(Sender : TObject);
procedure tmrAutoConnectTimer(Sender : TObject); procedure tmrAutoConnectTimer(Sender : TObject);
@ -78,7 +80,7 @@ type
procedure lReceive(aSocket: TLSocket); procedure lReceive(aSocket: TLSocket);
function ConnectToRBN : Boolean; function ConnectToRBN : Boolean;
procedure CalculateBearing(lat0, long0, lat1, long1: extended; var bearing: extended);
public public
RBNSpotList : array[1..MAX_ITEMS] of TRBNList; RBNSpotList : array[1..MAX_ITEMS] of TRBNList;
band : String; band : String;
@ -87,7 +89,7 @@ type
pfx : String; pfx : String;
rbn_status : String; rbn_status : String;
procedure kresli; procedure kresli;
procedure PlotGreatCircleArcLine(longitude1,latitude1,longitude2,latitude2:extended); procedure PlotGreatCircleArcLine(longitude1,latitude1,longitude2,latitude2:extended; LongP:boolean);
procedure SavePosition; procedure SavePosition;
procedure SynRBN; procedure SynRBN;
function GetEmptyPos : Word; function GetEmptyPos : Word;
@ -306,7 +308,8 @@ procedure TfrmGrayline.FormShow(Sender: TObject);
begin begin
dmUtils.LoadWindowPos(frmGrayline); dmUtils.LoadWindowPos(frmGrayline);
sbGrayLine.Visible := cqrini.ReadBool('Grayline','Statusbar',True); sbGrayLine.Visible := cqrini.ReadBool('Grayline','Statusbar',True);
pumShowGreatCircle.Checked:= cqrini.ReadBool('Grayline','GreatCircle',False); pumShowShortPath.Checked := cqrini.ReadBool('Grayline','ShortPath',False);
pumShowLongPath.Checked := cqrini.ReadBool('Grayline','LongPath',False);
acShowStatusBar.Checked := sbGrayLine.Visible; acShowStatusBar.Checked := sbGrayLine.Visible;
rbn_status :='Disconnected'; rbn_status :='Disconnected';
sbGrayLine.SimpleText := rbn_status; sbGrayLine.SimpleText := rbn_status;
@ -390,10 +393,16 @@ begin
tmrSpotDots.Enabled:=true; tmrSpotDots.Enabled:=true;
end; end;
procedure TfrmGrayline.pumShowGreatCircleClick(Sender: TObject); procedure TfrmGrayline.pumShowLongPathClick(Sender: TObject);
begin begin
pumShowGreatCircle.Checked:= not pumShowGreatCircle.Checked; pumShowLongPath.Checked:= not pumShowLongPath.Checked;
cqrini.WriteBool('Grayline','GreatCircle',pumShowGreatCircle.Checked); cqrini.WriteBool('Grayline','LongPath',pumShowLongPath.Checked);
end;
procedure TfrmGrayline.pumShowShortPathClick(Sender: TObject);
begin
pumShowShortPath.Checked:= not pumShowShortPath.Checked;
cqrini.WriteBool('Grayline','ShortPath',pumShowShortPath.Checked);
end; end;
procedure TfrmGrayline.pumWatchForClick(Sender: TObject); procedure TfrmGrayline.pumWatchForClick(Sender: TObject);
@ -497,70 +506,73 @@ begin
s := ''; s := '';
d := ''; d := '';
dmUtils.CoordinateFromLocator(dmUtils.CompleteLoc(my_loc),lat,long); dmUtils.CoordinateFromLocator(dmUtils.CompleteLoc(my_loc),lat,long);
if pumShowGreatCircle.Checked then if pumShowShortPath.Checked or pumShowLongPath.Checked then
PlotGreatCircleArcLine(long,lat,long1,lat1) Begin
if pumShowShortPath.Checked then
PlotGreatCircleArcLine(long,lat,long1,lat1,false);
if pumShowLongPath.Checked then
PlotGreatCircleArcLine(long,lat,long1,lat1,true);
end
else else
ob^.jachcucaru(true,long,lat*-1,long1,lat1*-1); ob^.jachcucaru(true,long,lat*-1,long1,lat1*-1);
Refresh Refresh
end; end;
procedure TfrmGrayline.PlotGreatCircleArcLine(longitude1,latitude1,longitude2,latitude2:extended);
{ Ref: http://www.movable-type.co.uk/scripts/latlong.html }
Const procedure TfrmGrayline.CalculateBearing(lat0, long0, lat1, long1: extended; var bearing: extended);
Basestep = 0.0174532925; //1 degree in radians
PolarStep = 0.00174532925; // base/10
var
lat1,lat2,lon1,lon2,
latFrom,lonFrom,
step,
dist,
bearing : extended;
CountLimit : integer;
BearingIsPositive : boolean;
//-------------------------------------------------------------------
procedure LatLongToDistance(const lat0, long0, lat1, long1: extended;
var dist, bearing: extended);
var var
R: double = 6371000; // earth radius in meters x, y: extended;
dlat, dlong, slat, slong, a, c, x, y: double;
begin begin
// dist
dlat := lat1 - lat0;
dlong := long1 - long0;
slat := Sin(0.5 * dlat);
slong := Sin(0.5 * dlong);
a := slat * slat + Cos(lat0) * Cos(lat1) * slong * slong;
c := 2.0 * ArcTan2(Sqrt(a), Sqrt(1.0-a));
dist := R * c;
// bearing // bearing
y := Sin(long1 - long0) * Cos(lat1); y := Sin(long1 - long0) * Cos(lat1);
x := Cos(lat0) * Sin(lat1) - Sin(lat0) * Cos(lat1) * Cos(long1 - long0); x := Cos(lat0) * Sin(lat1) - Sin(lat0) * Cos(lat1) * Cos(long1 - long0);
bearing := ArcTan2(y, x); bearing := ArcTan2(y, x);
end; end;
//-------------------------------------------------------------------
procedure TfrmGrayline.PlotGreatCircleArcLine(longitude1,latitude1,longitude2,latitude2:extended; LongP:boolean);
{ Ref: http://www.movable-type.co.uk/scripts/latlong.html }
Const
MEC = 170 *pi/180; // Map image horizontal Edge Crossing "no print" limit in degrees (converted to radians)
var
lat1,lat2,lon1,lon2,
latFrom,lonFrom,
BaseStep,step, // degree steps (converted to radians) for path line
PolarStep, // steps in polar regions where distances/degrees are smaller
bearing, oldbearing : extended;
CountLimit,
LP : integer; //LongPath instead of ShortPath
Begin Begin
BaseStep := cqrini.ReadFloat('Program', 'GraylineGCstep',15E-001) * pi/180;
PolarStep := Basestep/cqrini.ReadInteger('Program', 'GraylineGCstep',10);
ob^.GC_line_clear;
if LocalDbg then if LocalDbg then
begin begin
writeln ('-------------------------------------------------------------------'); writeln ('-------------------------------------------------------------------');
writeln ('Start:',round(latitude1),' ',round(longitude1),' ',round(latitude2),' ',round(longitude2)); writeln ('Start:',round(latitude1),' ',round(longitude1),' ',round(latitude2),' ',round(longitude2));
end; end;
step := BaseStep;
dist :=0;
bearing :=0;
step := BaseStep;
if LongP then
LP:=1
else
LP:=0;
ob^.GC_line_clear(LP);
longitude1 := degToRad(longitude1); longitude1 := degToRad(longitude1);
latitude1 := degToRad(latitude1); latitude1 := degToRad(latitude1);
longitude2 := degToRad(longitude2); longitude2 := degToRad(longitude2);
latitude2 := degToRad(latitude2); latitude2 := degToRad(latitude2);
LatLongToDistance(latitude1, longitude1, latitude2, longitude2, dist, bearing); CalculateBearing(latitude1, longitude1, latitude2, longitude2, bearing);
BearingIsPositive := (bearing > 0); bearing:=bearing+LP*pi;
oldbearing:=bearing;
CountLimit:=ob^.GC_Points_Max; CountLimit:=ob^.GC_Points_Max;
if LocalDbg then
writeln ('Bearing:',round(radTodeg(bearing)));
while (CountLimit > 0) do while (CountLimit > 0) do
Begin Begin
latFrom:=latitude1; latFrom:=latitude1;
@ -572,14 +584,40 @@ while (CountLimit > 0) do
else else
step:=BaseStep; step:=BaseStep;
LatLongToDistance(latFrom, lonFrom, latitude2, longitude2, dist, bearing); if LocalDbg then
if ((bearing > 0) <> BearingIsPositive) then CountLimit:=0;; writeln (LineEnding,'FROM (',Round(RadToDeg(latFrom)),' ',Round(RadToDeg(lonFrom)),')',' To: ',Round(RadToDeg(latitude2)),' ',Round(RadToDeg(longitude2)));
CalculateBearing(latFrom, lonFrom, latitude2, longitude2,bearing);
bearing:=bearing+LP*pi; //makes LongPath if LP=1 counting plot points in "wrong direction"
if abs(oldbearing -bearing) > (pi/2) then
Begin
if LocalDbg then
Begin
writeln('Obe:',round(radtodeg(oldbearing)));
writeln('Nbe:',round(radtodeg(bearing)));
end;
if LP = 1 then
begin
if LocalDbg then
writeln ('Release LP value in count round ',CountLimit);
LP:=0; //we are on globe's opposite side of target. Release LP and now on calculate rest via ShortPath
CalculateBearing(latFrom, lonFrom, latitude2, longitude2, bearing);
end
else
begin
if LocalDbg then
writeln ('Stop counting in round ',CountLimit);
CountLimit:=0;
end;
end;
if LocalDbg then if LocalDbg then
writeln ('Dist:',round(dist * 0.001) ,' Bearing:',round(radTodeg(bearing))); writeln ('Bearing:',round(radTodeg(bearing)));
longitude1 := longitude1 + (sin(bearing) * step) / cos(latitude1); longitude1 := longitude1 + (sin(bearing) * step) / cos(latitude1);
latitude1 := latitude1 + (cos(bearing) * step); latitude1 := latitude1 + (cos(bearing) * step);
//swap on horizontal or veritcal edges
if longitude1 < -Pi then longitude1 := 2*Pi+longitude1; if longitude1 < -Pi then longitude1 := 2*Pi+longitude1;
if longitude1 > Pi then longitude1 := -2*Pi+longitude1; if longitude1 > Pi then longitude1 := -2*Pi+longitude1;
@ -587,13 +625,20 @@ while (CountLimit > 0) do
if latitude1 < -Pi/2 then latitude1:= -Pi/2 - (latitude1+Pi/2); if latitude1 < -Pi/2 then latitude1:= -Pi/2 - (latitude1+Pi/2);
if LocalDbg then if LocalDbg then
writeln ('To: ',Round(RadToDeg(latitude1)),' ',Round(RadToDeg(longitude1)),' (',Round(RadToDeg(latFrom)),' ',Round(RadToDeg(lonFrom)),')'); writeln ('From (',Round(RadToDeg(latFrom)),' ',Round(RadToDeg(lonFrom)),')',' To: ',Round(RadToDeg(latitude1)),' ',Round(RadToDeg(longitude1)));
// 170 degrees = 2,96705972839 rad //map image horizontal edge crossing check. Allow plot if we are not in edge of image.
if not (((lonFrom > 2.96705972839) and (longitude1 < -2.96705972839)) //right crossing if not (((lonFrom > MEC) and (longitude1 < -MEC)) //right crossing
or ((lonFrom < -2.96705972839) and (longitude1 > 2.96705972839)) //left crossing or ((lonFrom < -MEC) and (longitude1 > MEC)) //left crossing
) then ) then
ob^.GC_line_part(RadToDeg(lonFrom),RadToDeg(latFrom)*-1,RadToDeg(longitude1),RadToDeg(latitude1)*-1); begin
if not LongP then
ob^.GC_line_part(RadToDeg(lonFrom),RadToDeg(latFrom)*-1,RadToDeg(longitude1),RadToDeg(latitude1)*-1)
else
ob^.GC_Lline_part(RadToDeg(lonFrom),RadToDeg(latFrom)*-1,RadToDeg(longitude1),RadToDeg(latitude1)*-1)
end;
oldbearing:=bearing;
end; end;
end; end;

View File

@ -25,97 +25,144 @@ object frmPreferences: TfrmPreferences
Width = 697 Width = 697
ActivePage = tabProgram ActivePage = tabProgram
Align = alClient Align = alClient
TabIndex = 4 TabIndex = 0
TabOrder = 0 TabOrder = 0
OnChange = pgPreferencesChange OnChange = pgPreferencesChange
object tabProgram: TTabSheet object tabProgram: TTabSheet
Caption = 'Program' Caption = 'Program'
ClientHeight = 672 ClientHeight = 650
ClientWidth = 687 ClientWidth = 700
object Label60: TLabel object lblWebBrowser: TLabel
Left = 364 AnchorSideLeft.Control = gbInternet
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = rgStatistics
AnchorSideTop.Side = asrBottom
Left = 350
Height = 17 Height = 17
Top = 91 Top = 78
Width = 248 Width = 249
BorderSpacing.Left = 3
BorderSpacing.Top = 3
Caption = 'Web browser for cqrlog (if not default)' Caption = 'Web browser for cqrlog (if not default)'
ParentColor = False ParentColor = False
end end
object GroupBox2: TGroupBox object gbInternet: TGroupBox
Left = 14 AnchorSideLeft.Control = tabProgram
Height = 137 AnchorSideTop.Control = tabProgram
Left = 6
Height = 129
Top = 3 Top = 3
Width = 341 Width = 341
BorderSpacing.Left = 6
BorderSpacing.Top = 3
Caption = ' Internet connection ' Caption = ' Internet connection '
ClientHeight = 111 ClientHeight = 111
ClientWidth = 335 ClientWidth = 339
TabOrder = 0 TabOrder = 0
object Label12: TLabel object lblintProxy: TLabel
AnchorSideTop.Control = edtProxy
AnchorSideTop.Side = asrCenter
Left = 7 Left = 7
Height = 17 Height = 17
Top = 24 Top = 24
Width = 43 Width = 40
Caption = 'Proxy:' Caption = 'Proxy:'
ParentColor = False ParentColor = False
end end
object Label13: TLabel object lblIntPort: TLabel
Left = 192 AnchorSideLeft.Control = lblIntPasswd
AnchorSideTop.Control = edtPort
AnchorSideTop.Side = asrCenter
Left = 173
Height = 17 Height = 17
Top = 24 Top = 24
Width = 34 Width = 30
Caption = 'Port:' Caption = 'Port:'
ParentColor = False ParentColor = False
end end
object Label14: TLabel object lblIntUser: TLabel
AnchorSideLeft.Control = lblintProxy
AnchorSideTop.Control = edtUser
AnchorSideTop.Side = asrCenter
Left = 7 Left = 7
Height = 17 Height = 17
Top = 69 Top = 67
Width = 35 Width = 34
Caption = 'User:' Caption = 'User:'
ParentColor = False ParentColor = False
end end
object Label19: TLabel object lblIntPasswd: TLabel
Left = 160 AnchorSideTop.Control = edtPasswd
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = edtPasswd
Left = 173
Height = 17 Height = 17
Top = 69 Top = 67
Width = 69 Width = 66
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Password:' Caption = 'Password:'
ParentColor = False ParentColor = False
end end
object edtProxy: TEdit object edtProxy: TEdit
Left = 52 AnchorSideLeft.Control = lblintProxy
Height = 25 AnchorSideLeft.Side = asrBottom
Top = 20 AnchorSideTop.Control = gbInternet
Left = 53
Height = 34
Top = 15
Width = 100 Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 15
TabOrder = 0 TabOrder = 0
end end
object edtPort: TEdit object edtPort: TEdit
Left = 240 AnchorSideTop.Control = edtProxy
Height = 25 AnchorSideRight.Control = gbInternet
Top = 20 AnchorSideRight.Side = asrBottom
Left = 245
Height = 34
Top = 15
Width = 88 Width = 88
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
TabOrder = 1 TabOrder = 1
end end
object edtUser: TEdit object edtUser: TEdit
Left = 52 AnchorSideLeft.Control = edtProxy
Height = 25 AnchorSideTop.Control = edtProxy
Top = 64 AnchorSideTop.Side = asrBottom
Left = 53
Height = 34
Top = 58
Width = 100 Width = 100
BorderSpacing.Top = 9
TabOrder = 2 TabOrder = 2
end end
object edtPasswd: TEdit object edtPasswd: TEdit
Left = 240 AnchorSideTop.Control = edtPort
Height = 25 AnchorSideTop.Side = asrBottom
Top = 64 AnchorSideRight.Control = edtPort
AnchorSideRight.Side = asrBottom
Left = 245
Height = 34
Top = 58
Width = 88 Width = 88
Anchors = [akTop, akRight]
BorderSpacing.Top = 9
TabOrder = 3 TabOrder = 3
end end
end end
object rgStatistics: TRadioGroup object rgStatistics: TRadioGroup
Left = 359 AnchorSideLeft.Control = gbInternet
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbInternet
Left = 350
Height = 72 Height = 72
Top = 3 Top = 3
Width = 136 Width = 136
AutoFill = True AutoFill = True
BorderSpacing.Left = 3
Caption = ' Show statistics in ' Caption = ' Show statistics in '
ChildSizing.LeftRightSpacing = 6 ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6 ChildSizing.TopBottomSpacing = 6
@ -125,8 +172,8 @@ object frmPreferences: TfrmPreferences
ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1 ChildSizing.ControlsPerLine = 1
ClientHeight = 46 ClientHeight = 54
ClientWidth = 130 ClientWidth = 134
Items.Strings = ( Items.Strings = (
'MHz' 'MHz'
'meters' 'meters'
@ -134,195 +181,377 @@ object frmPreferences: TfrmPreferences
TabOrder = 1 TabOrder = 1
end end
object edtWebBrowser: TEdit object edtWebBrowser: TEdit
Left = 360 AnchorSideLeft.Control = lblWebBrowser
Height = 25 AnchorSideTop.Control = lblWebBrowser
Top = 115 AnchorSideTop.Side = asrBottom
Left = 350
Height = 34
Top = 98
Width = 176 Width = 176
BorderSpacing.Top = 3
OnClick = edtWebBrowserClick OnClick = edtWebBrowserClick
OnExit = edtWebBrowserExit OnExit = edtWebBrowserExit
TabOrder = 2 TabOrder = 2
end end
object chkNewDXCCTables: TCheckBox object chkNewDXCCTables: TCheckBox
Left = 14 AnchorSideLeft.Control = gbInternet
AnchorSideTop.Control = gbInternet
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 152 Top = 135
Width = 439 Width = 423
BorderSpacing.Top = 3
Caption = 'Check for newer version of dxcc tables after program startup' Caption = 'Check for newer version of dxcc tables after program startup'
TabOrder = 3 TabOrder = 3
end end
object chkShowDeleted: TCheckBox object chkShowDeleted: TCheckBox
Left = 14 AnchorSideLeft.Control = chkNewDXCCTables
AnchorSideTop.Control = chkNewDOKTables
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 224 Top = 204
Width = 265 Width = 257
Caption = 'Show deleted countries in statistics' Caption = 'Show deleted countries in statistics'
TabOrder = 4 TabOrder = 4
end end
object chkSunUTC: TCheckBox object chkSunUTC: TCheckBox
Left = 14 AnchorSideLeft.Control = chkNewDXCCTables
AnchorSideTop.Control = chkShowDeleted
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 248 Top = 227
Width = 212 Width = 206
Caption = 'Show sunrise/sunset in UTC' Caption = 'Show sunrise/sunset in UTC'
TabOrder = 5 TabOrder = 5
end end
object chkNewQSLTables: TCheckBox object chkNewQSLTables: TCheckBox
Left = 14 AnchorSideLeft.Control = chkNewDXCCTables
AnchorSideTop.Control = chkNewDXCCTables
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 174 Top = 158
Width = 522 Width = 505
Caption = 'Check for newer version of qsl managers database after program startup' Caption = 'Check for newer version of qsl managers database after program startup'
TabOrder = 6 TabOrder = 6
end end
object GroupBox33: TGroupBox object gbOffsets: TGroupBox
Left = 14 AnchorSideLeft.Control = gbInternet
Height = 147 AnchorSideTop.Control = lblQsoColorDate
Top = 379 AnchorSideTop.Side = asrBottom
Left = 6
Height = 195
Top = 327
Width = 626 Width = 626
BorderSpacing.Top = 3
Caption = ' Offsets ' Caption = ' Offsets '
ClientHeight = 121 ClientHeight = 177
ClientWidth = 620 ClientWidth = 624
TabOrder = 7 TabOrder = 7
object Label15: TLabel object lblUtc: TLabel
Left = 15 AnchorSideLeft.Control = edtOffset
AnchorSideLeft.Side = asrCenter
AnchorSideBottom.Control = edtOffset
Left = 469
Height = 17 Height = 17
Top = 50 Top = 3
Width = 28 Width = 27
Anchors = [akLeft, akBottom]
Caption = 'UTC' Caption = 'UTC'
ParentColor = False ParentColor = False
end end
object Label59: TLabel object lblGrayline: TLabel
Left = 352 AnchorSideLeft.Control = LblTimes
AnchorSideTop.Control = chkSysUTC
AnchorSideTop.Side = asrBottom
Left = 6
Height = 17 Height = 17
Top = 10 Top = 64
Width = 56 Width = 59
Caption = 'Grayline' BorderSpacing.Top = 15
Caption = 'Grayline:'
ParentColor = False ParentColor = False
end end
object Label94: TLabel object lblSunRiseSet: TLabel
Left = 72 AnchorSideLeft.Control = edtSunOffset
AnchorSideLeft.Side = asrCenter
AnchorSideBottom.Control = edtSunOffset
Left = 533
Height = 17 Height = 17
Top = 50 Top = 3
Width = 81 Width = 76
Anchors = [akLeft, akBottom]
Caption = 'Sun rise/set' Caption = 'Sun rise/set'
ParentColor = False ParentColor = False
end end
object edtOffset: TEdit object edtOffset: TEdit
Left = 7 AnchorSideLeft.Side = asrBottom
Height = 25 AnchorSideTop.Control = chkSysUTC
Top = 74 AnchorSideTop.Side = asrCenter
Width = 52 AnchorSideRight.Control = edtSunOffset
Left = 452
Height = 34
Top = 20
Width = 60
Anchors = [akTop, akRight]
BorderSpacing.Right = 30
TabOrder = 0 TabOrder = 0
Text = '0' Text = '0'
end end
object edtGrayLineOffset: TEdit object edtGrayLineOffset: TEdit
Left = 352 AnchorSideLeft.Control = lblGraylineHint
Height = 25 AnchorSideLeft.Side = asrCenter
Top = 34 AnchorSideTop.Control = lblGrayline
AnchorSideTop.Side = asrBottom
Left = 128
Height = 34
Top = 81
Width = 50 Width = 50
TabOrder = 1 TabOrder = 1
Text = '0' Text = '0'
end end
object edtSunOffset: TEdit object edtSunOffset: TEdit
Left = 74 AnchorSideLeft.Side = asrBottom
Height = 25 AnchorSideTop.Control = edtOffset
Top = 74 AnchorSideTop.Side = asrCenter
Width = 50 AnchorSideRight.Control = gbOffsets
AnchorSideRight.Side = asrBottom
Left = 542
Height = 34
Top = 20
Width = 58
Anchors = [akTop, akRight]
BorderSpacing.Left = 6
BorderSpacing.Right = 24
TabOrder = 2 TabOrder = 2
Text = '0' Text = '0'
end end
object chkSysUTC: TCheckBox object chkSysUTC: TCheckBox
Left = 7 AnchorSideLeft.Control = gbOffsets
AnchorSideTop.Control = LblTimes
AnchorSideTop.Side = asrBottom
Left = 3
Height = 23 Height = 23
Top = 10 Top = 26
Width = 255 Width = 247
BorderSpacing.Left = 3
BorderSpacing.Top = 6
Caption = 'get UTC time from computer time' Caption = 'get UTC time from computer time'
OnClick = chkSysUTCClick OnClick = chkSysUTCClick
TabOrder = 3 TabOrder = 3
end end
object Label197: TLabel object lblGraylineHint: TLabel
Left = 248 AnchorSideLeft.Control = LblTimes
AnchorSideTop.Control = edtGrayLineOffset
AnchorSideTop.Side = asrBottom
Left = 6
Height = 34 Height = 34
Top = 66 Top = 115
Width = 303 Width = 294
Caption = 'Sometimes grayline is not accurate, you can '#10'enter the correction here (in hours, try -1.25)' Caption = 'Sometimes grayline is not accurate, you can '#10'enter the correction here (in hours, try -1.25)'
ParentColor = False ParentColor = False
end end
object LblTimes: TLabel
AnchorSideLeft.Control = gbOffsets
AnchorSideTop.Control = gbOffsets
Left = 6
Height = 17
Top = 3
Width = 36
BorderSpacing.Left = 6
BorderSpacing.Top = 3
Caption = 'Time:'
ParentColor = False
end
object edtGCStep: TEdit
AnchorSideTop.Control = edtGrayLineOffset
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = edtOffset
AnchorSideRight.Side = asrBottom
Left = 432
Height = 34
Top = 81
Width = 80
Anchors = [akTop, akRight]
OnExit = edtGCStepExit
TabOrder = 4
end
object edtGCPolarDivisor: TEdit
AnchorSideTop.Control = edtGrayLineOffset
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = lblSunRiseSet
AnchorSideRight.Side = asrBottom
Left = 529
Height = 34
Top = 81
Width = 80
Anchors = [akTop, akRight]
NumbersOnly = True
OnExit = edtGCPolarDivisorExit
TabOrder = 5
end
object lblGCStep: TLabel
AnchorSideLeft.Control = edtGCStep
AnchorSideLeft.Side = asrCenter
AnchorSideBottom.Control = edtGCStep
Left = 458
Height = 17
Top = 64
Width = 29
Anchors = [akLeft, akBottom]
Caption = 'Step'
ParentColor = False
end
object lblGCDivisor: TLabel
AnchorSideLeft.Control = edtGCPolarDivisor
AnchorSideLeft.Side = asrCenter
AnchorSideBottom.Control = edtGCPolarDivisor
Left = 546
Height = 17
Top = 64
Width = 46
Anchors = [akLeft, akBottom]
Caption = 'Divisor'
ParentColor = False
end
object lblGCHint: TLabel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edtGCPolarDivisor
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = edtGCPolarDivisor
AnchorSideRight.Side = asrBottom
Left = 313
Height = 51
Top = 115
Width = 296
Anchors = [akTop, akRight]
Caption = 'Great circle plotting setps in desimal degrees'#10'Step divisor is used in polar areas N and S '#10'where distance/degree is smaller'
ParentColor = False
end
object lblGLOffset: TLabel
AnchorSideLeft.Control = edtGrayLineOffset
AnchorSideLeft.Side = asrCenter
AnchorSideBottom.Control = edtGrayLineOffset
Left = 133
Height = 17
Top = 64
Width = 40
Anchors = [akLeft, akBottom]
Caption = 'Offset'
ParentColor = False
end
end end
object chkShowMiles: TCheckBox object chkShowMiles: TCheckBox
Left = 14 AnchorSideLeft.Control = chkNewDXCCTables
AnchorSideTop.Control = chkSunUTC
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 273 Top = 250
Width = 178 Width = 176
Caption = 'Show distance in miles' Caption = 'Show distance in miles'
TabOrder = 8 TabOrder = 8
end end
object btnCfgStorage: TButton object btnCfgStorage: TButton
Left = 14 AnchorSideLeft.Control = gbOffsets
Height = 27 AnchorSideTop.Control = gbOffsets
Top = 539 AnchorSideTop.Side = asrBottom
Width = 222 Left = 6
Height = 33
Top = 528
Width = 213
AutoSize = True AutoSize = True
BorderSpacing.Top = 6
Caption = 'Configuration storage settings' Caption = 'Configuration storage settings'
OnClick = btnCfgStorageClick OnClick = btnCfgStorageClick
TabOrder = 9 TabOrder = 9
end end
object chkQSOColor: TCheckBox object chkQSOColor: TCheckBox
Left = 14 AnchorSideLeft.Control = chkNewDXCCTables
AnchorSideTop.Control = chkShowMiles
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 307 Top = 273
Width = 130 Width = 124
Caption = 'QSO older than' Caption = 'QSO older than'
TabOrder = 10 TabOrder = 10
end end
object edtQSOColorDate: TEdit object edtQSOColorDate: TEdit
Left = 160 AnchorSideLeft.Control = chkQSOColor
Height = 25 AnchorSideLeft.Side = asrBottom
Top = 307 AnchorSideTop.Control = chkQSOColor
Left = 133
Height = 34
Top = 273
Width = 104 Width = 104
BorderSpacing.Left = 3
TabOrder = 11 TabOrder = 11
Text = '2017-04-18' Text = '2017-04-18'
end end
object Label46: TLabel object lblDiffColor: TLabel
Left = 274 AnchorSideLeft.Control = edtQSOColorDate
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edtQSOColorDate
Left = 240
Height = 17 Height = 17
Top = 310 Top = 273
Width = 172 Width = 162
BorderSpacing.Left = 3
Caption = 'show with different color' Caption = 'show with different color'
ParentColor = False ParentColor = False
end end
object pnlQSOColor: TPanel object pnlQSOColor: TPanel
Left = 472 AnchorSideLeft.Control = lblDiffColor
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = lblDiffColor
Left = 405
Height = 42 Height = 42
Top = 298 Top = 273
Width = 106 Width = 106
BorderSpacing.Left = 3
BevelInner = bvRaised BevelInner = bvRaised
TabOrder = 12 TabOrder = 12
OnClick = pnlQSOColorClick OnClick = pnlQSOColorClick
end end
object btnSelectQSOColor: TButton object btnSelectQSOColor: TButton
Left = 587 AnchorSideLeft.Control = pnlQSOColor
Height = 27 AnchorSideLeft.Side = asrBottom
Top = 307 AnchorSideTop.Control = pnlQSOColor
AnchorSideTop.Side = asrCenter
Left = 523
Height = 33
Top = 278
Width = 56 Width = 56
AutoSize = True AutoSize = True
BorderSpacing.Left = 12
Caption = 'Select' Caption = 'Select'
OnClick = btnSelectQSOColorClick OnClick = btnSelectQSOColorClick
TabOrder = 13 TabOrder = 13
end end
object Label47: TLabel object lblQsoColorDate: TLabel
Left = 160 AnchorSideLeft.Control = edtQSOColorDate
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = edtQSOColorDate
AnchorSideTop.Side = asrBottom
Left = 138
Height = 17 Height = 17
Top = 340 Top = 307
Width = 103 Width = 94
Caption = '(YYYY-MM-DD)' Caption = '(YYYY-MM-DD)'
ParentColor = False ParentColor = False
end end
object chkNewDOKTables: TCheckBox object chkNewDOKTables: TCheckBox
Left = 14 AnchorSideLeft.Control = chkNewDXCCTables
AnchorSideTop.Control = chkNewQSLTables
AnchorSideTop.Side = asrBottom
Left = 6
Height = 23 Height = 23
Top = 197 Top = 181
Width = 464 Width = 446
Caption = 'Check for newer version of DOK database after program startup' Caption = 'Check for newer version of DOK database after program startup'
TabOrder = 14 TabOrder = 14
end end

View File

@ -513,6 +513,8 @@ type
DateEditCall: TDateEdit; DateEditCall: TDateEdit;
DateEditLoc: TDateEdit; DateEditLoc: TDateEdit;
dlgColor : TColorDialog; dlgColor : TColorDialog;
edtGCStep: TEdit;
edtGCPolarDivisor: TEdit;
edtUsrBtn: TEdit; edtUsrBtn: TEdit;
edtUsr1R1Name: TEdit; edtUsr1R1Name: TEdit;
edtR2Host: TEdit; edtR2Host: TEdit;
@ -679,7 +681,7 @@ type
GroupBox17: TGroupBox; GroupBox17: TGroupBox;
GroupBox18: TGroupBox; GroupBox18: TGroupBox;
GroupBox19: TGroupBox; GroupBox19: TGroupBox;
GroupBox2: TGroupBox; gbInternet: TGroupBox;
GroupBox20: TGroupBox; GroupBox20: TGroupBox;
GroupBox21: TGroupBox; GroupBox21: TGroupBox;
GroupBox22: TGroupBox; GroupBox22: TGroupBox;
@ -696,7 +698,7 @@ type
grpUsrCmds: TGroupBox; grpUsrCmds: TGroupBox;
GroupBox31: TGroupBox; GroupBox31: TGroupBox;
GroupBox32: TGroupBox; GroupBox32: TGroupBox;
GroupBox33: TGroupBox; gbOffsets: TGroupBox;
GroupBox34: TGroupBox; GroupBox34: TGroupBox;
GroupBox35: TGroupBox; GroupBox35: TGroupBox;
gbeQSL: TGroupBox; gbeQSL: TGroupBox;
@ -732,6 +734,11 @@ type
Label1: TLabel; Label1: TLabel;
Label10: TLabel; Label10: TLabel;
Label108: TLabel; Label108: TLabel;
lblGLOffset: TLabel;
lblGCStep: TLabel;
lblGCDivisor: TLabel;
lblGCHint: TLabel;
LblTimes: TLabel;
Label17: TLabel; Label17: TLabel;
lblUsrBtn: TLabel; lblUsrBtn: TLabel;
lblHost2: TLabel; lblHost2: TLabel;
@ -777,7 +784,7 @@ type
Label117: TLabel; Label117: TLabel;
Label118: TLabel; Label118: TLabel;
Label119: TLabel; Label119: TLabel;
Label12: TLabel; lblintProxy: TLabel;
Label120: TLabel; Label120: TLabel;
Label121: TLabel; Label121: TLabel;
Label122: TLabel; Label122: TLabel;
@ -789,7 +796,7 @@ type
lbleQSLBkg: TLabel; lbleQSLBkg: TLabel;
lblRadio2: TLabel; lblRadio2: TLabel;
lblRotId1: TLabel; lblRotId1: TLabel;
Label13: TLabel; lblIntPort: TLabel;
lblSerialR1Spd: TLabel; lblSerialR1Spd: TLabel;
lblserialR1DataBits: TLabel; lblserialR1DataBits: TLabel;
lblSerialR1Stop: TLabel; lblSerialR1Stop: TLabel;
@ -800,7 +807,7 @@ type
lblSerialR2Spd: TLabel; lblSerialR2Spd: TLabel;
lblSerialR2DataBits: TLabel; lblSerialR2DataBits: TLabel;
lblSerialR2Stop: TLabel; lblSerialR2Stop: TLabel;
Label14: TLabel; lblIntUser: TLabel;
lblSerialR2Hand: TLabel; lblSerialR2Hand: TLabel;
lblSerialR2Parity: TLabel; lblSerialR2Parity: TLabel;
lblSerialR2Dtr: TLabel; lblSerialR2Dtr: TLabel;
@ -811,7 +818,7 @@ type
lblSpeed1: TLabel; lblSpeed1: TLabel;
lblDataBits1: TLabel; lblDataBits1: TLabel;
lblStopBits1: TLabel; lblStopBits1: TLabel;
Label15: TLabel; lblUtc: TLabel;
lblHandshake1: TLabel; lblHandshake1: TLabel;
lblParity1: TLabel; lblParity1: TLabel;
lblDTR1: TLabel; lblDTR1: TLabel;
@ -862,7 +869,7 @@ type
lblK3NGSpeed: TLabel; lblK3NGSpeed: TLabel;
lblK3NGWPM: TLabel; lblK3NGWPM: TLabel;
lblK3NGSerSpeed: TLabel; lblK3NGSerSpeed: TLabel;
Label197: TLabel; lblGraylineHint: TLabel;
Label198: TLabel; Label198: TLabel;
lblHamLibSpeed: TLabel; lblHamLibSpeed: TLabel;
lblHamLibWPM: TLabel; lblHamLibWPM: TLabel;
@ -876,14 +883,14 @@ type
lblDebug : TLabel; lblDebug : TLabel;
Label207: TLabel; Label207: TLabel;
lblwsjtaddr: TLabel; lblwsjtaddr: TLabel;
Label46 : TLabel; lblDiffColor : TLabel;
Label47 : TLabel; lblQsoColorDate : TLabel;
Label48: TLabel; Label48: TLabel;
Label49: TLabel; Label49: TLabel;
Label50: TLabel; Label50: TLabel;
Label51: TLabel; Label51: TLabel;
lbl: TLabel; lbl: TLabel;
Label19: TLabel; lblIntPasswd: TLabel;
Label2: TLabel; Label2: TLabel;
lblExtra: TLabel; lblExtra: TLabel;
lblModelR1: TLabel; lblModelR1: TLabel;
@ -909,13 +916,13 @@ type
Label54: TLabel; Label54: TLabel;
Label55: TLabel; Label55: TLabel;
Label56: TLabel; Label56: TLabel;
Label59: TLabel; lblGrayline: TLabel;
Label61: TLabel; Label61: TLabel;
Label63: TLabel; Label63: TLabel;
Label91: TLabel; Label91: TLabel;
Label92: TLabel; Label92: TLabel;
Label93: TLabel; Label93: TLabel;
Label94: TLabel; lblSunRiseSet: TLabel;
Label95: TLabel; Label95: TLabel;
lblPollR2: TLabel; lblPollR2: TLabel;
lbl1: TLabel; lbl1: TLabel;
@ -952,7 +959,7 @@ type
Label57: TLabel; Label57: TLabel;
Label58: TLabel; Label58: TLabel;
Label6: TLabel; Label6: TLabel;
Label60: TLabel; lblWebBrowser: TLabel;
lblBandMapFont: TLabel; lblBandMapFont: TLabel;
Label62: TLabel; Label62: TLabel;
Label64: TLabel; Label64: TLabel;
@ -1092,6 +1099,8 @@ type
procedure cmbModelRot1Change(Sender: TObject); procedure cmbModelRot1Change(Sender: TObject);
procedure cmbModelRot2Change(Sender: TObject); procedure cmbModelRot2Change(Sender: TObject);
procedure edtAlertCmdExit(Sender: TObject); procedure edtAlertCmdExit(Sender: TObject);
procedure edtGCPolarDivisorExit(Sender: TObject);
procedure edtGCStepExit(Sender: TObject);
procedure edtHtmlFilesClick(Sender: TObject); procedure edtHtmlFilesClick(Sender: TObject);
procedure edtHtmlFilesExit(Sender: TObject); procedure edtHtmlFilesExit(Sender: TObject);
procedure edtImgFilesExit(Sender: TObject); procedure edtImgFilesExit(Sender: TObject);
@ -1226,6 +1235,8 @@ begin
cqrini.WriteInteger('Program', 'Options', pgPreferences.ActivePageIndex); cqrini.WriteInteger('Program', 'Options', pgPreferences.ActivePageIndex);
cqrini.WriteBool('Program', 'BandStatMHz', rgStatistics.ItemIndex = 0); cqrini.WriteBool('Program', 'BandStatMHz', rgStatistics.ItemIndex = 0);
cqrini.WriteFloat('Program', 'GraylineOffset', StrToCurr(edtGrayLineOffset.Text)); cqrini.WriteFloat('Program', 'GraylineOffset', StrToCurr(edtGrayLineOffset.Text));
cqrini.WriteFloat('Program', 'GraylineGCstep',StrToCurr(edtGCStep.Caption));
cqrini.WriteInteger('Program', 'GraylineGCPolarDivisor',StrToInt(edtGCPolarDivisor.Caption));
if edtWebBrowser.Text = '' then edtWebBrowser.Text:= dmUtils.MyDefaultBrowser; //may not be empty string if edtWebBrowser.Text = '' then edtWebBrowser.Text:= dmUtils.MyDefaultBrowser; //may not be empty string
cqrini.WriteString('Program', 'WebBrowser', edtWebBrowser.Text); cqrini.WriteString('Program', 'WebBrowser', edtWebBrowser.Text);
@ -2559,6 +2570,30 @@ begin
// ~ in command causes DXCluster spot flow stop (!?) // ~ in command causes DXCluster spot flow stop (!?)
end; end;
procedure TfrmPreferences.edtGCPolarDivisorExit(Sender: TObject);
var v:integer;
begin
if TryStrToInt(edtGCPolarDivisor.Caption,v) then
begin
if ((v<=0) or (v>40)) then
edtGCPolarDivisor.Caption:='10' //replace with default
end
else
edtGCPolarDivisor.Caption:='10' //replace with default
end;
procedure TfrmPreferences.edtGCStepExit(Sender: TObject);
var v:extended;
begin
if TryStrToFloat(edtGCStep.Caption,v) then
Begin
if ((v<=0) or (v>40)) then
edtGCStep.Caption:='1.5'; //error use default value;
end
else
edtGCStep.Caption:='1.5'; //on convert error use default value;
end;
procedure TfrmPreferences.edtHtmlFilesClick(Sender: TObject); procedure TfrmPreferences.edtHtmlFilesClick(Sender: TObject);
begin begin
if odFindBrowser.Execute then if odFindBrowser.Execute then
@ -2635,6 +2670,7 @@ begin
if not (key in ['0'..'9']) then if not (key in ['0'..'9']) then
key := #0; key := #0;
end; end;
procedure TfrmPreferences.TRXParamsChange(Sender: TObject); procedure TfrmPreferences.TRXParamsChange(Sender: TObject);
begin begin
TRXChanged := True TRXChanged := True
@ -2769,8 +2805,9 @@ begin
edtPasswd.Text := cqrini.ReadString('Program', 'Passwd', ''); edtPasswd.Text := cqrini.ReadString('Program', 'Passwd', '');
edtOffset.Text := CurrToStr(cqrini.ReadFloat('Program', 'offset', 0)); edtOffset.Text := CurrToStr(cqrini.ReadFloat('Program', 'offset', 0));
pgPreferences.ActivePageIndex := cqrini.ReadInteger('Program', 'Options', 0); pgPreferences.ActivePageIndex := cqrini.ReadInteger('Program', 'Options', 0);
edtGrayLineOffset.Text := edtGrayLineOffset.Text := CurrToStr(cqrini.ReadFloat('Program', 'GraylineOffset', 0));
CurrToStr(cqrini.ReadFloat('Program', 'GraylineOffset', 0)); edtGCStep.Caption := CurrToStr(cqrini.ReadFloat('Program', 'GraylineGCstep',15E-001));
edtGCPolarDivisor.Caption := IntToStr(cqrini.ReadInteger('Program', 'GraylineGCPolarDivisor',10));
edtWebBrowser.Text := cqrini.ReadString('Program', 'WebBrowser', dmUtils.MyDefaultBrowser); edtWebBrowser.Text := cqrini.ReadString('Program', 'WebBrowser', dmUtils.MyDefaultBrowser);
chkNewDXCCTables.Checked := cqrini.ReadBool('Program', 'CheckDXCCTabs', True); chkNewDXCCTables.Checked := cqrini.ReadBool('Program', 'CheckDXCCTabs', True);
chkShowDeleted.Checked := cqrini.ReadBool('Program', 'ShowDeleted', False); chkShowDeleted.Checked := cqrini.ReadBool('Program', 'ShowDeleted', False);

View File

@ -65,8 +65,9 @@ type
procedure body_add(typ:byte;x1,y1,x2,y2:extended;popis:string;barva:tcolor;vel_bodu:longint); procedure body_add(typ:byte;x1,y1,x2,y2:extended;popis:string;barva:tcolor;vel_bodu:longint);
procedure body_smaz; procedure body_smaz;
procedure GC_line_part(x1,y1,x2,y2:double); procedure GC_line_part(x1,y1,x2,y2:double); //add ShortPath point
procedure GC_line_clear; procedure GC_Lline_part(x1,y1,x2,y2:double); //add LongPath point
procedure GC_line_clear(what:integer=-1); //clear S&LPath points
private private
nrd:boolean; //needs to redraw (a new calculation has been made) nrd:boolean; //needs to redraw (a new calculation has been made)
@ -91,8 +92,11 @@ type
body:array[0..body_max] of Tcarobod; body:array[0..body_max] of Tcarobod;
body_poc:longint; body_poc:longint;
GC_point:array[0..GC_points_Max] of TGC_point; GC_point:array[0..GC_points_Max] of TGC_point; //ShortPath array
GCpointer:longint; GCpointer:longint;
GC_Lpoint:array[0..GC_points_Max] of TGC_point; //LongPath array
GCLpointer:longint;
LP : boolean; //set LongPath color;
function calc_horizontalx(var coord:t_coord; date:TDateTime; z:longint;latitude: extended):longint; function calc_horizontalx(var coord:t_coord; date:TDateTime; z:longint;latitude: extended):longint;
end; end;
@ -519,6 +523,7 @@ var e,z:longint;
body_poc:=0; body_poc:=0;
GCpointer:=0; GCpointer:=0;
GCLpointer:=0;
poslednicas:=now-1000000; poslednicas:=now-1000000;
nrd:=false; nrd:=false;
@ -708,7 +713,10 @@ var
can.pen.Width:=5; can.pen.Width:=5;
can.moveto(x1,y1); can.moveto(x1,y1);
can.lineto(x2,y2); can.lineto(x2,y2);
can.pen.color:=clyellow; If LP then
can.pen.color:=clFuchsia
else
can.pen.color:=clyellow;
can.pen.Width:=2; can.pen.Width:=2;
can.moveto(x1,y1); can.moveto(x1,y1);
can.lineto(x2,y2); can.lineto(x2,y2);
@ -882,13 +890,15 @@ begin
// can.TextOut(10,30,' '+inttostr(round(carax2))+':'+inttostr(round(caray2))+' '); // can.TextOut(10,30,' '+inttostr(round(carax2))+':'+inttostr(round(caray2))+' ');
end; end;
if GCpointer > 0 then if GCpointer+GCLpointer > 0 then //same as OR
begin begin
LP:=True; //LongPath color plotting
for z:=0 to GCLpointer-1 do
cmarni(GC_Lpoint[z].La1, GC_Lpoint[z].Lo1, GC_Lpoint[z].La2, GC_Lpoint[z].Lo2, false);
LP:=False; //ShortPath color plotting
for z:=0 to GCpointer-1 do for z:=0 to GCpointer-1 do
begin
cmarni(GC_point[z].La1, GC_point[z].Lo1, GC_point[z].La2, GC_point[z].Lo2, false); cmarni(GC_point[z].La1, GC_point[z].Lo1, GC_point[z].La2, GC_point[z].Lo2, false);
end; end;
end;
for z:=0 to body_poc-1 do for z:=0 to body_poc-1 do
@ -973,11 +983,31 @@ Begin
inc(GCpointer); inc(GCpointer);
end; end;
end; end;
procedure Tgrayline.GC_Lline_part(x1,y1,x2,y2:double);
procedure Tgrayline.GC_line_clear;
Begin Begin
GCpointer:=0; if chcipni then exit; //chcipni = "die"
if GCLpointer < GC_Points_max then
begin
GC_Lpoint[GCLpointer].La1:=x1;
GC_Lpoint[GCLpointer].Lo1:=y1;
GC_Lpoint[GCLpointer].La2:=x2;
GC_Lpoint[GCLpointer].Lo2:=y2;
inc(GCLpointer);
end;
end;
procedure Tgrayline.GC_line_clear(what:integer=-1);
begin
case what of
-1: Begin
GCpointer:=0;
GCLpointer:=0;
end;
0: GCpointer:=0;
1: GCLpointer:=0;
end;
end; end;
end. end.

View File

@ -20,7 +20,7 @@ const
cBUILD_DATE = '2022-02-15'; cBUILD_DATE = '2022-02-21';
implementation implementation