diff --git a/lcl/graphics.pp b/lcl/graphics.pp index c489c19b0c..a8ca6288df 100644 --- a/lcl/graphics.pp +++ b/lcl/graphics.pp @@ -1390,6 +1390,7 @@ type public constructor Create; override; destructor Destroy; override; + procedure Clear; procedure Delete(Aindex: Integer); function GetIndex(AFormat: TPixelFormat; AHeight, AWidth: Word): Integer; end; diff --git a/lcl/include/icon.inc b/lcl/include/icon.inc index 78f6b89df5..bf814d90fb 100644 --- a/lcl/include/icon.inc +++ b/lcl/include/icon.inc @@ -111,13 +111,18 @@ begin end; destructor TSharedIcon.Destroy; +begin + Clear; + FreeAndNil(FImages); + inherited Destroy; +end; + +procedure TSharedIcon.Clear; var n: Integer; begin for n := 0 to FImages.Count - 1 do TObject(FImages[n]).Free; - FreeAndNil(FImages); - inherited Destroy; end; function TSharedIcon.GetIndex(AFormat: TPixelFormat; AHeight, AWidth: Word): Integer; @@ -258,8 +263,15 @@ end; procedure TCustomIcon.Clear; begin - FreeSaveStream; - FCurrent := -1; + if not Empty then + begin + FreeSaveStream; + FSharedImage.Release; + FSharedImage := GetSharedImageClass.Create; + FSharedImage.Reference; + FCurrent := -1; + Changed(Self); + end; end; function TCustomIcon.BitmapHandleAllocated: boolean; diff --git a/lcl/include/rasterimage.inc b/lcl/include/rasterimage.inc index 891e2cf39d..aea8e2a34b 100644 --- a/lcl/include/rasterimage.inc +++ b/lcl/include/rasterimage.inc @@ -98,8 +98,12 @@ end; procedure TRasterImage.Clear; begin - FreeSaveStream; - SetSize(0, 0); + if not Empty then + begin + FreeSaveStream; + SetSize(0, 0); + Changed(Self); + end; end; procedure TRasterImage.BitmapHandleNeeded;