AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Linien beim zeichnen anzeigen lassen

Ein Thema von Andy1811 · begonnen am 19. Apr 2015 · letzter Beitrag vom 24. Apr 2015
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 13:48
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;
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Linien beim zeichnen anzeigen lassen

  Alt 19. Apr 2015, 23:48
Habs auch mal gebastelt aus interesse, wollte aber keinen Code geben damit du auch was lernst
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:
  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)];
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.
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
Video vom Zeichnen: https://www.youtube.com/watch?v=pXO80_cRgSw

Freundliche Grüsse
Angehängte Dateien
Dateityp: zip zip_haus.zip (920,3 KB, 9x aufgerufen)
Milos
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: Linien beim zeichnen anzeigen lassen

  Alt 20. Apr 2015, 12:12
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

Geändert von hathor (20. Apr 2015 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Linien beim zeichnen anzeigen lassen

  Alt 20. Apr 2015, 12:34
Die Lehrer werden immer einfallsloser...
Wieso denn das?
Das Ziel ist sehr wahrscheinlich nicht, dass sie mal eine "Animation" programmieren können der das Haus des Nikolaus zeichnet sondern eher zu überlegen wie man so etwas am besten Lösen könnte. Hier gibt es wieder unbegrenzt viele Lösungen (z.B. die Sleep-Lösung von EarlyBird oder meine Timer Lösung die sich beide komplett verschieden verhalten), wo die eine etwas besser und die andere etwas schlechter ist. Das Resultat ist dabei auch immer verschieden. An einem einfachen Code kann man eigentlich auch gut sehen wie eine Person ein Problem löst und wie weit seine Kenntnisse in der Thematik liegen.

Welche Aufgabe würdest du denn vergeben?

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Linien beim zeichnen anzeigen lassen

  Alt 20. Apr 2015, 12:52
Welche Aufgabe würdest du denn vergeben?
Berechnet die dreimillionste Nachkommastelle von PI und beweißt rechnerisch, daß ob PI eine physikalisch begrenze Länge hat.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Linien beim zeichnen anzeigen lassen

  Alt 20. Apr 2015, 12:54
Welche Aufgabe würdest du denn vergeben?
Berechnet die dreimillionste Nachkommastelle von PI und beweißt rechnerisch, daß ob PI eine physikalisch begrenze Länge hat.
Ach komm, das wär zu einfach
Milos
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: Linien beim zeichnen anzeigen lassen

  Alt 20. Apr 2015, 15:18
SLEEP-Funktionen innerhalb von Graphik-Funktionen zeigen unerwartete Ergebnisse.

Delphi-Quellcode:
procedure Delay(msecs:integer);
var
  FirstTickCount:longint;
begin
  FirstTickCount:=GetTickCount;
  repeat
    Application.ProcessMessages;
  until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end;

procedure TForm1.Button6Click(Sender: TObject);
var D : integer;
begin
D:=1000;
  with Canvas do
    begin
    Pen.Width:=5;
    Pen.Color := clLime;
     MoveTo(100,200);
     LineTo(100,100); Delay(D);
     LineTo(200,100); Delay(D);
     LineTo(150,50); Delay(D);
     LineTo(100,100); Delay(D);
     LineTo(200,200); Delay(D);
     LineTo(100,200); Delay(D);
     LineTo(200,100); Delay(D);
     LineTo(200,200);
    end;
end;

procedure TForm1.Button8Click(Sender: TObject);
var D : integer;
begin
D:=1000;
  with Canvas do
    begin
    Pen.Width:=5;
    Pen.Color := clRed;
     MoveTo(100,200);
     LineTo(100,100); SLEEP(D);
     LineTo(200,100); SLEEP(D);
     LineTo(150,50); SLEEP(D);
     LineTo(100,100); SLEEP(D);
     LineTo(200,200); SLEEP(D);
     LineTo(100,200); SLEEP(D);
     LineTo(200,100); SLEEP(D);
     LineTo(200,200);
    end;
end;

Geändert von hathor (20. Apr 2015 um 15:29 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 07: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