From 6eaf10e73e9a6e8b2f200d90c664f25d8dbf799d Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sun, 6 Dec 2009 20:03:24 +0100 Subject: [PATCH] - Added error handling when loading Locations and Profiles (fixes #2) --- Client/UfrmMain.lfm | 131 ++++++++++++++++++++++---------------------- Client/UfrmMain.pas | 30 +++++++++- 2 files changed, 94 insertions(+), 67 deletions(-) diff --git a/Client/UfrmMain.lfm b/Client/UfrmMain.lfm index 4d46e4a..650fb9f 100644 --- a/Client/UfrmMain.lfm +++ b/Client/UfrmMain.lfm @@ -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] diff --git a/Client/UfrmMain.pas b/Client/UfrmMain.pas index 48e3d7e..132b1e4 100644 --- a/Client/UfrmMain.pas +++ b/Client/UfrmMain.pas @@ -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);