diff --git a/lcl/buttons.pp b/lcl/buttons.pp index a57da4bef2..44de84f2f2 100644 --- a/lcl/buttons.pp +++ b/lcl/buttons.pp @@ -87,6 +87,7 @@ type function GetWidth: Integer; procedure SetGlyph(Value: TBitmap); procedure SetNumGlyphs(Value: TNumGlyphs); + procedure ClearImages; protected // IUnknown function QueryInterface(const iid: tguid; out obj): longint; stdcall; diff --git a/lcl/include/bitbtn.inc b/lcl/include/bitbtn.inc index 64bc48e987..0059c757ce 100644 --- a/lcl/include/bitbtn.inc +++ b/lcl/include/bitbtn.inc @@ -148,11 +148,11 @@ end; procedure TCustomBitBtn.SetNumGlyphs(AValue: Integer); begin if AValue < 0 then AValue := 1; - if AValue > 4 then AValue := 4; + if AValue > High(TNumGlyphs) then AValue := High(TNumGlyphs); if AValue <> FButtonGlyph.NumGlyphs then Begin - FButtonGlyph.NumGlyphs := TNumGlyphs(AValue); + FButtonGlyph.NumGlyphs := TNumGlyphs(AValue); Invalidate; end; end; diff --git a/lcl/include/buttonglyph.inc b/lcl/include/buttonglyph.inc index 5edb3b66fc..b516359a29 100644 --- a/lcl/include/buttonglyph.inc +++ b/lcl/include/buttonglyph.inc @@ -95,10 +95,10 @@ begin begin if FOriginal.Width mod FOriginal.Height = 0 then begin - GlyphCount:= FOriginal.Width div FOriginal.Height; - if GlyphCount > 4 then - GlyphCount:= 1; - FNumGlyphs:= TNumGlyphs(GlyphCount); + GlyphCount := FOriginal.Width div FOriginal.Height; + if GlyphCount > High(TNumGlyphs) then + GlyphCount := Low(TNumGlyphs); + FNumGlyphs := TNumGlyphs(GlyphCount); end; end; GlyphChanged(FOriginal); @@ -126,6 +126,7 @@ begin begin FImagesCache.UnregisterListener(Self); FImagesCache := nil; // cache can free on unregister + ClearImages; end; if (FOriginal.Width > 0) and (FOriginal.Height > 0) then @@ -179,6 +180,15 @@ begin end; end; +procedure TButtonGlyph.ClearImages; +var + i: TButtonState; +begin + FImages := nil; + for i := Low(TButtonState) to High(TButtonState) do + FImageIndexes[i] := -1; +end; + function TButtonGlyph.QueryInterface(const iid: tguid; out obj): longint; stdcall; begin if GetInterface(iid, obj) then diff --git a/lcl/include/speedbutton.inc b/lcl/include/speedbutton.inc index 20423c5ad7..a99d8f585c 100644 --- a/lcl/include/speedbutton.inc +++ b/lcl/include/speedbutton.inc @@ -238,11 +238,11 @@ end; procedure TCustomSpeedButton.SetNumGlyphs(Value : integer); Begin if Value < 0 then Value := 1; - if Value > 4 then Value := 4; + if Value > High(TNumGlyphs) then Value := High(TNumGlyphs); if Value <> TButtonGlyph(fGlyph).NumGlyphs then Begin - TButtonGlyph(fGlyph).NumGlyphs := TNumGlyphs(Value); + TButtonGlyph(fGlyph).NumGlyphs := TNumGlyphs(Value); Invalidate; end; end;