AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Paintbox Zeichnung löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Paintbox Zeichnung löschen

Ein Thema von ferby · begonnen am 8. Aug 2006 · letzter Beitrag vom 27. Dez 2010
Antwort Antwort
Muetze1
(Gast)

n/a Beiträge
 
#1

Re: Paintbox Zeichnung löschen

  Alt 30. Sep 2006, 19:46
Zitat von ferby:
Delphi-Quellcode:
bm.Canvas.Brush.Color:=clblue;
bm.Canvas.Fillrect(bm.Canvas.ClipRect);
Das ist nicht ok - weil ClipRect den neu zu zeichnenden Bereich des Canvas angibt und dieses ist auch öfters kleiner als die Paintbox selber. Z.b. wenn du nur eine Ecke eines Fensters auf deine PaintBox schiebst und dann wieder wegbewegst oder minimierst. Nutze lieber bm.BoundsRect.
  Mit Zitat antworten Zitat
beastofchaos
(Gast)

n/a Beiträge
 
#2

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 16:11
Das Thema ist vll sehr alt, aber das Problem ist das selbe.
Ich arbeite mit Delphi 7 und will für mein MSA-Referat in Informatik (bin Schüler) mit meinem Freund ein Minigolfprogramm bauen.

Mein Ziel ist es, zur Richtung- und Geschwindigkeitsberechnung eine Linie von der Maus zur Kugel zu erzeugen. Bisher hab ich immer mit einem image gearbeitet. Jetzt versuch ich es, wegen besserer Handhabung mit Bitmap und Paintbox. Bei image gab es den Befehl "image.picture:=Nil;". Gibnt es wirklich keinen Befehl heutzutage, der das auch mit einer Bitmap/Paintbos macht?
Hier mal der Quelltext:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if not Timer1.Enabled then begin
bmp.Canvas.Pen.Color:=ClWhite;
bmp.Canvas.brush.Color:=ClWhite;
bmp.Canvas.MoveTo(trunc(d-PaintBox1.Left),trunc(e-PaintBox1.top));
bmp.Canvas.LineTo(Maus.x,Maus.y);
PaintBox1.Repaint;
bmp.Canvas.Brush.Color:=clBlue;
bmp.Canvas.Pen.Color:=ClBlack;
Maus:=PaintBox1.ScreentoClient(Mouse.CursorPos);
d:=(x1+x2)/2;
e:=(y1+y2)/2;
bmp.Canvas.MoveTo(trunc(d-PaintBox1.Left),trunc(e-PaintBox1.top));
bmp.Canvas.LineTo(Maus.x,Maus.y);
bmp.Canvas.Ellipse(x1,y1,x2,y2);
PaintBox1.Repaint;
end;
end;
Wie ihr seht, übermalt er mit Weiß die alte Linie und berechnet die neue. Leider blinkt die Linie imemr wieder und auch ein kleiner Teil in der Kugel (auch in Paintbox gezeichnet). Die Kugel ist innen Blau und dauernd geht halt ein weißer Strich über eine bestimmte Stelle. Könnt euch das auch mal selbst anschauen, hier eine Zip-Satei mit allen Dateien: http://rapidshare.com/files/439357797/Test.zip
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 16:21
Ales was in einer Paintbox gemalt wir wird im OnPaint gemalt, dies ist im Idealfall ein Offscreenbitmap.
Das Malen kann mit Paintbox1.invalidate ausgelöst werden.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
beastofchaos
(Gast)

n/a Beiträge
 
#4

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 16:28
Ich male mit Paintbox1.Repaint statt invalidate und funktioniert Frage ist ja eher, ob es einen Befehl gibt, der vll so aussieht: PaintBox1.Clear;
Wenn ich Paintbox1:=Nil mache, kommt während dem Programm (gleich wenn eine MouseMove-prozedur erzeugt wird) eine Fehlermeldung.

Vll gibt es statt Löschen oder Überzeichnen noch eine Lösung, mit der ich eine einzige akkutalisierende Linie zwischen Linie und Kugel habe.

Geändert von beastofchaos (26. Dez 2010 um 16:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 19:01
wenn Du invalidate aufrufst und im OnPaint nichts gemalt wird, ist die Paintbox doch leer
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 19:09
Nicht optimiert, aber geht:

Delphi-Quellcode:
Procedure Bmp1Clear;
var i : Integer;
BEGIN
for i:= 0 to bmp1.Width do
BEGIN
 with Bmp1.Canvas do
 Begin
 pen.color:= 0;
 moveto(i,bmp1.Height); lineto(i,0);
 end;
END;
END;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#7

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 19:12
Delphi-Referenz durchsuchenTCanvas.FillRect oder Delphi-Referenz durchsuchenTCanvas.Rectangle
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
beastofchaos
(Gast)

n/a Beiträge
 
#8

AW: Paintbox Zeichnung löschen

  Alt 26. Dez 2010, 22:25
wenn Du invalidate aufrufst und im OnPaint nichts gemalt wird, ist die Paintbox doch leer
Mein Problem liegt wirklich zwischen/in den Ohren(hier wohl eher in den Augen) xD Ich dachte invalidate ist ein andere Befehl für Repaint... Hab mal bei leo.org invalidate nachgeguckt und versteh, dass es es annulliert



edit1: So Leute, saß heute 5 Stunden dran und habs nicht hinbekommen. War den ganzen Abend weg, komm wieder und es funktioniert. Weiß auch wie jetzt :p
In meinem MouseMove-Ereignis hat er ja erst die alte Linie übermalt "Repaint" ausgeführt. die neue gezeichnet und nochmal "Repaint" gemacht. Wenn ich das erste weglasse, ist auch das Blinken weg. Ich brauche nämlich einfach nur in der Bitmap die alte Linie übermalen ( nicht in der Paintbox zusätzlich, da die sowieso jedesmal die Bitmap neuzeichnet ).

Geändert von beastofchaos (26. Dez 2010 um 22:39 Uhr)
  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 01:24 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-2025 by Thomas Breitkreuz