Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mit TCanvas "langsam" zeichnen (https://www.delphipraxis.net/8455-mit-tcanvas-langsam-zeichnen.html)

Helpliner 4. Sep 2003 20:38


Mit TCanvas "langsam" zeichnen
 
Hallo Leute,

ich zeichne in einem Beispiel das Haus vom Nikolaus wie folgt:

Delphi-Quellcode:
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;
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).

Für Tips und Anregungen wäre ich dankbar.

Alexander 4. Sep 2003 20:40

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.

Helpliner 4. Sep 2003 20:52

Re: Mit TCanvas "langsam" zeichnen
 
Danke! Ich hab das jetzt mal so umgesetzt:

Delphi-Quellcode:
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;
die Anwendung reagiert auch wärend des wartens, also alles Super.

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.

Gandalfus 4. Sep 2003 21:08

Re: Mit TCanvas "langsam" zeichnen
 
Zitat:

Zitat von Helpliner
Danke! Ich hab das jetzt mal so umgesetzt:
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.

Optimal ist das sicher nicht(100% CPU Belastung)

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]

Helpliner 4. Sep 2003 21:12

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 ?

Florian H 6. Sep 2003 19:41

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 20:51 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