Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Abgeleitetes TImage - Delphi stürzt ab

  Alt 29. Jun 2011, 20:09
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat