Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#21

AW: Zeichnen auf Canvas und ZOrder bzw. Übermalen

  Alt 2. Apr 2015, 13:10
Geht wohl nicht mit Boardmitteln...
Das ist wie mit Ockhams Rasiermesser: "Von mehreren möglichen Erklärungen desselben Sachverhalts ist die einfachste Theorie allen anderen vorzuziehen." Letztendlich stellte sich nie wirklich die Frage wo das Problem liegt, denn es konnte nur Pen.Mode sein. Pen.Mode macht so einen Sch...

Der Bösewicht findet sich in der Prozedur PrepareScale:
Delphi-Quellcode:
procedure TGraph.PrepareScale;
var
  gray: Integer;
begin
...
  // Koordinatenkreuz
  Image.Canvas.Pen.Mode := pmNotXor; //<<<--- hier
  Image.Canvas.MoveTo(xxc(xMin), yyc(0));
  Image.Canvas.LineTo(xxc(xMax), yyc(0));
...
Einmal eingestellt beleibt es über Prozeduren bestehen.


//EDIT:

Sorry, hab deinen letzten Beitrag #20 vor meinem Beitrag nicht gelesen. Anscheinend hast du schon selbst das Problem gefunden.
Zitat:
Aber würde mich trotzdem nochmal interessieren warum Pen.Mode und bsClear sich im Wege stehen...
Tun sie nicht. Zuerst mal, pmMergeNotPen war nur eine Möglichkeit, der Hinweis war, dass es Pen.Mode sein muss. Was Pen.Mode angeht, so hat er im Grunde keine Auswirkung auf bsClear. bsClear entscheidet ob ein Objekt eine Füllung hat oder nicht (oder Muster). Hat es keine Füllung, gilt im Objekt der alte Hintergrund. Aber das weißt du ja. Somit hat Pen.Mode keinen Einfluss auf Brush, er richtet sich einfach nach dem was im Hintergrund ist. Standardmäßig ist pmCopy eingestellt. Mit pmCopy zeichnet Pen mit der eingestellten Color Farbe. Ist pmBlack eingestellt, wird immer schwarz gezeichnet. Bei pmNotXor wird eine Farbe genommen die weder Pen Farbe ist, noch im Hintergrund vorkommt. Pen prüft also bevor es zeichnet die Farbe des Hintergrudes.

Also, Pen.Mode hat mit bsClear nichts zu tun.

Geändert von Popov ( 2. Apr 2015 um 13:30 Uhr)
  Mit Zitat antworten Zitat