AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

pmXOR-Grafikproblem

Ein Thema von Mysterio08 · begonnen am 5. Nov 2009 · letzter Beitrag vom 5. Nov 2009
Antwort Antwort
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#1

pmXOR-Grafikproblem

  Alt 5. Nov 2009, 16:40
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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with Image1.Canvas do
  begin
    Brush.Color := clRed;
    Ellipse(200, 50, 400, 200)
  end
end;
Nun möchte ich langsam einen Kreis über das Image wandern lassen, von links nach rechts. Zuerst lege ich Anfangskoordinaten fest:
Delphi-Quellcode:
x1: SmallInt = 10;
y1: SmallInt = 100;
x2: SmallInt = 60;
y2: SmallInt = 150;
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:
Delphi-Quellcode:
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;
Hier auch nochmal ein Bild meines Problem: Bild
Wie kann ich das umgehen?
mfg.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: pmXOR-Grafikproblem

  Alt 5. Nov 2009, 16:46
Delphi-Quellcode:
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;
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.

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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#3

Re: pmXOR-Grafikproblem

  Alt 5. Nov 2009, 16:56
Vielen Dank, ich habe es hinbekommen:
Delphi-Quellcode:
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;
Wie man erkennt, habe ich auch das Ereignis, wie vorgeschlagen, gewechselt.
mfg.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz