LazMapViewer: Add proxy support to WinINet download engine. Adapt both "fulldemo" samples.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9031 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2023-11-17 15:56:49 +00:00
parent bf81428299
commit 9f248983f3
8 changed files with 682 additions and 108 deletions

View File

@ -6,11 +6,11 @@ object MainForm: TMainForm
Caption = 'LazMapViewer'
ClientHeight = 640
ClientWidth = 883
ShowHint = True
LCLVersion = '3.99.0.0'
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
ShowHint = True
LCLVersion = '2.3.0.0'
object MapView: TMapView
Left = 0
Height = 640
@ -59,9 +59,9 @@ object MainForm: TMainForm
Width = 263
Max = 19
Min = 1
OnChange = ZoomTrackBarChange
Position = 1
TickMarks = tmBoth
OnChange = ZoomTrackBarChange
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 2
BorderSpacing.Right = 2
@ -332,10 +332,10 @@ object MainForm: TMainForm
'km'
'miles'
)
OnChange = CbDistanceUnitsChange
Style = csDropDownList
TabOrder = 4
Text = 'km'
OnChange = CbDistanceUnitsChange
end
object GbSearch: TGroupBox
AnchorSideLeft.Control = GbScreenSize
@ -385,8 +385,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Right = 6
Caption = 'Search'
OnClick = BtnSearchClick
TabOrder = 1
OnClick = BtnSearchClick
end
object LblSelectLocation: TLabel
AnchorSideLeft.Control = CbLocations
@ -413,8 +413,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Bottom = 8
Caption = 'Go to'
TabOrder = 3
OnClick = BtnGoToClick
TabOrder = 2
end
object CbFoundLocations: TComboBox
AnchorSideLeft.Control = LblSelectLocation
@ -432,11 +432,11 @@ object MainForm: TMainForm
DropDownCount = 24
ItemHeight = 15
ItemWidth = -2
OnDrawItem = CbFoundLocationsDrawItem
ParentShowHint = False
ShowHint = True
Style = csOwnerDrawFixed
TabOrder = 3
TabOrder = 2
OnDrawItem = CbFoundLocationsDrawItem
end
end
object GbGPS: TGroupBox
@ -469,8 +469,8 @@ object MainForm: TMainForm
BorderSpacing.Left = 6
BorderSpacing.Right = 6
Caption = 'List...'
OnClick = BtnGPSPointsClick
TabOrder = 0
OnClick = BtnGPSPointsClick
end
object InfoBtnGPSPoints: TLabel
AnchorSideLeft.Control = GbGPS
@ -519,8 +519,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Top = 8
Caption = 'Save map to file'
OnClick = BtnSaveToFileClick
TabOrder = 7
OnClick = BtnSaveToFileClick
end
object BtnLoadGPXFile: TButton
AnchorSideLeft.Control = BtnSaveToFile
@ -533,8 +533,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Left = 8
Caption = 'Load GPX file...'
OnClick = BtnLoadGPXFileClick
TabOrder = 8
OnClick = BtnLoadGPXFileClick
end
object BtnPrintMap: TButton
AnchorSideLeft.Control = BtnSaveToFile
@ -549,8 +549,8 @@ object MainForm: TMainForm
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 8
Caption = 'Print...'
OnClick = BtnPrintMapClick
TabOrder = 9
OnClick = BtnPrintMapClick
end
end
object PgConfig: TTabSheet
@ -562,9 +562,9 @@ object MainForm: TMainForm
AnchorSideTop.Control = PgConfig
Left = 6
Height = 15
Top = 8
Top = 12
Width = 52
BorderSpacing.Top = 8
BorderSpacing.Top = 12
Caption = 'Providers:'
FocusControl = CbProviders
ParentColor = False
@ -576,26 +576,26 @@ object MainForm: TMainForm
AnchorSideRight.Control = BtnLoadMapProviders
Left = 6
Height = 23
Top = 25
Width = 199
Top = 29
Width = 201
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 2
BorderSpacing.Right = 4
DropDownCount = 24
ItemHeight = 15
OnChange = CbProvidersChange
Style = csDropDownList
TabOrder = 0
OnChange = CbProvidersChange
end
object BtnLoadMapProviders: TSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CbProviders
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = BtnSaveMapProviders
Left = 209
Left = 211
Height = 22
Top = 25
Top = 29
Width = 23
Anchors = [akTop, akRight]
BorderSpacing.Right = 4
@ -644,12 +644,12 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = PgConfig
AnchorSideRight.Side = asrBottom
Left = 236
Left = 238
Height = 22
Top = 25
Top = 29
Width = 23
Anchors = [akTop, akRight]
BorderSpacing.Right = 8
BorderSpacing.Right = 6
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000A4653455A465
@ -694,15 +694,15 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 81
Top = 296
Width = 79
BorderSpacing.Left = 6
BorderSpacing.Top = 6
Caption = 'Use threads'
Checked = True
OnChange = CbUseThreadsChange
State = cbChecked
TabOrder = 1
TabOrder = 4
OnChange = CbUseThreadsChange
end
object CbDoubleBuffer: TCheckBox
AnchorSideLeft.Control = CbUseThreads
@ -710,15 +710,15 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 106
Top = 321
Width = 85
BorderSpacing.Top = 6
BorderSpacing.Right = 9
Caption = 'DblBuffering'
Checked = True
OnChange = CbDoubleBufferChange
State = cbChecked
TabOrder = 2
TabOrder = 6
OnChange = CbDoubleBufferChange
end
object CbDebugTiles: TCheckBox
AnchorSideLeft.Control = CbDoubleBuffer
@ -726,12 +726,12 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 131
Top = 346
Width = 77
BorderSpacing.Top = 6
Caption = 'Debug tiles'
TabOrder = 7
OnChange = CbDebugTilesChange
TabOrder = 3
end
object BtnPOITextFont: TButton
AnchorSideLeft.Control = rgPOIMode
@ -739,13 +739,13 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 25
Top = 286
Top = 501
Width = 93
AutoSize = True
BorderSpacing.Top = 12
Caption = 'POI text font'
TabOrder = 9
OnClick = BtnPOITextFontClick
TabOrder = 4
end
object cbPOITextBgColor: TColorBox
AnchorSideLeft.Control = LblPOITextBgColor
@ -755,15 +755,15 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
Left = 154
Height = 22
Top = 287
Top = 502
Width = 107
NoneColorColor = clWhite
Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors]
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
ItemHeight = 16
TabOrder = 10
OnChange = cbPOITextBgColorChange
TabOrder = 5
end
object LblPOITextBgColor: TLabel
AnchorSideLeft.Control = BtnPOITextFont
@ -772,7 +772,7 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
Left = 107
Height = 15
Top = 291
Top = 506
Width = 39
BorderSpacing.Left = 8
Caption = 'Backgr.'
@ -785,7 +785,7 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
Left = 6
Height = 4
Top = 158
Top = 373
Width = 255
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 8
@ -797,7 +797,7 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 104
Top = 170
Top = 385
Width = 159
AutoFill = True
AutoSize = True
@ -820,25 +820,25 @@ object MainForm: TMainForm
'image from imagelist'
'custom drawing'
)
TabOrder = 8
OnClick = rgPOIModeClick
TabOrder = 6
end
object CbZoomToCursor: TCheckBox
AnchorSideLeft.Control = PgConfig
AnchorSideTop.Control = CbProviders
AnchorSideTop.Control = gbProxy
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 56
Top = 271
Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 8
BorderSpacing.Top = 12
BorderSpacing.Right = 24
Caption = 'Zoom to cursor'
Checked = True
OnChange = CbZoomToCursorChange
State = cbChecked
TabOrder = 7
TabOrder = 2
OnChange = CbZoomToCursorChange
end
object cbCyclicView: TCheckBox
AnchorSideLeft.Control = CbZoomToCursor
@ -846,13 +846,13 @@ object MainForm: TMainForm
AnchorSideTop.Control = CbZoomToCursor
Left = 130
Height = 19
Top = 56
Top = 271
Width = 77
Caption = 'Cyclic view'
Checked = True
OnChange = cbCyclicViewChange
State = cbChecked
TabOrder = 8
TabOrder = 3
OnChange = cbCyclicViewChange
end
object clbBackColor: TColorButton
AnchorSideLeft.Control = cbCyclicView
@ -860,7 +860,7 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
Left = 130
Height = 25
Top = 103
Top = 318
Width = 105
BorderWidth = 2
ButtonColorAutoSize = False
@ -875,13 +875,177 @@ object MainForm: TMainForm
AnchorSideTop.Control = CbUseThreads
Left = 130
Height = 19
Top = 81
Top = 296
Width = 83
Caption = 'Preview tiles'
Checked = True
OnChange = CbPreviewTilesChange
State = cbChecked
TabOrder = 9
TabOrder = 5
OnChange = CbPreviewTilesChange
end
object gbProxy: TGroupBox
AnchorSideLeft.Control = PgConfig
AnchorSideTop.Control = CbProviders
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = PgConfig
AnchorSideRight.Side = asrBottom
Left = 6
Height = 195
Top = 64
Width = 255
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 6
BorderSpacing.Around = 6
Caption = 'Proxy'
ClientHeight = 175
ClientWidth = 251
TabOrder = 1
object lblProxyHost: TLabel
AnchorSideLeft.Control = rbNoProxy
AnchorSideTop.Control = edProxyHost
AnchorSideTop.Side = asrCenter
Left = 32
Height = 15
Top = 67
Width = 28
BorderSpacing.Left = 16
Caption = 'Host:'
end
object edProxyHost: TEdit
AnchorSideLeft.Control = edProxyUserName
AnchorSideTop.Control = rbProxyData
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbProxy
AnchorSideRight.Side = asrBottom
Left = 99
Height = 23
Top = 63
Width = 144
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 8
TabOrder = 3
OnChange = rbProxyChange
end
object lblProxyPort: TLabel
AnchorSideLeft.Control = lblProxyHost
AnchorSideTop.Control = seProxyPort
AnchorSideTop.Side = asrCenter
Left = 32
Height = 15
Top = 94
Width = 22
Caption = 'Port'
end
object seProxyPort: TSpinEdit
AnchorSideLeft.Control = lblProxyUserName
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edProxyHost
AnchorSideTop.Side = asrBottom
Left = 99
Height = 23
Top = 90
Width = 104
BorderSpacing.Top = 4
MaxValue = 65535
TabOrder = 4
OnChange = rbProxyChange
end
object lblProxyUserName: TLabel
AnchorSideLeft.Control = lblProxyHost
AnchorSideTop.Control = edProxyUserName
AnchorSideTop.Side = asrCenter
Left = 32
Height = 15
Top = 121
Width = 59
BorderSpacing.Right = 8
Caption = 'User name:'
end
object edProxyUserName: TEdit
AnchorSideLeft.Control = lblProxyUserName
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = seProxyPort
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbProxy
AnchorSideRight.Side = asrBottom
Left = 99
Height = 23
Top = 117
Width = 144
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 4
BorderSpacing.Right = 8
TabOrder = 5
OnChange = rbProxyChange
end
object lblProxyPassword: TLabel
AnchorSideLeft.Control = lblProxyHost
AnchorSideTop.Control = edProxyPassword
AnchorSideTop.Side = asrCenter
Left = 32
Height = 15
Top = 148
Width = 50
Caption = 'Password'
end
object edProxyPassword: TEdit
AnchorSideLeft.Control = edProxyUserName
AnchorSideTop.Control = edProxyUserName
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbProxy
AnchorSideRight.Side = asrBottom
Left = 99
Height = 23
Top = 144
Width = 144
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 4
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
TabOrder = 6
OnChange = rbProxyChange
end
object rbProxyData: TRadioButton
AnchorSideLeft.Control = rbNoProxy
AnchorSideTop.Control = rbSystemProxy
AnchorSideTop.Side = asrBottom
Left = 16
Height = 19
Top = 44
Width = 74
BorderSpacing.Top = 3
Caption = 'Proxy data'
TabOrder = 2
OnChangeBounds = rbProxyChange
end
object rbNoProxy: TRadioButton
AnchorSideLeft.Control = gbProxy
AnchorSideTop.Control = gbProxy
Left = 16
Height = 19
Top = 0
Width = 67
BorderSpacing.Left = 16
Caption = 'No proxy'
TabOrder = 0
OnChange = rbProxyChange
end
object rbSystemProxy: TRadioButton
AnchorSideLeft.Control = rbNoProxy
AnchorSideTop.Control = rbNoProxy
AnchorSideTop.Side = asrBottom
Left = 16
Height = 19
Top = 22
Width = 110
BorderSpacing.Top = 3
Caption = 'Use system proxy'
Checked = True
TabOrder = 1
TabStop = True
OnChange = rbProxyChange
end
end
end
end

