Angeregt durch einen Beitrag, habe ich in einem meiner Projekte einige Prozeduren verändert und meinen plumpen Code durch den Tipp mit TBrushRecall & Co. ersetzt. Eigentlich klappt das in allen Prozeduren, nur bei einer kommen falsche Ergebnisse raus. Warum?
Beispiel: Brush.Color der Bitmap ist clYellow. Nun will ich einige Rechteck mit einer anderen Farbe füllen. Zuerst wird ein Rechteck weiß gefüllt, dann ein zweites gleich, anschließend mit einer kurzen Verzögerung werden beide grün überzeichnet. Dazu die erste Prozedur. Die funktioniert auch.
Delphi-Quellcode:
var
BrushStyle: TBrushStyle;
begin
with Bitmap.Canvas do
begin
BrushStyle := Brush.Style;
Brush.Style := bsSolid;
Brush.Color := AColor;
FillRect(GetCellRect(Col, Row));
Brush.Style := BrushStyle;
end;
end;
Diese Prozedur sollte eigentlich gleich funktionieren. Tut sie aber nicht. Das erste Rechteck wird noch mit weiß gefüllt, das zweite dann mit gelb (statt weiß), dann werden beide mit gelb überzeichnet (statt grün).
Beide Prozeduren werden mit den jeweiligen Farben aufgerufen, nicht etwa mit Brush.Color. Wieso reagiert die zweite Prozedur nicht auf die Farben?
Delphi-Quellcode:
var
LBrushRecall : TBrushRecall;
begin
with Bitmap.Canvas do
begin
LBrushRecall := TBrushRecall.Create(Brush);
try
Brush.Style := bsSolid;
Brush.Color := AColor;
FillRect(GetCellRect(Col, Row));
finally
LBrushRecall.Free;
end;
end;
end;