![]() |
Mit TCanvas "langsam" zeichnen
Hallo Leute,
ich zeichne in einem Beispiel das Haus vom Nikolaus wie folgt:
Delphi-Quellcode:
Ich möchte nun das man sehen kann welche Codezeile welche Linie zeichnet, dafür habe ich mir vorgestellt das ich in nem Label ausgebe welche Codezeile gerade verarbeitet wird, allerdings ist mir nicht ganz klar wie ich jetzt eine Pause zwischen jeder zu zeichnenden Linie mache (evtl. Timer, aber wie dann umsetzen).
procedure TForm1.Button1Click(Sender: TObject);
begin Canvas.Pen.Width:=3; //Breite der Linien Canvas.Pen.Color:=clRed; //Farbe = Rot Canvas.MoveTo(50,150); //und los... Canvas.LineTo(150,50); Canvas.LineTo(50,50); Canvas.LineTo(150,150); Canvas.LineTo(50,150); Canvas.LineTo(50,50); Canvas.LineTo(100,0); Canvas.LineTo(150,50); Canvas.LineTo(150,150); //...und schluss! end; Für Tips und Anregungen wäre ich dankbar. |
Re: Mit TCanvas "langsam" zeichnen
Kuck dir mal Delay (siehe Code-Library) und/oder Sleep(1000) an, das sollte eine pause verursachen.
Wobei Sleep nciht optimal ist, da die gnaze Anwendung pausiert wird. |
Re: Mit TCanvas "langsam" zeichnen
Danke! Ich hab das jetzt mal so umgesetzt:
Delphi-Quellcode:
die Anwendung reagiert auch wärend des wartens, also alles Super.
function warten(msecs:integer): Integer;
var FirstTickCount:longint; begin FirstTickCount:=GetTickCount; repeat Application.ProcessMessages; until ((GetTickCount-FirstTickCount) >= Longint(msecs)); end; procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Width:=3; //Breite der Linien Canvas.Pen.Color:=clRed; //Farbe = Rot Canvas.MoveTo(50,150); //und los... Canvas.LineTo(150,50); warten(1000); //Warten... Canvas.LineTo(50,50); warten(1000); Canvas.LineTo(150,150); warten(1000); Canvas.LineTo(50,150); warten(1000); Canvas.LineTo(50,50); warten(1000); Canvas.LineTo(100,0); warten(1000); Canvas.LineTo(150,50); warten(1000); Canvas.LineTo(150,150); //...und schluss! end; Meine Frage ist jetzt (da ich absoluter Delphi Neuling bin): Ist das die einfachste / beste Lösung sowas umzusetzen oder ist das einfach nur unbeholfen ? :-) Ich will ja schließlich nicht nur funktionierenden, sondern auch guten Code schreiben. |
Re: Mit TCanvas "langsam" zeichnen
Zitat:
mal etwas Pseudocode: Timer mit intervall = 1000
Delphi-Quellcode:
......
Hauseckpunkt: array [0..xxx] of TPoint
Hauseckpunkt[0].x := 50; Hauseckpunkt[0].y := 150; und so weiter in dem Timer werden jetzt die punkte abgearbeite:
Delphi-Quellcode:
inc(Zaehler);
linetoto(Hauseckpunkt[Zaehler]); Geht so sicherlich noch nicht aber ich hoffe das Prinzip ist klar geworden. [edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit] |
Re: Mit TCanvas "langsam" zeichnen
Ja ich denke das habe ich verstanden, damit wäre es sogar möglich die Linie nicht erscheinen, sondern "zeichnen" zu lassen indem ich den Zähler einfach in kleinen schritten von x1,y1 nach x2,y2 erhöhe - richtig ?
|
Re: Mit TCanvas "langsam" zeichnen
Nein, das ginge dann nicht, der Zähler müsste eine ganzzahl sein!
Du kannst dann aber entweder die Punkte einfach näher zusammensetzen (für 1 Strich dann z.B. 4) oder das Berechnen lassen (müsste einfach gehen da man ja nur rechte winkel + 45°-Winkel hat) gruß flo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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