View File

@ -5,8 +5,8 @@ unit Main;
interface
uses
Classes, SysUtils, Types, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Buttons, IntfGraphics, ColorBox, PrintersDlgs,
Classes, SysUtils, Types, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, ComCtrls, Buttons, IntfGraphics, ColorBox, Spin, PrintersDlgs,
mvGeoNames, mvMapViewer, mvTypes, mvGpsObj, mvDrawingEngine;
type
@ -26,6 +26,9 @@ type
CbFoundLocations: TComboBox;
CbLocations: TComboBox;
CbProviders: TComboBox;
rbSystemProxy: TRadioButton;
rbNoProxy: TRadioButton;
rbProxyData: TRadioButton;
CbUseThreads: TCheckBox;
CbMouseCoords: TGroupBox;
CbDistanceUnits: TComboBox;
@ -35,18 +38,26 @@ type
cbCyclicView: TCheckBox;
CbPreviewTiles: TCheckBox;
clbBackColor: TColorButton;
edProxyHost: TEdit;
edProxyUserName: TEdit;
edProxyPassword: TEdit;
FontDialog: TFontDialog;
GbCenterCoords: TGroupBox;
GbScreenSize: TGroupBox;
GbSearch: TGroupBox;
GbGPS: TGroupBox;
gbProxy: TGroupBox;
InfoCenterLatitude: TLabel;
InfoViewportHeight: TLabel;
InfoCenterLongitude: TLabel;
InfoBtnGPSPoints: TLabel;
GPSPointInfo: TLabel;
InfoViewportWidth: TLabel;
lblProxyUserName: TLabel;
lblProxyPort: TLabel;
lblProxyHost: TLabel;
LblPOITextBgColor: TLabel;
lblProxyPassword: TLabel;
LblSelectLocation: TLabel;
LblCenterLatitude: TLabel;
LblViewportHeight: TLabel;
@ -69,6 +80,7 @@ type
POIImages: TImageList;
PrintDialog1: TPrintDialog;
rgPOIMode: TRadioGroup;
seProxyPort: TSpinEdit;
ZoomTrackBar: TTrackBar;
procedure BtnGoToClick(Sender: TObject);
procedure BtnLoadGPXFileClick(Sender: TObject);
@ -85,6 +97,7 @@ type
procedure cbPOITextBgColorChange(Sender: TObject);
procedure CbPreviewTilesChange(Sender: TObject);
procedure CbProvidersChange(Sender: TObject);
procedure rbProxyChange(Sender: TObject);
procedure CbShowPOIImageChange(Sender: TObject);
procedure CbUseThreadsChange(Sender: TObject);
procedure CbDistanceUnitsChange(Sender: TObject);
@ -112,6 +125,7 @@ type
POIImage: TCustomBitmap;
procedure ClearFoundLocations;
procedure UpdateCoords(X, Y: Integer);
procedure UpdateDownloadEngineProxy;
procedure UpdateDropdownWidth(ACombobox: TCombobox);
procedure UpdateLocationHistory(ALocation: String);
procedure UpdateViewportSize;
@ -391,6 +405,11 @@ begin
MapView.MapProvider := CbProviders.Text;
end;
procedure TMainForm.rbProxyChange(Sender: TObject);
begin
UpdateDownloadEngineProxy;
end;
procedure TMainForm.CbShowPOIImageChange(Sender: TObject);
begin
{
@ -773,6 +792,19 @@ begin
List.Free;
end;
i := ini.ReadInteger('Proxy', 'UseProxy', 0);
case i of
0: rbNoProxy.Checked := true;
1: rbSystemProxy.Checked := true;
2: rbProxyData.Checked := true;
end;
edProxyHost.Text := ini.ReadString('Proxy', 'ProxyHost', edProxyHost.Text);
seProxyPort.Value := ini.ReadInteger('Proxy', 'ProxyPort', seProxyPort.Value);
edProxyUserName.Text := ini.ReadString('Proxy', 'ProxyName', edProxyUserName.Text);
edProxyPassword.Text := ini.ReadString('Proxy', 'ProxyPassword', edProxyPassword.Text);
UpdateDownloadEngineProxy;
finally
ini.Free;
end;
@ -815,6 +847,26 @@ begin
end;
end;
procedure TMainForm.UpdateDownloadEngineProxy;
begin
if MapView.DownloadEngine.HasProxySupport then
begin
MapView.DownloadEngine.SetProxy(
rbSystemProxy.Checked, rbProxyData.Checked,
edProxyHost.Name, seProxyPort.Value, edProxyUserName.Text, edProxyPassword.Text
);
rbSystemProxy.Enabled := MapView.DownloadEngine.SupportsSystemProxy;
lblProxyHost.Enabled := rbProxyData.Checked;
edProxyHost.Enabled := rbProxyData.Checked;
lblProxyPort.Enabled := rbProxyData.Checked;
seProxyPort.Enabled := rbProxyData.Checked;
lblProxyUserName.Enabled := rbProxyData.Checked;
edProxyUserName.Enabled := rbProxyData.Checked;
lblProxyPassword.Enabled := rbProxyData.Checked;
edProxyPassword.Enabled := rbProxyData.Checked;
end;
end;
procedure TMainForm.UpdateDropdownWidth(ACombobox: TCombobox);
var
cnv: TControlCanvas;
@ -913,6 +965,19 @@ begin
for i := 0 to CbLocations.Items.Count-1 do
ini.WriteString('Locations', 'Item'+IntToStr(i), CbLocations.Items[i]);
if rbSystemProxy.Checked then
i := 1
else if rbProxyData.Checked then
i := 2
else
i := 0;
ini.EraseSection('Proxy');
ini.WriteInteger('Proxy', 'UseProxy', i);
ini.WriteString('Proxy', 'ProxyHost', edProxyHost.Text);
ini.WriteInteger('Proxy', 'ProxyPort', seProxyPort.Value);
ini.WriteString('Proxy', 'ProxyName', edProxyUserName.Text);
ini.WriteString('Proxy', 'ProxyPassword', edProxyPassword.Text);
finally
ini.Free;
end;

View File

@ -6,11 +6,11 @@ object MainForm: TMainForm
Caption = 'LazMapViewer'
ClientHeight = 640
ClientWidth = 883
ShowHint = True
LCLVersion = '3.99.0.0'
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
ShowHint = True
LCLVersion = '2.3.0.0'
object MapView: TMapView
Left = 0
Height = 640
@ -57,9 +57,9 @@ object MainForm: TMainForm
Width = 263
Max = 19
Min = 1
OnChange = ZoomTrackBarChange
Position = 1
TickMarks = tmBoth
OnChange = ZoomTrackBarChange
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 2
BorderSpacing.Right = 2
@ -317,10 +317,10 @@ object MainForm: TMainForm
'km'
'miles'
)
OnChange = CbDistanceUnitsChange
Style = csDropDownList
TabOrder = 4
Text = 'km'
OnChange = CbDistanceUnitsChange
end
object GbSearch: TGroupBox
AnchorSideLeft.Control = GbScreenSize
@ -370,8 +370,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Right = 6
Caption = 'Search'
OnClick = BtnSearchClick
TabOrder = 1
OnClick = BtnSearchClick
end
object LblSelectLocation: TLabel
AnchorSideLeft.Control = CbLocations
@ -397,8 +397,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Bottom = 8
Caption = 'Go to'
OnClick = BtnGoToClick
TabOrder = 2
OnClick = BtnGoToClick
end
object CbFoundLocations: TComboBox
AnchorSideLeft.Control = LblSelectLocation
@ -416,11 +416,11 @@ object MainForm: TMainForm
DropDownCount = 24
ItemHeight = 15
ItemWidth = -2
OnDrawItem = CbFoundLocationsDrawItem
ParentShowHint = False
ShowHint = True
Style = csOwnerDrawFixed
TabOrder = 3
OnDrawItem = CbFoundLocationsDrawItem
end
end
object GbGPS: TGroupBox
@ -453,8 +453,8 @@ object MainForm: TMainForm
BorderSpacing.Left = 6
BorderSpacing.Right = 6
Caption = 'List...'
OnClick = BtnGPSPointsClick
TabOrder = 0
OnClick = BtnGPSPointsClick
end
object InfoBtnGPSPoints: TLabel
AnchorSideLeft.Control = GbGPS
@ -501,8 +501,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Top = 8
Caption = 'Save map to file'
OnClick = BtnSaveToFileClick
TabOrder = 7
OnClick = BtnSaveToFileClick
end
object BtnLoadGPXFile: TButton
AnchorSideLeft.Control = BtnSaveToFile
@ -515,8 +515,8 @@ object MainForm: TMainForm
AutoSize = True
BorderSpacing.Left = 8
Caption = 'Load GPX file...'
OnClick = BtnLoadGPXFileClick
TabOrder = 8
OnClick = BtnLoadGPXFileClick
end
end
object PgConfig: TTabSheet
@ -528,9 +528,9 @@ object MainForm: TMainForm
AnchorSideTop.Control = PgConfig
Left = 6
Height = 15
Top = 6
Top = 12
Width = 86
BorderSpacing.Top = 6
BorderSpacing.Top = 12
Caption = 'Drawing engine:'
end
object CbDrawingEngine: TComboBox
@ -541,7 +541,7 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
Left = 6
Height = 23
Top = 23
Top = 29
Width = 255
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
@ -554,18 +554,18 @@ object MainForm: TMainForm
'RGBGraphics'
'BGRABitmap'
)
OnChange = CbDrawingEngineChange
Style = csDropDownList
TabOrder = 0
Text = 'default'
OnChange = CbDrawingEngineChange
end
object LblProviders: TLabel
AnchorSideLeft.Control = CbProviders
AnchorSideTop.Control = CbDownloadEngine
AnchorSideTop.Control = gbProxy
AnchorSideTop.Side = asrBottom
Left = 6
Height = 15
Top = 102
Top = 315
Width = 52
BorderSpacing.Top = 8
Caption = 'Providers:'
@ -578,26 +578,26 @@ object MainForm: TMainForm
AnchorSideRight.Control = BtnLoadMapProviders
Left = 6
Height = 23
Top = 119
Width = 199
Top = 332
Width = 201
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
BorderSpacing.Top = 2
BorderSpacing.Right = 4
DropDownCount = 24
ItemHeight = 15
OnChange = CbProvidersChange
Style = csDropDownList
TabOrder = 1
OnChange = CbProvidersChange
end
object BtnLoadMapProviders: TSpeedButton
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CbProviders
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = BtnSaveMapProviders
Left = 209
Left = 211
Height = 22
Top = 119
Top = 332
Width = 23
Anchors = [akTop, akRight]
BorderSpacing.Right = 4
@ -646,12 +646,12 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = PgConfig
AnchorSideRight.Side = asrBottom
Left = 236
Left = 238
Height = 22
Top = 119
Top = 332
Width = 23
Anchors = [akTop, akRight]
BorderSpacing.Right = 8
BorderSpacing.Right = 6
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000A4653455A465
@ -696,15 +696,15 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 175
Top = 394
Width = 79
BorderSpacing.Left = 6
BorderSpacing.Top = 6
BorderSpacing.Top = 12
Caption = 'Use threads'
Checked = True
OnChange = CbUseThreadsChange
State = cbChecked
TabOrder = 2
OnChange = CbUseThreadsChange
end
object CbDoubleBuffer: TCheckBox
AnchorSideLeft.Control = CbUseThreads
@ -712,15 +712,15 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 200
Top = 419
Width = 85
BorderSpacing.Top = 6
BorderSpacing.Right = 9
Caption = 'DblBuffering'
Checked = True
OnChange = CbDoubleBufferChange
State = cbChecked
TabOrder = 3
OnChange = CbDoubleBufferChange
end
object CbDebugTiles: TCheckBox
AnchorSideLeft.Control = CbDoubleBuffer
@ -728,12 +728,12 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 225
Top = 444
Width = 77
BorderSpacing.Top = 6
Caption = 'Debug tiles'
OnChange = CbDebugTilesChange
TabOrder = 4
OnChange = CbDebugTilesChange
end
object CbShowPOIImage: TCheckBox
AnchorSideLeft.Control = CbDebugTiles
@ -741,25 +741,25 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 262
Top = 481
Width = 105
BorderSpacing.Top = 6
Caption = 'Show POI image'
OnChange = CbShowPOIImageChange
TabOrder = 5
OnChange = CbShowPOIImageChange
end
object BtnPOITextFont: TButton
AnchorSideTop.Control = CbShowPOIImage
AnchorSideTop.Side = asrBottom
Left = 6
Height = 25
Top = 289
Top = 508
Width = 93
AutoSize = True
BorderSpacing.Top = 8
Caption = 'POI text font'
OnClick = BtnPOITextFontClick
TabOrder = 6
OnClick = BtnPOITextFontClick
end
object cbPOITextBgColor: TColorBox
AnchorSideLeft.Control = LblPOITextBgColor
@ -770,15 +770,15 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
Left = 154
Height = 22
Top = 290
Top = 509
Width = 107
NoneColorColor = clWhite
Style = [cbStandardColors, cbExtendedColors, cbIncludeNone, cbCustomColor, cbPrettyNames, cbCustomColors]
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
ItemHeight = 16
OnChange = cbPOITextBgColorChange
TabOrder = 7
OnChange = cbPOITextBgColorChange
end
object LblPOITextBgColor: TLabel
AnchorSideLeft.Control = BtnPOITextFont
@ -787,7 +787,7 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
Left = 107
Height = 15
Top = 294
Top = 513
Width = 39
BorderSpacing.Left = 8
Caption = 'Backgr.'
@ -800,7 +800,7 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
Left = 6
Height = 4
Top = 252
Top = 471
Width = 255
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 8
@ -812,15 +812,15 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 19
Top = 150
Top = 363
Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 8
Caption = 'Zoom to cursor'
Checked = True
OnChange = CbZoomToCursorChange
State = cbChecked
TabOrder = 8
OnChange = CbZoomToCursorChange
end
object Label2: TLabel
AnchorSideLeft.Control = CbDownloadEngine
@ -828,7 +828,7 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom
Left = 6
Height = 15
Top = 54
Top = 60
Width = 96
BorderSpacing.Top = 8
Caption = 'Download engine:'
@ -841,7 +841,7 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom
Left = 6
Height = 23
Top = 71
Top = 77
Width = 255
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 6
@ -855,10 +855,10 @@ object MainForm: TMainForm
'FpHTTPClient'
'WinInet'
)
OnChange = CbDownloadEngineChange
Style = csDropDownList
TabOrder = 9
Text = 'default'
OnChange = CbDownloadEngineChange
end
object CbCyclic: TCheckBox
AnchorSideLeft.Control = CbZoomToCursor
@ -866,14 +866,14 @@ object MainForm: TMainForm
AnchorSideTop.Control = CbZoomToCursor
Left = 130
Height = 19
Top = 150
Top = 363
Width = 77
BorderSpacing.Left = 24
Caption = 'Cyclic view'
Checked = True
OnChange = CbCyclicChange
State = cbChecked
TabOrder = 10
OnChange = CbCyclicChange
end
object CbPreviewTiles: TCheckBox
AnchorSideLeft.Control = CbCyclic
@ -881,13 +881,13 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
Left = 130
Height = 19
Top = 175
Top = 394
Width = 83
Caption = 'Preview tiles'
Checked = True
OnChange = CbPreviewTilesChange
State = cbChecked
TabOrder = 11
OnChange = CbPreviewTilesChange
end
object clbBackColor: TColorButton
AnchorSideLeft.Control = CbPreviewTiles
@ -895,7 +895,7 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
Left = 130
Height = 25
Top = 197
Top = 416
Width = 105
BorderWidth = 2
ButtonColorAutoSize = False
@ -905,6 +905,171 @@ object MainForm: TMainForm
Margin = 4
OnColorChanged = clbBackColorColorChanged
end
object gbProxy: TGroupBox
AnchorSideLeft.Control = PgConfig
AnchorSideTop.Control = CbDownloadEngine
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = PgConfig
AnchorSideRight.Side = asrBottom
Left = 6
Height = 197
Top = 110
Width = 255
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 4
BorderSpacing.Around = 6
Caption = 'Proxy'
ClientHeight = 177
ClientWidth = 251
TabOrder = 12
object lblProxyHost: TLabel
AnchorSideLeft.Control = rbNoProxy
AnchorSideTop.Control = edProxyHost
AnchorSideTop.Side = asrCenter
Left = 28
Height = 15
Top = 69
Width = 28
BorderSpacing.Left = 18
Caption = 'Host:'
end
object edProxyHost: TEdit
AnchorSideLeft.Control = edProxyUserName
AnchorSideTop.Control = rbProxyData
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbProxy
AnchorSideRight.Side = asrBottom
Left = 95
Height = 23
Top = 65
Width = 148
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 8
TabOrder = 0
OnChange = rbProxyChange
end
object lblProxyPort: TLabel
AnchorSideLeft.Control = lblProxyHost
AnchorSideTop.Control = seProxyPort
AnchorSideTop.Side = asrCenter
Left = 28
Height = 15
Top = 96
Width = 22
Caption = 'Port'
end
object seProxyPort: TSpinEdit
AnchorSideLeft.Control = lblProxyUserName
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edProxyHost
AnchorSideTop.Side = asrBottom
Left = 95
Height = 23
Top = 92
Width = 104
BorderSpacing.Top = 4
MaxValue = 65535
TabOrder = 1
OnChange = rbProxyChange
end
object lblProxyUserName: TLabel
AnchorSideLeft.Control = lblProxyHost
AnchorSideTop.Control = edProxyUserName
AnchorSideTop.Side = asrCenter
Left = 28
Height = 15
Top = 123
Width = 59
BorderSpacing.Right = 8
Caption = 'User name:'
end
object edProxyUserName: TEdit
AnchorSideLeft.Control = lblProxyUserName
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = seProxyPort
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbProxy
AnchorSideRight.Side = asrBottom
Left = 95
Height = 23
Top = 119
Width = 148
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 4
BorderSpacing.Right = 8
TabOrder = 2
OnChange = rbProxyChange
end
object lblProxyPassword: TLabel
AnchorSideLeft.Control = lblProxyHost
AnchorSideTop.Control = edProxyPassword
AnchorSideTop.Side = asrCenter
Left = 28
Height = 15
Top = 150
Width = 50
Caption = 'Password'
end
object edProxyPassword: TEdit
AnchorSideLeft.Control = edProxyUserName
AnchorSideTop.Control = edProxyUserName
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbProxy
AnchorSideRight.Side = asrBottom
Left = 95
Height = 23
Top = 146
Width = 148
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 4
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
TabOrder = 3
OnChange = rbProxyChange
end
object rbNoProxy: TRadioButton
AnchorSideLeft.Control = gbProxy
AnchorSideTop.Control = gbProxy
Left = 10
Height = 19
Top = 0
Width = 67
BorderSpacing.Left = 10
Caption = 'No proxy'
TabOrder = 4
OnChange = rbProxyChange
end
object rbSystemProxy: TRadioButton
AnchorSideLeft.Control = rbNoProxy
AnchorSideTop.Control = rbNoProxy
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 23
Width = 110
BorderSpacing.Top = 4
Caption = 'Use system proxy'
Checked = True
Enabled = False
TabOrder = 5
TabStop = True
OnChange = rbProxyChange
end
object rbProxyData: TRadioButton
AnchorSideLeft.Control = rbNoProxy
AnchorSideTop.Control = rbSystemProxy
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 46
Width = 74
BorderSpacing.Top = 4
Caption = 'Proxy data'
TabOrder = 6
OnChange = rbProxyChange
end
end
end
end
object GeoNames: TMVGeoNames
@ -921,7 +1086,7 @@ object MainForm: TMainForm
object FontDialog: TFontDialog
MinFontSize = 0
MaxFontSize = 0
Left = 808
Top = 216
Left = 800
Top = 472
end
end

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, Types, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Buttons, IntfGraphics, ColorBox,
ExtCtrls, StdCtrls, ComCtrls, Buttons, IntfGraphics, ColorBox, Spin,
mvGeoNames, mvMapViewer, mvTypes, mvGpsObj, mvDrawingEngine,
mvDE_RGBGraphics, mvDE_BGRA, mvDLEFPC, mvDLEWin, mvDLESynapse;
@ -27,6 +27,8 @@ type
CbFoundLocations: TComboBox;
CbLocations: TComboBox;
CbProviders: TComboBox;
rbProxyData: TRadioButton;
rbSystemProxy: TRadioButton;
CbUseThreads: TCheckBox;
CbMouseCoords: TGroupBox;
CbDistanceUnits: TComboBox;
@ -38,8 +40,12 @@ type
CbCyclic: TCheckBox;
CbPreviewTiles: TCheckBox;
clbBackColor: TColorButton;
edProxyHost: TEdit;
edProxyPassword: TEdit;
edProxyUserName: TEdit;
FontDialog: TFontDialog;
GbCenterCoords: TGroupBox;
gbProxy: TGroupBox;
GbScreenSize: TGroupBox;
GbSearch: TGroupBox;
GbGPS: TGroupBox;
@ -52,6 +58,10 @@ type
Label1: TLabel;
Label2: TLabel;
LblPOITextBgColor: TLabel;
lblProxyHost: TLabel;
lblProxyPassword: TLabel;
lblProxyPort: TLabel;
lblProxyUserName: TLabel;
LblSelectLocation: TLabel;
LblCenterLatitude: TLabel;
LblViewportHeight: TLabel;
@ -71,6 +81,8 @@ type
PageControl: TPageControl;
PgData: TTabSheet;
PgConfig: TTabSheet;
rbNoProxy: TRadioButton;
seProxyPort: TSpinEdit;
ZoomTrackBar: TTrackBar;
procedure BtnGoToClick(Sender: TObject);
procedure BtnLoadGPXFileClick(Sender: TObject);
@ -108,6 +120,7 @@ type
procedure MapViewZoomChange(Sender: TObject);
procedure BtnLoadMapProvidersClick(Sender: TObject);
procedure BtnSaveMapProvidersClick(Sender: TObject);
procedure rbProxyChange(Sender: TObject);
procedure ZoomTrackBarChange(Sender: TObject);
private
@ -121,6 +134,7 @@ type
POIImage: TCustomBitmap;
procedure ClearFoundLocations;
procedure UpdateCoords(X, Y: Integer);
procedure UpdateDownloadEngineProxy;
procedure UpdateDropdownWidth(ACombobox: TCombobox);
procedure UpdateLocationHistory(ALocation: String);
procedure UpdateViewportSize;
@ -187,6 +201,11 @@ begin
MapView.Engine.WriteProvidersToXML(Application.Location + MAP_PROVIDER_FILENAME);
end;
procedure TMainForm.rbProxyChange(Sender: TObject);
begin
UpdateDownloadEngineProxy;
end;
procedure TMainForm.BtnSearchClick(Sender: TObject);
begin
ClearFoundLocations;
@ -291,6 +310,7 @@ begin
{$ENDIF}
end;
end;
UpdateDownloadEngineProxy;
end;
procedure TMainForm.CbDrawingEngineChange(Sender: TObject);
@ -659,6 +679,19 @@ begin
List.Free;
end;
i := ini.ReadInteger('Proxy', 'UseProxy', 0);
case i of
0: rbNoProxy.Checked := true;
1: rbSystemProxy.Checked := true;
2: rbProxyData.Checked := true;
end;
edProxyHost.Text := ini.ReadString('Proxy', 'ProxyHost', edProxyHost.Text);
seProxyPort.Value := ini.ReadInteger('Proxy', 'ProxyPort', seProxyPort.Value);
edProxyUserName.Text := ini.ReadString('Proxy', 'ProxyName', edProxyUserName.Text);
edProxyPassword.Text := ini.ReadString('Proxy', 'ProxyPassword', edProxyPassword.Text);
UpdateDownloadEngineProxy;
finally
ini.Free;
end;
@ -682,6 +715,26 @@ begin
end;
end;
procedure TMainForm.UpdateDownloadEngineProxy;
begin
if MapView.DownloadEngine.HasProxySupport then
begin
MapView.DownloadEngine.SetProxy(
rbSystemProxy.Checked, rbProxyData.Checked,
edProxyHost.Name, seProxyPort.Value, edProxyUserName.Text, edProxyPassword.Text
);
rbSystemProxy.Enabled := MapView.DownloadEngine.SupportsSystemProxy;
lblProxyHost.Enabled := rbProxyData.Checked;
edProxyHost.Enabled := rbProxyData.Checked;
lblProxyPort.Enabled := rbProxyData.Checked;
seProxyPort.Enabled := rbProxyData.Checked;
lblProxyUserName.Enabled := rbProxyData.Checked;
edProxyUserName.Enabled := rbProxyData.Checked;
lblProxyPassword.Enabled := rbProxyData.Checked;
edProxyPassword.Enabled := rbProxyData.Checked;
end;
end;
procedure TMainForm.UpdateDropdownWidth(ACombobox: TCombobox);
var
cnv: TControlCanvas;
@ -782,6 +835,16 @@ begin
for i := 0 to CbLocations.Items.Count-1 do
ini.WriteString('Locations', 'Item'+IntToStr(i), CbLocations.Items[i]);
ini.EraseSection('Proxy');
if rbSystemProxy.Checked then i := 1
else if rbProxyData.Checked then i := 2
else i := 0;
ini.WriteInteger('Proxy', 'UseProxy', i);
ini.WriteString('Proxy', 'ProxyHost', edProxyHost.Text);
ini.WriteInteger('Proxy', 'ProxyPort', seProxyPort.Value);
ini.WriteString('Proxy', 'ProxyName', edProxyUserName.Text);
ini.WriteString('Proxy', 'ProxyPassword', edProxyPassword.Text);
finally
ini.Free;
end;

View File

@ -31,7 +31,10 @@ type
FUseProxy: Boolean;
protected
procedure InternalDownloadFile(const Url: string; str: TStream); override;
public
constructor Create(AOwner: TComponent); override;
procedure SetProxy(AUseSystemProxy, AUseProxy: Boolean; AProxyHost: String;
AProxyPort: Word; AProxyUserName, AProxyPassword: String); override;
published
property UseProxy: Boolean read FUseProxy write FUseProxy default false;
property ProxyHost: string read FProxyHost write FProxyHost;
@ -55,6 +58,13 @@ end;
{ TMvDESynapse }
constructor TMvDESynapse.Create(AOwner: TComponent);
begin
inherited;
FProxySupport := true;
FSystemProxySupport := false;
end;
procedure TMvDESynapse.InternalDownloadFile(const Url: string; str: TStream);
var
FHttp: THTTPSend;
@ -99,4 +109,14 @@ begin
end;
end;
procedure TMvDESynapse.SetProxy(AUseSystemProxy, AUseProxy: Boolean;
AProxyHost: String; AProxyPort: Word; AProxyUserName, AProxyPassword: String);
begin
FUseProxy := AUseProxy;
FProxyHost := AProxyHost;
FProxyPort := AProxyPort;
FProxyUserName := AProxyUserName;
FProxyPassword := AProxyPassword;
end;
end.

