unit uHaupt;

{ (C) H.-J. Dreher, 2016, Informatik mit Delphi,      { Turtle-Standardformular }
interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  Vcl.Graphics, Turtle, Dialogs, StdCtrls, Controls, ExtCtrls, Classes;

type
  TFTurtleProjekt = class(TForm)
    Turtle1: TTurtle;
    Panel1: TPanel;
    PrinterSetupDialog1: TPrinterSetupDialog;
    btnZeichnen: TButton;
    btnDrucken: TButton;

    btnClipBoard: TButton;
    btnWMF: TButton;
    procedure btnZeichnenClick(Sender: TObject);
    procedure btnDruckenClick(Sender: TObject);
    procedure btnClipBoardClick(Sender: TObject);
    procedure btnWMFClick(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Aufgabe;
    procedure Baum(Laenge, Faktor, Winkel: REAL);
  public
    { Public-Deklarationen }
  end;

var
  FTurtleProjekt: TFTurtleProjekt;

implementation

{$R *.DFM}
// ================= ab hier wird deine Lösung implementiert!

procedure TFTurtleProjekt.Baum(Laenge, Faktor, Winkel: REAL);
begin
  with Turtle1 do

    if Laenge > 0.4 then { Rekursionsverankerung, Rekursionsabbruch }
    begin
      Forwd(Laenge); { Zeichne Stamm }

      Right(Winkel);
      Baum(Laenge * Faktor, Faktor, Winkel);
      { Zeichne (kleineren) rechten Teilbaum }

      Left(2 * Winkel);
      Baum(Laenge * Faktor, Faktor, Winkel);
      { Zeichne (kleineren) linken Teilbaum }

      Right(Winkel);
      Back(Laenge); { Kehre zum Startpunkt zurück }
    end
    else
      fillcircle(0.3, clgreen) { bei Rekursionsende zeichne grüne Früchte }

end; { of Baum }

procedure TFTurtleProjekt.Aufgabe;
begin { of Hauptprogramm ------------------------------------------------- }
  with Turtle1 do
  begin
    setPosition(0, MinY * 0.75);
    PenWidth := 4;
    delay := 100;
  end;
  Baum(8, 0.5, 45);
end { Aufgabe } ;

// =================== Ende deiner Aufgabe --------------------------------}

{ ---------  der nachfolgende Source-Code sollte nicht verändert werden ---- }

procedure TFTurtleProjekt.btnZeichnenClick(Sender: TObject);
begin
  with Turtle1 do
  begin
    clear;
    Aufgabe { Grafik-Prozedur-Aufruf } ;
  end;
end;

procedure TFTurtleProjekt.btnDruckenClick(Sender: TObject);
begin
  with Turtle1 do
  begin
    if PrinterSetupDialog1.Execute <> true then
      exit;
    clear;
    Device := tdprinter;
    Aufgabe { Grafik-Prozedur-Aufruf } ;
    Device := tdscreen;
  end;
end;

procedure TFTurtleProjekt.btnClipBoardClick(Sender: TObject);
begin
  with Turtle1 do
  begin
    clear;
    Device := tdClipb;
    Aufgabe { Grafik-Prozedur-Aufruf } ;
    Device := tdscreen;
  end;
end;

procedure TFTurtleProjekt.btnWMFClick(Sender: TObject);
begin
  with Turtle1 do
  begin
    clear;
    Device := tdWMF;
    Aufgabe { Grafik-Prozedur-Aufruf } ;
    Device := tdscreen;
  end;
end;

end.