- Added error handling when loading Locations and Profiles (fixes #2)

This commit is contained in:
Andreas Schneider 2009-12-06 20:03:24 +01:00
parent 4280db3f7e
commit 6eaf10e73e
2 changed files with 94 additions and 67 deletions

View File

@ -5,7 +5,7 @@ object frmMain: TfrmMain
Width = 766
ActiveControl = oglGameWindow
Caption = 'UO CentrED'
ClientHeight = 583
ClientHeight = 580
ClientWidth = 766
Constraints.MinHeight = 603
Constraints.MinWidth = 766
@ -22,7 +22,7 @@ object frmMain: TfrmMain
object pnlBottom: TPanel
Left = 0
Height = 31
Top = 552
Top = 549
Width = 766
Align = alBottom
BevelOuter = bvNone
@ -33,7 +33,7 @@ object frmMain: TfrmMain
Left = 11
Height = 14
Top = 7
Width = 10
Width = 11
Caption = 'X:'
ParentColor = False
end
@ -41,7 +41,7 @@ object frmMain: TfrmMain
Left = 88
Height = 14
Top = 7
Width = 9
Width = 10
Caption = 'Y:'
ParentColor = False
end
@ -54,10 +54,10 @@ object frmMain: TfrmMain
ParentColor = False
end
object lblTip: TLabel
Left = 534
Left = 528
Height = 31
Top = 0
Width = 224
Width = 230
Align = alRight
Alignment = taRightJustify
BorderSpacing.Right = 8
@ -66,10 +66,10 @@ object frmMain: TfrmMain
ParentColor = False
end
object lblTipC: TLabel
Left = 511
Left = 498
Height = 31
Top = 0
Width = 23
Width = 30
Align = alRight
Caption = 'Tip: '
Font.Height = -11
@ -80,7 +80,7 @@ object frmMain: TfrmMain
end
object edX: TSpinEdit
Left = 24
Height = 21
Height = 19
Top = 3
Width = 55
MaxValue = 100000
@ -88,7 +88,7 @@ object frmMain: TfrmMain
end
object edY: TSpinEdit
Left = 104
Height = 21
Height = 19
Top = 3
Width = 52
MaxValue = 100000
@ -107,7 +107,7 @@ object frmMain: TfrmMain
end
object pcLeft: TPageControl
Left = 0
Height = 528
Height = 525
Top = 24
Width = 224
ActivePage = tsTiles
@ -116,13 +116,13 @@ object frmMain: TfrmMain
TabOrder = 1
object tsTiles: TTabSheet
Caption = 'Tiles'
ClientHeight = 502
ClientWidth = 216
ClientHeight = 492
ClientWidth = 218
object lblFilter: TLabel
AnchorSideLeft.Control = cbTerrain
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cbTerrain
Left = 75
Left = 81
Height = 14
Top = 8
Width = 30
@ -139,9 +139,9 @@ object frmMain: TfrmMain
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = spTileList
Left = 4
Height = 266
Top = 50
Width = 208
Height = 250
Top = 56
Width = 210
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 4
BorderSpacing.Top = 4
@ -193,13 +193,13 @@ object frmMain: TfrmMain
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 181
Top = 321
Width = 216
Top = 311
Width = 218
Align = alBottom
Anchors = [akTop, akLeft, akRight, akBottom]
Caption = 'Random pool'
ClientHeight = 163
ClientWidth = 212
ClientHeight = 167
ClientWidth = 216
TabOrder = 1
object btnAddRandom: TSpeedButton
AnchorSideLeft.Control = gbRandom
@ -359,10 +359,10 @@ object frmMain: TfrmMain
object btnRandomPresetSave: TSpeedButton
AnchorSideTop.Control = cbRandomPreset
AnchorSideRight.Control = btnRandomPresetDelete
Left = 160
Left = 164
Height = 22
Hint = 'Save Preset'
Top = 138
Top = 134
Width = 22
Anchors = [akTop, akRight]
BorderSpacing.Right = 4
@ -413,10 +413,10 @@ object frmMain: TfrmMain
AnchorSideTop.Control = btnRandomPresetSave
AnchorSideRight.Control = gbRandom
AnchorSideRight.Side = asrBottom
Left = 186
Left = 190
Height = 22
Hint = 'Delete Preset'
Top = 138
Top = 134
Width = 22
Anchors = [akTop, akRight]
BorderSpacing.Right = 4
@ -473,9 +473,9 @@ object frmMain: TfrmMain
AnchorSideBottom.Control = cbRandomPreset
Cursor = 63
Left = 4
Height = 110
Height = 106
Top = 24
Width = 204
Width = 208
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Left = 4
BorderSpacing.Top = 2
@ -519,14 +519,14 @@ object frmMain: TfrmMain
AnchorSideBottom.Control = gbRandom
AnchorSideBottom.Side = asrBottom
Left = 4
Height = 21
Top = 138
Width = 152
Height = 29
Top = 134
Width = 156
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 4
BorderSpacing.Right = 4
BorderSpacing.Bottom = 4
ItemHeight = 13
ItemHeight = 0
OnChange = cbRandomPresetChange
Style = csDropDownList
TabOrder = 1
@ -539,8 +539,8 @@ object frmMain: TfrmMain
Cursor = crVSplit
Left = 0
Height = 5
Top = 316
Width = 216
Top = 306
Width = 218
Align = alNone
Anchors = [akLeft, akRight, akBottom]
ResizeAnchor = akBottom
@ -550,10 +550,10 @@ object frmMain: TfrmMain
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = vdtTiles
AnchorSideBottom.Side = asrBottom
Left = 108
Height = 21
Left = 110
Height = 19
Hint = 'Append S or T to restrict the search to Statics or Terrain.'
Top = 287
Top = 279
Width = 96
Anchors = [akRight, akBottom]
BorderSpacing.Right = 8
@ -572,10 +572,10 @@ object frmMain: TfrmMain
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = tsTiles
AnchorSideRight.Side = asrBottom
Left = 75
Height = 21
Left = 81
Height = 19
Top = 22
Width = 125
Width = 121
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 16
OnEditingDone = edFilterEditingDone
@ -586,10 +586,10 @@ object frmMain: TfrmMain
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = cbTerrain
AnchorSideTop.Side = asrBottom
Left = 5
Height = 19
Top = 27
Width = 53
Left = 4
Height = 22
Top = 30
Width = 60
Caption = 'Statics'
Checked = True
OnChange = cbStaticsChange
@ -600,9 +600,9 @@ object frmMain: TfrmMain
AnchorSideLeft.Control = tsTiles
AnchorSideTop.Control = tsTiles
Left = 4
Height = 19
Height = 22
Top = 8
Width = 55
Width = 61
BorderSpacing.Left = 4
BorderSpacing.Top = 8
Caption = 'Terrain'
@ -614,25 +614,26 @@ object frmMain: TfrmMain
end
object tsClients: TTabSheet
Caption = 'Clients'
ClientHeight = 502
ClientWidth = 216
ClientHeight = 495
ClientWidth = 218
object lbClients: TListBox
Left = 0
Height = 502
Height = 495
Top = 0
Width = 216
Width = 218
Align = alClient
ItemHeight = 0
OnDblClick = mnuGoToClientClick
PopupMenu = pmClients
Sorted = True
TabOrder = 0
TopIndex = -1
end
end
object tsLocations: TTabSheet
Caption = 'Locations'
ClientHeight = 502
ClientWidth = 216
ClientHeight = 495
ClientWidth = 218
object btnClearLocations: TSpeedButton
AnchorSideLeft.Control = btnDeleteLocation
AnchorSideLeft.Side = asrBottom
@ -640,7 +641,7 @@ object frmMain: TfrmMain
Left = 128
Height = 22
Hint = 'Clear'
Top = 460
Top = 453
Width = 23
BorderSpacing.Left = 4
Color = clBtnFace
@ -693,7 +694,7 @@ object frmMain: TfrmMain
Left = 101
Height = 22
Hint = 'Delete'
Top = 460
Top = 453
Width = 23
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 4
@ -745,7 +746,7 @@ object frmMain: TfrmMain
Left = 74
Height = 22
Hint = 'Add'
Top = 460
Top = 453
Width = 23
Anchors = [akTop, akRight]
BorderSpacing.Right = 4
@ -799,9 +800,9 @@ object frmMain: TfrmMain
AnchorSideBottom.Control = btnDeleteLocation
Cursor = 63
Left = 4
Height = 438
Height = 431
Top = 18
Width = 208
Width = 210
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Around = 4
BorderStyle = bsSingle
@ -816,7 +817,7 @@ object frmMain: TfrmMain
item
Position = 1
Text = 'Name'
Width = 129
Width = 131
end>
Header.DefaultHeight = 17
Header.Options = [hoAutoResize, hoColumnResize, hoDrag, hoVisible]
@ -1024,7 +1025,7 @@ object frmMain: TfrmMain
AnchorSideBottom.Control = spChat
Left = 224
Height = 22
Top = 416
Top = 413
Width = 542
Anchors = [akLeft, akRight, akBottom]
BevelInner = bvRaised
@ -1037,7 +1038,7 @@ object frmMain: TfrmMain
Left = 10
Height = 18
Top = 2
Width = 101
Width = 104
Align = alLeft
BorderSpacing.Left = 8
Caption = 'Chat and Messages'
@ -1058,7 +1059,7 @@ object frmMain: TfrmMain
AnchorSideBottom.Control = pnlBottom
Left = 224
Height = 109
Top = 443
Top = 440
Width = 542
Anchors = [akTop, akLeft, akRight, akBottom]
BevelOuter = bvNone
@ -1069,7 +1070,7 @@ object frmMain: TfrmMain
object vstChat: TVirtualStringTree
Cursor = 63
Left = 0
Height = 88
Height = 90
Top = 0
Width = 542
Align = alClient
@ -1107,8 +1108,8 @@ object frmMain: TfrmMain
end
object edChat: TEdit
Left = 0
Height = 21
Top = 88
Height = 19
Top = 90
Width = 542
Align = alBottom
OnKeyPress = edChatKeyPress
@ -1123,7 +1124,7 @@ object frmMain: TfrmMain
Cursor = crVSplit
Left = 224
Height = 5
Top = 438
Top = 435
Width = 542
Align = alNone
Anchors = [akLeft, akRight, akBottom]
@ -1140,7 +1141,7 @@ object frmMain: TfrmMain
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = pnlChatHeader
Left = 224
Height = 392
Height = 389
Top = 24
Width = 542
Anchors = [akTop, akLeft, akRight, akBottom]

View File

@ -826,7 +826,18 @@ begin
FLocationsFile := FAppDir + 'Locations.dat';
vstLocations.NodeDataSize := SizeOf(TLocationInfo);
if FileExists(FLocationsFile) then vstLocations.LoadFromFile(FLocationsFile);
try
if FileExists(FLocationsFile) then
vstLocations.LoadFromFile(FLocationsFile);
except
on E: EVirtualTreeError do
begin
MessageDlg('Warning', 'The Locations could not be loaded. Most likely it is an' + LineEnding +
'outdated version or the file is damaged.' + LineEnding + LineEnding +
'A backup will be made as "Locations.bak".', mtWarning, [mbOK], 0);
RenameFile(FLocationsFile, FAppDir + 'Locations.bak');
end;
end;
RegisterPacketHandler($0C, TPacketHandler.Create(0, @OnClientHandlingPacket));
@ -897,7 +908,22 @@ end;
procedure TfrmMain.cbRandomPresetChange(Sender: TObject);
begin
if cbRandomPreset.ItemIndex > -1 then
vdtRandom.LoadFromFile(FRandomPresetLocation + cbRandomPreset.Text + '.dat');
begin
try
vdtRandom.LoadFromFile(FRandomPresetLocation + cbRandomPreset.Text + '.dat');
except
on EVirtualTreeError do
begin
if MessageDlg('Error', 'The profile could not be loaded. Most likely it is an' + LineEnding +
'outdated version or the file is damaged.' + LineEnding + LineEnding +
'Should this profile be deleted now?', mtError, [mbYes, mbNo], 0) = mrYes then
begin
DeleteFile(FRandomPresetLocation + cbRandomPreset.Text + '.dat');
cbRandomPreset.Items.Delete(cbRandomPreset.ItemIndex);
end;
end;
end;
end;
end;
procedure TfrmMain.btnAddRandomClick(Sender: TObject);