Genau für dieses Szenario gibt es extra die Klassen
TBrushRecall und
TFontRecall.
Eine sinnvolle Ergänzung wäre es, wenn man sich noch ein Interface dafür bauen würde, dann käme man für die meisten mit nur einer Zeile Code aus. Ansonsten sieht das so aus:
Delphi-Quellcode:
procedure WorkWithCanvas( ACanvas : TCanvas );
var
LBrushRecall : TBrushRecall;
begin
LBrushRecall := TBrushRecall.Create( ACanvas.Brush );
try
ACanvas.Brush.Color := clRed;
finally
LBrushRecall.Free;
end;
// Jetzt ist ACanvas.Brush wieder wie vorher
end;
Mit einem Interface könnte das so aussehen
Delphi-Quellcode:
procedure WorkWithCanvas( ACanvas : TCanvas );
begin
TBrushRecallFactory.Construct( ACanvas.Brush ); // erzeugt ein Interface
ACanvas.Brush.Color := clRed;
end;
// nach dem Verlassen der Methode wird die Interface Referenz zerstört
// damit auch der Recall und damit der ACanvas.Brush wieder hergestellt :o)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)