View File

@ -40,6 +40,9 @@ type
protected
procedure InternalDownloadFile(const Url: string; AStream: TStream); override;
public
constructor Create(AOwner: TComponent); override;
procedure SetProxy(AUseSystemProxy, AUseProxy: Boolean; AProxyHost: String;
AProxyPort: Word; AProxyUserName, AProxyPassword: String); override;
{$IF FPC_FullVersion >= 30101}
published
property UseProxy: Boolean read FUseProxy write FUseProxy default false;
@ -64,6 +67,15 @@ uses
{ TMVDEFPC }
constructor TMvDEFpc.Create(AOwner: TComponent);
begin
inherited;
{$IF FPC_FullVersion >= 30200}
FProxySupport := true;
{$IFEND}
FSystemProxySupport := false;
end;
procedure TMVDEFPC.InternalDownloadFile(const Url: string; AStream: TStream);
var
http: TFpHttpClient;
@ -98,4 +110,16 @@ begin
end;
end;
procedure TMvDEFPC.SetProxy(AUseSystemProxy, AUseProxy: Boolean; AProxyHost: String;
AProxyPort: Word; AProxyUserName, AProxyPassword: String);
begin
{$IF FPC_FullVersion >= 30101}
FUseProxy := AUseProxy;
FProxyHost := AProxyHost;
FProxyPort := AProxyPort;
FProxyUserName := AProxyUserName;
FProxyPassword := AProxyPassword;
{$ENDIF}
end;
end.

