From 6197f5463c21497526890cace6c015e1d30251df Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Tue, 13 Apr 2010 10:04:05 +0000 Subject: [PATCH] Fixed: ClearCollection removed keys instead of sections Fixed: TX2FormPosSettings does not apply the form size if not initialized --- X2UtPersist.pas | 82 ++++++++++++++++++++--------------------- X2UtPersistForm.pas | 74 +++++++++++++++++++++++++++++-------- X2UtPersistIntf.pas | 6 +-- X2UtPersistRegistry.pas | 22 +++++------ 4 files changed, 114 insertions(+), 70 deletions(-) diff --git a/X2UtPersist.pas b/X2UtPersist.pas index 8e6d338..60ed1a8 100644 --- a/X2UtPersist.pas +++ b/X2UtPersist.pas @@ -28,8 +28,8 @@ type function Read(AObject: TObject): Boolean; virtual; procedure Write(AObject: TObject); virtual; - function CreateReader(): IX2PersistReader; virtual; - function CreateWriter(): IX2PersistWriter; virtual; + function CreateReader: IX2PersistReader; virtual; + function CreateWriter: IX2PersistWriter; virtual; function CreateSectionReader(const ASection: String): IX2PersistReader; virtual; function CreateSectionWriter(const ASection: String): IX2PersistWriter; virtual; @@ -54,12 +54,12 @@ type property Sections: TStrings read FSections; public constructor Create(AIsReader: Boolean); - destructor Destroy(); override; + destructor Destroy; override; { IX2PersistFiler } function BeginSection(const AName: String): Boolean; virtual; - procedure EndSection(); virtual; + procedure EndSection; virtual; procedure GetKeys(const ADest: TStrings); virtual; abstract; procedure GetSections(const ADest: TStrings); virtual; abstract; @@ -88,7 +88,7 @@ type function WriteInt64(const AName: String; AValue: Int64): Boolean; virtual; abstract; function WriteStream(const AName: String; AStream: TStream): Boolean; virtual; - procedure ClearCollection(); virtual; + procedure ClearCollection; virtual; procedure WriteCollection(ACollection: TCollection); virtual; procedure DeleteKey(const AName: String); virtual; abstract; @@ -123,7 +123,7 @@ type { IX2PersistFiler } function BeginSection(const AName: String): Boolean; - procedure EndSection(); + procedure EndSection; procedure GetKeys(const ADest: TStrings); procedure GetSections(const ADest: TStrings); @@ -152,18 +152,18 @@ type procedure DeleteSection(const AName: String); public constructor Create(const AFiler: IX2PersistFiler; const ASection: String); - destructor Destroy(); override; + destructor Destroy; override; end; { TX2CustomPersist } -function TX2CustomPersist.CreateReader(): IX2PersistReader; +function TX2CustomPersist.CreateReader: IX2PersistReader; begin Result := (CreateFiler(True) as IX2PersistReader); end; -function TX2CustomPersist.CreateWriter(): IX2PersistWriter; +function TX2CustomPersist.CreateWriter: IX2PersistWriter; begin Result := (CreateFiler(False) as IX2PersistWriter); end; @@ -171,26 +171,26 @@ end; function TX2CustomPersist.CreateSectionReader(const ASection: String): IX2PersistReader; begin - Result := (TX2PersistSectionFilerProxy.Create(CreateReader(), ASection) as IX2PersistReader); + Result := (TX2PersistSectionFilerProxy.Create(CreateReader, ASection) as IX2PersistReader); end; function TX2CustomPersist.CreateSectionWriter(const ASection: String): IX2PersistWriter; begin - Result := (TX2PersistSectionFilerProxy.Create(CreateWriter(), ASection) as IX2PersistWriter); + Result := (TX2PersistSectionFilerProxy.Create(CreateWriter, ASection) as IX2PersistWriter); end; function TX2CustomPersist.Read(AObject: TObject): Boolean; begin - with CreateReader() do + with CreateReader do Result := Read(AObject); end; procedure TX2CustomPersist.Write(AObject: TObject); begin - with CreateWriter() do + with CreateWriter do Write(AObject); end; @@ -198,14 +198,14 @@ end; { TX2CustomPersistFiler } constructor TX2CustomPersistFiler.Create(AIsReader: Boolean); begin - inherited Create(); + inherited Create; FIsReader := AIsReader; - FSections := TStringList.Create(); + FSections := TStringList.Create; end; -destructor TX2CustomPersistFiler.Destroy(); +destructor TX2CustomPersistFiler.Destroy; begin FreeAndNil(FSections); @@ -236,7 +236,7 @@ begin end; -procedure TX2CustomPersistFiler.EndSection(); +procedure TX2CustomPersistFiler.EndSection; begin Assert(FSections.Count > 0, 'EndSection called without BeginSection'); FSections.Delete(Pred(FSections.Count)); @@ -385,7 +385,7 @@ begin try AContinue := Read(objectProp); finally - EndSection(); + EndSection; end; end; end; @@ -496,7 +496,7 @@ begin try Write(objectProp); finally - EndSection(); + EndSection; end; end; end; @@ -514,22 +514,22 @@ var begin if ReadInteger(CollectionCountName, itemCount) then begin - ACollection.BeginUpdate(); + ACollection.BeginUpdate; try - ACollection.Clear(); + ACollection.Clear; for itemIndex := 0 to Pred(itemCount) do begin if BeginSection(CollectionItemNamePrefix + IntToStr(itemIndex)) then try - collectionItem := ACollection.Add(); + collectionItem := ACollection.Add; Read(collectionItem); finally - EndSection(); + EndSection; end; end; finally - ACollection.EndUpdate(); + ACollection.EndUpdate; end; end; end; @@ -546,23 +546,23 @@ begin end; -procedure TX2CustomPersistFiler.ClearCollection(); +procedure TX2CustomPersistFiler.ClearCollection; var - keyNames: TStringList; - keyIndex: Integer; + sections: TStringList; + sectionIndex: Integer; begin inherited; - keyNames := TStringList.Create(); + sections := TStringList.Create; try - GetKeys(keyNames); + GetSections(sections); - for keyIndex := 0 to Pred(keyNames.Count) do - if SameTextS(keyNames[keyIndex], CollectionItemNamePrefix) then - DeleteKey(keyNames[keyIndex]); + for sectionIndex := 0 to Pred(sections.Count) do + if SameTextS(sections[sectionIndex], CollectionItemNamePrefix) then + DeleteSection(sections[sectionIndex]); finally - FreeAndNil(keyNames); + FreeAndNil(sections); end; end; @@ -572,7 +572,7 @@ var itemIndex: Integer; begin - ClearCollection(); + ClearCollection; WriteInteger(CollectionCountName, ACollection.Count); for itemIndex := 0 to Pred(ACollection.Count) do @@ -581,7 +581,7 @@ begin try Write(ACollection.Items[itemIndex]); finally - EndSection(); + EndSection; end; end; end; @@ -610,7 +610,7 @@ var undoIndex: Integer; begin - inherited Create(); + inherited Create; FFiler := AFiler; @@ -625,7 +625,7 @@ begin begin { Undo all sections so far } for undoIndex := 0 to Pred(SectionCount) do - Filer.EndSection(); + Filer.EndSection; FFiler := nil; Break; @@ -636,14 +636,14 @@ begin end; -destructor TX2PersistSectionFilerProxy.Destroy(); +destructor TX2PersistSectionFilerProxy.Destroy; var sectionIndex: Integer; begin if Assigned(Filer) then for sectionIndex := 0 to Pred(SectionCount) do - Filer.EndSection(); + Filer.EndSection; inherited; end; @@ -677,10 +677,10 @@ begin end; -procedure TX2PersistSectionFilerProxy.EndSection(); +procedure TX2PersistSectionFilerProxy.EndSection; begin if Assigned(Filer) then - Filer.EndSection(); + Filer.EndSection ; end; diff --git a/X2UtPersistForm.pas b/X2UtPersistForm.pas index ae25225..6d9c09c 100644 --- a/X2UtPersistForm.pas +++ b/X2UtPersistForm.pas @@ -24,9 +24,15 @@ type FMaximized: Boolean; FTop: Integer; FWidth: Integer; - - function GetBounds(): TRect; + FBoundsSet: Boolean; + + function GetBounds: TRect; procedure SetBounds(const Value: TRect); + procedure SetHeight(const Value: Integer); + procedure SetLeft(const Value: Integer); + procedure SetMaximized(const Value: Boolean); + procedure SetTop(const Value: Integer); + procedure SetWidth(const Value: Integer); protected procedure AssignTo(Dest: TPersistent); override; public @@ -34,11 +40,11 @@ type property Bounds: TRect read GetBounds write SetBounds; published - property Maximized: Boolean read FMaximized write FMaximized; - property Left: Integer read FLeft write FLeft; - property Top: Integer read FTop write FTop; - property Width: Integer read FWidth write FWidth; - property Height: Integer read FHeight write FHeight; + property Maximized: Boolean read FMaximized write SetMaximized; + property Left: Integer read FLeft write SetLeft; + property Top: Integer read FTop write SetTop; + property Width: Integer read FWidth write SetWidth; + property Height: Integer read FHeight write SetHeight; end; @@ -65,7 +71,7 @@ var formPos: TX2FormPosSettings; begin - formPos := TX2FormPosSettings.Create(); + formPos := TX2FormPosSettings.Create; try formPos.Assign(AForm); AReader.Read(formPos); @@ -81,7 +87,7 @@ var formPos: TX2FormPosSettings; begin - formPos := TX2FormPosSettings.Create(); + formPos := TX2FormPosSettings.Create; try formPos.Assign(AForm); AWriter.Write(formPos); @@ -101,7 +107,7 @@ begin if Source is TCustomForm then begin sourceForm := TProtectedCustomForm(Source); - FMaximized := (sourceForm.WindowState = wsMaximized); + Maximized := (sourceForm.WindowState = wsMaximized); FillChar(placement, SizeOf(TWindowPlacement), #0); placement.length := SizeOf(TWindowPlacement); @@ -120,6 +126,9 @@ var boundsRect: TRect; begin + if not FBoundsSet then + Exit; + if Dest is TCustomForm then begin destForm := TProtectedCustomForm(Dest); @@ -143,7 +152,7 @@ begin end; -function TX2FormPosSettings.GetBounds(): TRect; +function TX2FormPosSettings.GetBounds: TRect; begin Result := Rect(FLeft, FTop, FLeft + FWidth, FTop + FHeight); end; @@ -151,10 +160,45 @@ end; procedure TX2FormPosSettings.SetBounds(const Value: TRect); begin - FLeft := Value.Left; - FTop := Value.Top; - FWidth := RectWidth(Value); - FHeight := RectHeight(Value); + Left := Value.Left; + Top := Value.Top; + Width := RectWidth(Value); + Height := RectHeight(Value); +end; + + +procedure TX2FormPosSettings.SetHeight(const Value: Integer); +begin + FHeight := Value; + FBoundsSet := True; +end; + + +procedure TX2FormPosSettings.SetLeft(const Value: Integer); +begin + FLeft := Value; + FBoundsSet := True; +end; + + +procedure TX2FormPosSettings.SetMaximized(const Value: Boolean); +begin + FMaximized := Value; + FBoundsSet := True; +end; + + +procedure TX2FormPosSettings.SetTop(const Value: Integer); +begin + FTop := Value; + FBoundsSet := True; +end; + + +procedure TX2FormPosSettings.SetWidth(const Value: Integer); +begin + FWidth := Value; + FBoundsSet := True; end; end. diff --git a/X2UtPersistIntf.pas b/X2UtPersistIntf.pas index fd9991e..18178f5 100644 --- a/X2UtPersistIntf.pas +++ b/X2UtPersistIntf.pas @@ -29,8 +29,8 @@ type function Read(AObject: TObject): Boolean; procedure Write(AObject: TObject); - function CreateReader(): IX2PersistReader; - function CreateWriter(): IX2PersistWriter; + function CreateReader: IX2PersistReader; + function CreateWriter: IX2PersistWriter; function CreateSectionReader(const ASection: String): IX2PersistReader; function CreateSectionWriter(const ASection: String): IX2PersistWriter; @@ -40,7 +40,7 @@ type IX2PersistFiler = interface ['{BF63CDAA-98D4-42EE-A937-DFCD0074A0ED}'] function BeginSection(const AName: String): Boolean; - procedure EndSection(); + procedure EndSection; procedure GetKeys(const ADest: TStrings); procedure GetSections(const ADest: TStrings); diff --git a/X2UtPersistRegistry.pas b/X2UtPersistRegistry.pas index e86d3f9..533b034 100644 --- a/X2UtPersistRegistry.pas +++ b/X2UtPersistRegistry.pas @@ -25,7 +25,7 @@ type protected function CreateFiler(AIsReader: Boolean): IX2PersistFiler; override; public - constructor Create(); + constructor Create; property Key: String read FKey write FKey; property RootKey: HKEY read FRootKey write FRootKey; @@ -40,7 +40,7 @@ type function OpenKey(const ANewKey: String): Boolean; public function BeginSection(const AName: String): Boolean; override; - procedure EndSection(); override; + procedure EndSection; override; procedure GetKeys(const ADest: TStrings); override; @@ -70,7 +70,7 @@ type property Registry: TRegistry read FRegistry; public constructor Create(AIsReader: Boolean; ARootKey: HKEY; const AKey: String); - destructor Destroy(); override; + destructor Destroy; override; end; @@ -93,32 +93,32 @@ const { Wrapper functions } function ReadFromRegistry(AObject: TObject; const AKey: String; ARootKey: HKEY): Boolean; begin - with TX2UtPersistRegistry.Create() do + with TX2UtPersistRegistry.Create do try RootKey := ARootKey; Key := AKey; Result := Read(AObject); finally - Free(); + Free; end; end; procedure WriteToRegistry(AObject: TObject; const AKey: String; ARootKey: HKEY); begin - with TX2UtPersistRegistry.Create() do + with TX2UtPersistRegistry.Create do try RootKey := ARootKey; Key := AKey; Write(AObject); finally - Free(); + Free; end; end; { TX2UtPersistRegistry } -constructor TX2UtPersistRegistry.Create(); +constructor TX2UtPersistRegistry.Create; begin inherited; @@ -140,7 +140,7 @@ begin if AIsReader then FRegistry := TRegistry.Create(KEY_READ) else - FRegistry := TRegistry.Create(); + FRegistry := TRegistry.Create; FRegistry.RootKey := ARootKey; FKey := AKey; @@ -149,7 +149,7 @@ begin end; -destructor TX2UtPersistRegistryFiler.Destroy(); +destructor TX2UtPersistRegistryFiler.Destroy; begin FreeAndNil(FRegistry); @@ -195,7 +195,7 @@ begin end; -procedure TX2UtPersistRegistryFiler.EndSection(); +procedure TX2UtPersistRegistryFiler.EndSection; begin inherited;