AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi invertierend zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

invertierend zeichnen

Ein Thema von goddi · begonnen am 7. Jan 2004 · letzter Beitrag vom 7. Jan 2004
Antwort Antwort
goddi

Registriert seit: 6. Jan 2004
4 Beiträge
 
#1

invertierend zeichnen

  Alt 7. Jan 2004, 08:05
hi

ich will ein gezeichnetes rechteck auf meiner canvas verschieben. das will ich realisieren, indem ich das rechteck erst an den alten koordinaten lösche (indem ich es erneut invertiert zeichne) und danach an den neuen korrdinaten zeichne.

das funzt aber irgendwie ned.. ich bin ziemlicher delphi anfänger und hab keinen ahnung woran das liegt :[

hiermal der relevante code


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  [...]
  canvas.pen.mode := pmNOTXOR;
  canvas.brush.Style := bsSolid;
  canvas.Pen.Color := clblack;
  canvas.pen.width := 2;
end;

procedure tTeil.zeichnen;
begin
  Form1.Image.Canvas.Rectangle(x-20, y-20, x+20, y+20);
  if aktiv = true then
    Form1.Image.Canvas.Rectangle(x-18, y-18, x+18, y+18);
end;


procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var aktTeil, altTeil: tTeil;
begin
  ..
  [liest aus liste das in frage kommende Teil aus.. funzt 100%]
  ..
  if (cModus = 'verschieben') then
    begin
    altTeil.zeichnen;
    AktTeil.zeichnen;
    end;
  ..

hoffe ihr seht meinen fehler :]

greez
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#2

Re: invertierend zeichnen

  Alt 7. Jan 2004, 08:39
welcome to us, guddi,
also, ich weiss net was das notxor macht, aber wenn du einfach das dreieck mit der farbe des canvas, bzw. des hintergrundes zeichnest, dürfte des doch auch funzen, oder?
pfiad di,
heiopei
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#3

Re: invertierend zeichnen

  Alt 7. Jan 2004, 08:43
Hallo goddi,

herzlich willkommen bei der Delphi-PRAXiS!

Wenn ich Deinen Code richtig interpretiere, liegt das Problem daran, dass Du die Eigenschaften von Pen und Brush in der Methode FormCreate für die Zeichenfläche des Formulars, nicht aber für die des Bildes, auf dem Du später in zeichnen arbeitest, setzt.
Der Aufruf
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Canvas.Pen.Mode := pmNotXor;
ist gleichbeteutend mit
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Self.Canvas.Pen.Mode := pmNotXor;
und sollte stattdessen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image.Canvas.Pen.Mode := pmNotXor;
lautet?

Folgender Test funktioniert bei mir wie von Dir (annähernd) beschrieben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Image1.Canvas do
  begin
    Pen.Mode:= pmNotXor;
    Pen.Color:= clBlack;
    Pen.Width:= 2;

    MoveTo(10, 10);
    LineTo(100, 100);
  end;
end;
gruß, choose
  Mit Zitat antworten Zitat
goddi

Registriert seit: 6. Jan 2004
4 Beiträge
 
#4

Re: invertierend zeichnen

  Alt 7. Jan 2004, 08:47
nette begrüssung und danke choose, jetzt funzt es
  Mit Zitat antworten Zitat
goddi

Registriert seit: 6. Jan 2004
4 Beiträge
 
#5

Re: invertierend zeichnen

  Alt 7. Jan 2004, 15:16
grmpf jetzt hab ich doch noch ein problem:

mittels
Form1.Image.Canvas.Textout(x-10,y-5,'>=1'); platziere ich in dem viereck den string ">=1".

Ich kann das gesamte Objekt auf meiner Canvas langsam problemlos verschieben, verschiebe ich es jedoch etwas schneller oder lösche es, bleibt ">=1" stehen.

ich könnt natürlich einfach nochmal weiss drübermalen, aber das ist vielleicht nicht unbedingt die eleganteste Lösung.. weiss jemand rat?
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: invertierend zeichnen

  Alt 7. Jan 2004, 15:45
Wenn ich das richtig in Erinnerung habe, verwendet die Implementierung von TCanvas.TextOut nicht die Eigenschaften von TCanvas.Pen, so dass die Schrift in Farbe der von TCanvas.Font.Color übernommen wird und immer opaque, also ohne einen Bit-Filter (zB xor), gezeichnet wird. Der hintergrund hingegen wird von TCanvas.Brush übernommen.

Aus diesem Grund solltes Du die "doppelt zeichnen löscht wieder"-Strategie für die so erstellten Texte nicht verwenden können.
Alternativen wären zB ein Sichern des Bereiches (Ermitteln über TextExtend) und anschließendes zurückkopieren, bzw das zeichenen des Textes in eine Hilfsgrafik, die anschließend unter Verwendung eines Bit-Filters auf das tatsächliche Bild geblittet wird (TCanvas.CopyMode)...


BTW: Versuche bitte in Zukunft für jede neue Frage einen neuen Thread mit aussagekräftigem Titel und einer vollständigen Problembeschreibung zu erstellen. Das macht späteres Wiederfinden bei Recherchen deutlich einfacher.
gruß, choose
  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 16:00 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