![]() |
pmXOR-Grafikproblem
Guten Tag Programmierer,
beim Programmieren von Grafiken ist gerade ein Problem mit dem Pen.Mode := pmXOR aufgetaucht. Zuerst erstelle ich eine Ellipse auf dem Image:
Delphi-Quellcode:
Nun möchte ich langsam einen Kreis über das Image wandern lassen, von links nach rechts. Zuerst lege ich Anfangskoordinaten fest:
procedure TForm1.FormCreate(Sender: TObject);
begin with Image1.Canvas do begin Brush.Color := clRed; Ellipse(200, 50, 400, 200) end end;
Delphi-Quellcode:
Mit einem Timer bewege ich den Kreis nun über die Fläche, was auch soweit funktioniert. Der Kreis "zerstört" die Ellipse auch nicht, sondern der Hintergrund des Kreises wird, wie gewünscht, schwarz. Das einzige Problem ist die Anfangsdarstellung des Kreises, es sieht aus, als ob ein Kreis aus einen anderen Kreis schlüpft, aber hier der Code:
x1: SmallInt = 10;
y1: SmallInt = 100; x2: SmallInt = 60; y2: SmallInt = 150;
Delphi-Quellcode:
Hier auch nochmal ein Bild meines Problem:
procedure TForm1.Timer1Timer(Sender: TObject);
begin Image1.Canvas.Pen.Mode := pmXOR; Image1.Canvas.Ellipse(x1, y1, x2, y2); Inc(x1, 5); Inc(x2, 5); Image1.Canvas.Ellipse(x1, y1, x2, y2) end; ![]() Wie kann ich das umgehen? mfg. |
Re: pmXOR-Grafikproblem
Delphi-Quellcode:
Also der erste Ellipse Befehl wird dir den alten Kreis löschen, der zweite Ellipse Befehl zeichnet dir versetzt einen neuen. Soweit so gut, aber im ersten Timerschritt gibt es wohl keinen Kreis zum löschen, d.h. da würde der zweite Ellipse Befehl ausreichen.
procedure TForm1.Timer1Timer(Sender: TObject);
begin Image1.Canvas.Pen.Mode := pmXOR; Image1.Canvas.Ellipse(x1, y1, x2, y2); Inc(x1, 5); Inc(x2, 5); Image1.Canvas.Ellipse(x1, y1, x2, y2) end; Ich würde da, wo du das Programm initialisierst und auch den roten Kreis zeichnest (auf jedenfall bevor der Timer startet), einfach einmal mit pmXOR den ersten Ellipse-Befehl ausführen, sodass schonmal 1 Kreis da ist, der im ersten Timerschritt gelöscht werden kann :) //edit: Ich würde übrigens den roten Kreis nicht beim Formcreate Ereignis zeichnen lassen. Theoretisch kann es sein, dass eine Komponente wie das Image noch nicht erstellt worden sind und dann gibts ne unschöne AV. Nimm besser das Ereignis FormShow. Grüße |
Re: pmXOR-Grafikproblem
Vielen Dank, ich habe es hinbekommen:
Delphi-Quellcode:
Wie man erkennt, habe ich auch das Ereignis, wie vorgeschlagen, gewechselt.
procedure TForm1.FormShow(Sender: TObject);
begin with Image1.Canvas do begin Brush.Color := clRed; Ellipse(200, 50, 400, 200); Image1.Canvas.Pen.Mode := pmXOR; Ellipse(x1, y1, x2, y2); end end; procedure TForm1.Timer1Timer(Sender: TObject); begin Image1.Canvas.Ellipse(x1, y1, x2, y2); Inc(x1, 5); Inc(x2, 5); Image1.Canvas.Ellipse(x1, y1, x2, y2) end; mfg. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 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 by Thomas Breitkreuz