Delphi-Quellcode:
procedure TCsImage.SetDisabledPicture(Value: TPicture);
begin
if FDisabledPicture <> Value then
begin
FDisabledPicture.Assign(Value);
RefreshPicture;
end;
end;
FDisabledPicture wird in Deinem Fall IMMER ungleich Value sein, da Du Deinem privaten Feld NICHT Value zuweist, sondern nur die fremden BILDINHALTE in Dein privates Feld kopierst.
Es ist wohl eine etwas unkonventionelle Verfahrensweise, im Setter nur die Daten zu übernehmen - aber natürlich möglich.
Du könntest Dir MyLastValue merken (weißt dann aber auch nicht, ob noch das gleiche Bild enthalten ist).
Besser wäre ein doppeltes Refresh mit einem privaten Flag zu blockieren:
Delphi-Quellcode:
procedure TCsImage.RefreshPicture;
begin
if RefreshFlag then
Exit;
RefreshFlag := True;
if (not Enabled) and Assigned(FDisabledPicture) then
inherited Picture.Assign(FDisabledPicture)
else if FDrawHovered and Assigned(FHoverPicture) then
inherited Picture.Assign(FHoverPicture)
else
inherited Picture.Assign(FPicture);
RefreshFlag := False;
end;
(sicherhaeitshalber vielleicht in try...finaly kapseln).
Ansonsten würde ich mal den Ablauf protokollieren (wann wird was aufgerufen), z.B. in eine Datei.