![]() |
Probleme mit TBrushRecall
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:
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).
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; 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; |
AW: Probleme mit TBrushRecall
Evtl. habe ich den Fehler. Der erste Code enthält u. U. einen kleinen Fehler. Dazu kommt, dass an einer andere Stelle des Programm es auch einen anderen kleinen Fehler gibt. Und so wie es aussieht haben sich diese zufällig gegenseitig aufgehoben. So das die Fehler nie aufgefallen sind. Der zweite Code macht anscheinend alles richtig.
Aber es ist zu spät um noch logisch zu denken. Ich überprüfe es morgen richtig. |
AW: Probleme mit TBrushRecall
Ich würde hier einfach mal einen Breakpoint setzen und Canvas.Brush.Style.Color im Überwachungsfenster (überwachte Ausdrücke) kontrollieren. Dann siehst du ja genau, welche Farbe wann und wo übergeben/eingestellt wird.
|
AW: Probleme mit TBrushRecall
Ja, wie ich es mir gedacht habe: kleiner Fehler plus kleiner Fehler ergibt einmal richtig :-D . Bösewicht ist diese Zeile:
Delphi-Quellcode:
Die hätte ich nach dem Füllen zurücksetzten müssen, aber ich dachte mir damals es ist unwichtig. Dann hab ich die Prozedur einmal mit der neuen Farbe aufgerufen, beim zweiten mal mit der Brush Farbe. Und da Brush.Color beim ersten mal schon umgestellt wurde, war das Ergebnis beim zweiten Mal zufällig richtig.
Brush.Color := AColor;
|
AW: Probleme mit TBrushRecall
Zitat:
Hab es ja selbst auch erlebt. :) Da Fehler zu finden kann Stunden dauern. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz