Linien beim zeichnen anzeigen lassen
Hi Leute,
ich bin neu im Forum und generell erst seit einem halben Jahr (durch die Schule) in der Welt des Programmierens tätig. Wir haben in der letzten Stunde die Aufgabe gehabt uns mit dem zeichnen von Linien auf ner Canvas auseinander zu setzten. Als erste Aufgabe gilt es nun das Haus vom Nikolaus zu implementieren und wer es als Hausaufgabe machen möchte, es so zu implementieren das man das "Programm" beim zeichnen sieht. Wer dies schaffen sollte und dann als erster (mit Angabe der Zeit und Unterschrift eines Lehrers) abgibt, bekommt 15Pkt( 1+ ).:tongue: Ich habe das HvN schon fertig implementiert, ohne Probleme, doch ich suche Vergebens nach der Antwort sich "das Zeichnen" anzeigen zu lassen.:? Deswegen wende ich mich nun direkt an euch und möchte wissen, wie man so etwas implementieren kann...ich möchte keinesfalls den Quelltext von euch haben, da wir vermutlich das implementierte noch erklären müssen, sondern ich möchte nur gerne wissen, wie man es implementieren kann :wink::thumb: |
AW: Linien beim zeichnen anzeigen lassen
Am Einfachsten in den dv nach jedem Strich eine kleine Verzögerung einbaust
|
AW: Linien beim zeichnen anzeigen lassen
Zitat:
Richtiger, aber etwas aufwändiger, wäre die Umsetzung mit einem Timer und einer Liste von Zeichen-Routinen. Pro Zyklus wird dann jeweils eine Routine ausgeführt (bzw. immer eine mehr). Das kann man dann langsam, schnell oder sogar manuell schalten (Timer aus und nur bei einem Klick auf einen Button, oder warauf auch immer). |
AW: Linien beim zeichnen anzeigen lassen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; s: String; function GPI(p: String; n: Byte): Integer; var k: Integer; begin for k := 2 to n do if Pos(',', p) > 0 then Delete(p, 1, Pos(',', p) + 1) else Delete(p, 1, Maxint); if Pos(',', p) > 0 then Delete(p, Pos(',', p), Maxint); Result := StrToIntDef(p, 0); end; begin with TStringList.Create, Canvas do try Add('0, 141, 415, 133, 286'); Add('0, 133, 286, 265, 288'); Add('0, 265, 288, 143, 410'); Add('0, 143, 410, 270, 420'); Add('0, 270, 420, 261, 291'); Add('0, 261, 291, 207, 194'); Add('0, 207, 194, 138, 281'); Add('0, 138, 281, 268, 419'); Add('0, 228, 228, 230, 190'); Add('0, 230, 190, 253, 191'); Add('0, 253, 191, 246, 252'); Add('1, 237, 165, 264, 142'); Add('1, 243, 119, 279, 95'); Add('1, 246, 66, 296, 37'); Canvas.Pen.Width := 10; for i := 0 to Count - 1 do begin s := Strings[i]; case GPI(s, 1) of 0: begin MoveTo(GPI(s,2), GPI(s,3)); LineTo(GPI(s, 4), GPI(s, 5)) end; 1: Ellipse(GPI(s,2), GPI(s,3), GPI(s, 4), GPI(s, 5)); end; Sleep(500); end; finally Free end; end; |
AW: Linien beim zeichnen anzeigen lassen
Ja, das geht, dann erscheinen halt die Striche alle kurz nacheinander.
Nur ich habe die Aufgabe so interpretiert, das man es sehen soll, wie Striche von Pixel/Punkt zu Pixel/Punkt entstehen :cry: |
AW: Linien beim zeichnen anzeigen lassen
Zitat:
Du musst jeden Bildpunkt einzeln berechnen, was bei den Waagrechten und senkrechten wohl keine allzugroße Herausforderung ist. Bei den Diagonalen und dem Dach musst Du beim Berechnen der Bildpunkte halt den Winkel berücksichtigen. |
AW: Linien beim zeichnen anzeigen lassen
nur als Anregung,
zeichne die Linien einfach in einer Schleife immer einen Punkt länger
Delphi-Quellcode:
Self.Canvas.MoveTo(50,150);
for i := 0 to 200 do begin Self.Canvas.LineTo(50 + I, 150); Sleep(5); end; I:= 0; Self.Canvas.MoveTo(250,150); for i := 0 to 200 do begin Self.Canvas.LineTo(250, 150 + I); Sleep(5); end; |
AW: Linien beim zeichnen anzeigen lassen
Ja, das ist schonmal sehr gut. Ich bin schon drann, und würde nachher mal den Code posten, falls er nicht doch zulang werden sollte :-D Erstmal sollte es funktionieren :thumb:
|
AW: Linien beim zeichnen anzeigen lassen
Liste der Anhänge anzeigen (Anzahl: 1)
Habs auch mal gebastelt aus interesse, wollte aber keinen Code geben damit du auch was lernst :D
Da du aber schon was erhalten hast, hier meine Lösung. Funktioniert mit Timern ohne diese Sleep geschichte ^^ Ausserdam können alle Formen gezeichnet werden man muss nur das Array anpassen
Delphi-Quellcode:
Ich will den Code hier nicht posten, da du es eigentlich selber machen solltest. Die Projekt-Dateien inkl. Exe ist aber trotzdem angehängt, falls du es dir trotzdem genauer ansehen willst.
Haus := [Point(0,150),
Point(100,150), Point(100,50), Point(0,50), Point(50,0), Point(100,50), Point(0,150), Point(0,50), Point(100,150)]; Werde Heute (Montag Morgen) noch was dazu sagen wie das ganze aufgebaut ist bin momentan zu müde - was dummes ist auch noch drinnen ist aber nicht tragisch :D Video vom Zeichnen: https://www.youtube.com/watch?v=pXO80_cRgSw Freundliche Grüsse |
AW: Linien beim zeichnen anzeigen lassen
Die Lehrer werden immer einfallsloser...
Die Schüler bleiben immer so faul, wie sie immer waren. Die Suchfunktion wird weiter ignoriert... http://www.mathematische-basteleien.de/haus02.gif http://www.mathematische-basteleien.de/nikolaushaus.htm |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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