AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Probleme mit XOR-Zeichenmodus
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit XOR-Zeichenmodus

Ein Thema von Mysterio08 · begonnen am 15. Aug 2010 · letzter Beitrag vom 16. Aug 2010
Antwort Antwort
Mysterio08

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

Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 16:11
Hallo,

vorab: Wenn ich richtig informiert bin, kann ich, wenn ich den XOR-Zeichenmodus verwende, auf ein ständiges Löschen (z.B. eines Objekts durch Einfärben mit der Hintergrundfarbe) verzichten. Auf dieser Basis möchte ich nun einen Kreis über ein Formular wandern lassen, aber es klappt nicht so richtig. Hier mal ein wenig Code:
Delphi-Quellcode:
procedure TForm1.DrawCircle;
begin
  Canvas.Ellipse(x-Radius, 100-Radius, x+Radius, 100+Radius);
  Inc(x, 10)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Canvas.Brush.Style := bsClear;
  Canvas.Pen.Mode := pmXOR;
  Canvas.Pen.Color := clBlack or clBtnFace
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
  DrawCircle
end;
Die Variablen x und Radius werden global deklariert und gleich initialisiert.
Ich weiß nicht, woran es liegt und ob es so überhaupt funktioniert, aber ich brauche eine Alternative zu dem konventionellen Löschen, welches ich oben erklärt habe.

mfg.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 16:39
Du musst bei XOR immer alles doppelt zeichnen, einmal um die alte Zeichnung aufzuheben, und das zweite mal um die neue Zeichnung zu zeichnen. Wirklich etwas sparen tust du dir dadurch also nicht, eher handelst dir Ärger ein...
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

AW: Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 17:15
Dem stimme ich zu.

Nützlich ist so etwas für zB. Floating Rectangles, so ein Auswahlrechteckdingens. ( zB. in Mandelbrötchen )
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Mysterio08

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

AW: Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 17:29
Das man sich damit oft Ärger einhandelt, habe ich schon gemerkt...

Gibt es aber generell einen Zeichenmodus, bei welchem ich eine "alte" Grafik nicht wieder mit der Hintergrundfarbe einfärben muss? Angenommen, ich habe einen Verlauf auf einem TImage gezeichnet und möchte dann nur einen Kreis "rauslöschen" (ich habe mir TheMandelBrot mal angeschaut, aber da kommt das nicht zum Tragen, wenn ich das richtig beurteile).
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 17:44
Der Gold-Standard ist es, den Hintergrund als separates Bitmap vorzuhalten, diesen immer wieder neu auf die Anzeige zu kleistern, und darauf dann die beweglichen Teile immer wieder neu zu zeichnen. Alles andere ist Rumgehampel, dass bestenfalls zu Fehleranfälligkeit führt.

Bei eher großen/komplexen Dingen kann es sich ggf. lohnen die von den dynamischen Teilen überdeckten Bereiche zu speichern (als Rect), und nur diese mit dem Hintergrund zu übernageln, wie es Windows z.B. selbst auch macht (InvalidateRect() und Co.), wobei das auch schnell in viel Aufwand für wenig Nutzen ausarten kann. Bitmaps hin- und herblitten gehört mit zu den einfacheren Aufgaben für einen PC.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 18:44
Gibt es aber generell einen Zeichenmodus, bei welchem ich eine "alte" Grafik nicht wieder mit der Hintergrundfarbe einfärben muss?
Nein, natürlich nicht. Wie sollte das funktionieren? Eine einmal überschriebene Information ist eben für immer weg. Du musst schon selbst dafür sorgen, dass irgendwo eine Kopie zwischengespeichert wird.
  Mit Zitat antworten Zitat
LargoD

Registriert seit: 8. Jun 2007
42 Beiträge
 
#7

AW: Probleme mit XOR-Zeichenmodus

  Alt 15. Aug 2010, 21:22
Gibt es aber generell einen Zeichenmodus, bei welchem ich eine "alte" Grafik nicht wieder mit der Hintergrundfarbe einfärben muss?
Alles was Du im XOR-Mode gezeichnet hast, kannst Du auch im XOR-Mode wieder löschen, indem Du es noch mal zeichnest.
Ich habe Dein Programm quick and dirty hingefummelt, damit Du das Prinzip siehst.

Delphi-Quellcode:
procedure TForm1.SetXOR;
begin
  Canvas.Brush.Style := bsClear;
  Canvas.Pen.Mode := pmXOR;
  Canvas.Pen.Style := psSolid;
  Canvas.Pen.Color := clBlack or clBtnFace;
end;

procedure TForm1.DrawCircle;
begin
  SetXOR;
  Canvas.Ellipse(x-Radius, 100-Radius, x+Radius, 100+Radius);
  x := (X+2) mod 200;
  Canvas.Ellipse(x-Radius, 100-Radius, x+Radius, 100+Radius);
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
  DrawCircle;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  x := 15; Radius := 10;
  SetXOR;
  Canvas.Ellipse(x-Radius, 100-Radius, x+Radius, 100+Radius);
  tmr1.Enabled := True;
end;
Gruß
Erich
  Mit Zitat antworten Zitat
Mysterio08

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

AW: Probleme mit XOR-Zeichenmodus

  Alt 16. Aug 2010, 06:48
Vielen Dank für Deine Antwort, LargoD! So etwas hilft mir wirklich weiter. Soweit, wie ich das jetzt sehe, kann ich das auch auf andere Probleme/Aufgabenstellungen beziehen!

Danke
  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:16 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