![]() |
Durchgehend zeichnen mit canvas
Hallo,
bin grad dabei ein Zeichenprogramm zur Übung zu schreiben. Habe da aber ein Problem mit den ganz normalen Zeichenen.
Delphi-Quellcode:
Wenn ich diesen Code hernehme dann zeichnet der nicht durchgehende Linien sondern es wird pixelig (Steht ja scho im Quelltext :lol: ) und bei "Line To" geht das auch net.zeichenbrett.Canvas.Pixels[x,y]:=JvGammaPanel1.ForegroundColor; Kann mir da bitte jemand helfen? Danke |
Re: Durchgehend zeichnen mit canvas
und wie sieht der code aus für lineto ?
die frage versteh ich net ganz.. wo wird es da pixelig ? |
Re: Durchgehend zeichnen mit canvas
ich glaube, er meint, dass es nichts in der richtung antialiasing gibt.
|
Re: Durchgehend zeichnen mit canvas
:hi:
Im MouseDown/Up eine Boolean Variable entsprechend setzen. Dann im MouseMove, falls die Boolean Variable entsprechend gesetzt ist, mit LineTo die Linie vom alten Punkt zum neuen X,Y zeichen und das X,Y dann als alten Punkt hinterlegen. mfg Tobias |
Re: Durchgehend zeichnen mit canvas
Hallo,
Also schaut der Text jetzt aus. aber der macht bei schnellem Zeichnen hald einfach nicht eine solche Linie __________________________________________________ __________ sondern: .................................................. .......... Also sie is einfach gepunktet wenn man zu schnell zeichntet. Hier noch der code:
Delphi-Quellcode:
Wie würdet Ihr denn so ne zeichenroutine machen?if zeichnet=true then begin zeichenbrett.Canvas.Font.Color:=JvGammaPanel1.ForegroundColor; if toolbutton1.Down then begin zeichenbrett.Canvas.Pixels[x,y]:=JvGammaPanel1.ForegroundColor; end; Zeichnet stellt sich bei mousedown auf true.... Danke Andy |
Re: Durchgehend zeichnen mit canvas
das problem was du da hast ist wohl:
die maus, wenn du sie schnell bewegst, springt dann von pixel zu pixel und überfliegt viele.. je schneller desto mehr das ist wohl der effekt den du da hast.. du kannst aber durch eine verbundlinie ( spline ) trotzdem vvon punkt zu punkt eine linie ziehen.. so wie es mirilin vorgemacht hat etwa |
Re: Durchgehend zeichnen mit canvas
da dürfts doch einen Pen-Style geben (wenn mich nicht alles täuscht)
|
Re: Durchgehend zeichnen mit canvas
Delphi-Quellcode:
procedure TForm1.StiftDraw(x, y: Integer);
begin with Form1 do begin if not FC then begin Paintbox1.Canvas.Pen.Color := Farbe; PaintBox1.Canvas.MoveTo(MOldPo.X, MOldPo.Y); PaintBox1.Canvas.LineTo(Xold, Yold); end else FC := False; Paintbox1.Canvas.Pen.Color := Farbe; PaintBox1.Canvas.MoveTo(XOld, YOld); PaintBox1.Canvas.LineTo(X, Y); XOld:=X; YOld:=Y; end; end; bitte schön ;) |
Re: Durchgehend zeichnen mit canvas
jo genau so :)
|
Re: Durchgehend zeichnen mit canvas
hi,
das von Mirilin versteh ich irgendwie nicht so. Hab ich ja auch so gemacht....... Aber irgendwie funzt das nicht da immer die linien nicht genau werden. gibts da sonst noch was? Danke |
Re: Durchgehend zeichnen mit canvas
Oh da war ja wohl mein posting voreilig, sorry!!!
Danke für den code!!! |
Re: Durchgehend zeichnen mit canvas
:hi:
Delphi-Quellcode:
Ich habs kurz so gemacht.
{MD steht für MouseDown : Boolean, und OldP wäre TPoint}
procedure TMainForm.PaintBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not MD then Exit; // Bit.Canvas.MoveTo(OldP.X,OldP.Y); Bit.Canvas.LineTo(X,Y); // OldP := Point(X,Y); PaintBoxPaint(Self); end; procedure TMainForm.PaintBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MD := True; //OldP := Point(X,Y); Bit.Canvas.MoveTo(X,Y) end; procedure TMainForm.PaintBoxMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MD := False; end; @Nicodius, erklär mir bitte kurz das "with Form1" ... mfg Tobias |
Re: Durchgehend zeichnen mit canvas
with form1 do begin
height := 10; end; ist das selbe wie form1.height := 10; |
Re: Durchgehend zeichnen mit canvas
:hi:
:wink: ja, das weiss ich :roll: ich find den Aufruf nur irgendwie überflüssig. mfg Tobias |
Re: Durchgehend zeichnen mit canvas
Bringt ja irgend wie nichts!
Ist eigentlich nur ein Nachteil! Das wirst du sehen, wenn du dann dein Formular umbenennst! |
Re: Durchgehend zeichnen mit canvas
Zitat:
|
Re: Durchgehend zeichnen mit canvas
das war nur weil ichs kopiert habe bei mir stehen ja noch andere sachen (paintbox :roll: )
aber der code funktioniert zu 100% |
Re: Durchgehend zeichnen mit canvas
Zitat:
Delphi-Quellcode:
einfach
procedure TForm1.StiftDraw(x, y: Integer);
begin with Form1 do begin if not FC then begin Paintbox1.Canvas.Pen.Color := Farbe; PaintBox1.Canvas.MoveTo(MOldPo.X, MOldPo.Y); PaintBox1.Canvas.LineTo(Xold, Yold); end else FC := False; ... end; end;
Delphi-Quellcode:
am besten wärs so:
procedure TForm1.StiftDraw(x, y: Integer);
begin if not FC then begin Paintbox1.Canvas.Pen.Color := Farbe; PaintBox1.Canvas.MoveTo(MOldPo.X, MOldPo.Y); PaintBox1.Canvas.LineTo(Xold, Yold); end else FC := False; ... end;
Delphi-Quellcode:
procedure TForm1.StiftDraw(x, y: Integer);
begin with Paintbox1.Canvas do begin if not FC then begin Pen.Color := Farbe; MoveTo(MOldPo.X, MOldPo.Y); LineTo(Xold, Yold); end else FC := False; ... end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 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