lcl: don't trigger TBitmap.OnChange while adding it to the imagelist cache.

git-svn-id: trunk@16231 -
This commit is contained in:
paul 2008-08-25 14:29:14 +00:00
parent 7a57600b98
commit b955aded7a

View File

@ -200,25 +200,33 @@ procedure TImageListCache.RegisterBitmap(AListener: IImageCacheListener; ABitmap
var
i, AStart, OldLen: Integer;
Item: PImageCacheItem;
OldOnChange: TNotifyEvent;
begin
RegisterListener(AListener);
Item := FItems.GetItemForListener(AListener);
if Item = nil then
begin
Item := FItems.GetNew;
Item^.FImageList := GetImageListFor(ABitmap.Width div ABitmapCount, ABitmap.Height);
Item^.FListener := AListener;
end;
OldOnChange := ABitmap.OnChange;
ABitmap.OnChange := nil; // prevent further updates
AStart := Item^.FImageList.Add(ABitmap, nil);
AListener.CacheSetImageList(Item^.FImageList);
OldLen := Length(Item^.FImageIndexes);
SetLength(Item^.FImageIndexes, OldLen + Item^.FImageList.Count - AStart);
for i := AStart to Item^.FImageList.Count - 1 do
begin
Item^.FImageIndexes[OldLen + i - AStart] := i;
AListener.CacheSetImageIndex(OldLen + i - AStart, i);
try
RegisterListener(AListener);
Item := FItems.GetItemForListener(AListener);
if Item = nil then
begin
Item := FItems.GetNew;
Item^.FImageList := GetImageListFor(ABitmap.Width div ABitmapCount, ABitmap.Height);
Item^.FListener := AListener;
end;
AStart := Item^.FImageList.Add(ABitmap, nil);
AListener.CacheSetImageList(Item^.FImageList);
OldLen := Length(Item^.FImageIndexes);
SetLength(Item^.FImageIndexes, OldLen + Item^.FImageList.Count - AStart);
for i := AStart to Item^.FImageList.Count - 1 do
begin
Item^.FImageIndexes[OldLen + i - AStart] := i;
AListener.CacheSetImageIndex(OldLen + i - AStart, i);
end;
finally
ABitmap.OnChange := OldOnChange;
end;
end;
@ -339,3 +347,4 @@ end;
end.