View File

@ -22,8 +22,25 @@ uses
type
TMVDEWin = class(TMvCustomDownloadEngine)
private
FUseSystemProxy: Boolean;
FUseProxy: Boolean;
FProxyHost: string;
FProxyPort: Word;
FProxyUserName: String;
FProxyPassWord: String;
protected
procedure InternalDownloadFile(const Url: string; AStream: TStream); override;
public
constructor Create(AOwner: TComponent); override;
procedure SetProxy(AUseSystemProxy, AUseProxy: Boolean; AProxyHost: String;
AProxyPort: Word; AProxyUserName, AProxyPassword: String); override;
property UseProxy: Boolean read FUseProxy write FUseProxy default false;
property UseSystemProxy: Boolean read FUseSystemProxy write FUseSystemproxy default true;
property ProxyHost: String read FProxyHost write FProxyHost;
property ProxyPort: Word read FProxyPort write FProxyPort;
property ProxyUsername: String read FProxyUserName write FProxyUserName;
property ProxyPassword: String read FProxyPassword write FProxyPassword;
end;
{$ENDIF}
@ -31,10 +48,17 @@ type
implementation
{$IFDEF MSWindows}
uses
windows, wininet;
constructor TMVDEWin.Create(AOwner: TComponent);
begin
inherited;
FProxySupport := true;
FSystemProxySupport := true;
FUseSystemProxy := true;
end;
procedure TMVDEWin.InternalDownloadFile(const Url: string; AStream: TStream);
const
KB = 1024;
@ -43,15 +67,47 @@ var
urlHandle: HInternet;
buffer: array[0..4*KB-1] of Char;
bytesRead: dWord = 0;
errCode: Integer = 0;
header: String;
accessType: Integer;
proxy: String = '';
username: WideString = '';
pwd: WideString = '';
begin
NetHandle := InternetOpen('Mozilla/5.0(compatible; WinInet)', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if FUseSystemProxy then
accessType := INTERNET_OPEN_TYPE_PRECONFIG
else
begin
accessType := INTERNET_OPEN_TYPE_DIRECT;
if FUseProxy then
begin
if FProxyPort <> 0 then
proxy := Format('%s:%d', [FProxyHost, FProxyPort])
else
proxy := FProxyHost;
if proxy <> '' then
accessType := INTERNET_OPEN_TYPE_PROXY;
end;
end;
netHandle := InternetOpen('Mozilla/5.0(compatible; WinInet)', accessType, PChar(proxy), nil, 0);
// NetHandle valid?
if netHandle = nil then
exit;
if FUseProxy then
begin
if FProxyUsername <> '' then
begin
userName := WideString(FProxyUsername);
InternetSetOptionW(netHandle, INTERNET_OPTION_PROXY_USERNAME, PWideChar(userName), Length(userName));
end;
if FProxyPassword <> '' then
begin
pwd := WideString(FProxyPassword);
InternetSetOptionW(netHandle, INTERNET_OPTION_PROXY_PASSWORD, PWideChar(pwd), Length(pwd));
end;
end;
try
header := '';
urlHandle := InternetOpenUrl(netHandle, PChar(URL), PChar(header), Length(header), INTERNET_FLAG_RELOAD, 0);
@ -75,6 +131,17 @@ begin
end;
end;
procedure TMvDEWin.SetProxy(AUseSystemProxy, AUseProxy: Boolean; AProxyHost: String;
AProxyPort: Word; AProxyUserName, AProxyPassword: String);
begin
FUseSystemProxy := AUseSystemProxy;
FUseProxy := AUseProxy;
FProxyHost := AProxyHost;
FProxyPort := AProxyPort;
FProxyUserName := AProxyUserName;
FProxyPassword := AProxyPassword;
end;
{$ENDIF}
end.

View File

@ -24,10 +24,16 @@ type
TMvCustomDownloadEngine = class(TComponent)
protected
FProxySupport: Boolean;
FSystemProxySupport: Boolean;
procedure InternalDownloadFile(const Url: String; AStream: TStream); virtual; abstract;
procedure LoadFromLocalFile(const AFileName: String; AStream: TStream);
public
procedure DownloadFile(const Url: string; AStream: TStream); virtual;
procedure SetProxy(AUseSystemProxy, AUseProxy: Boolean; AProxyHost: String;
AProxyPort: Word; AProxyUserName, AProxyPassword: String); virtual; abstract;
property HasProxySupport: Boolean read FProxySupport;
property SupportsSystemProxy: Boolean read FSystemProxySupport;
end;