Fehler: in 000nav.txt ist nicht "loesungena.php" aufgeführt! Loesungena: Joachim Mohr Mathematik Musik Delphi
Joachim Mohr   Mathematik Musik Delphi
Hinweis     zurück

Lösung zu Aufgabe Graphik1
procedure TForm1.Button1Click(Sender: TObject);
  var b, h, mb, mh, r: integer;
begin
  b := form1.clientwidth;
  h := form1.clientHeight;
  with Canvas do Begin
     pen.width := 0;
     brush.Color := clgreen;
     rectangle(0,0,b,h);
     pen.Width := 5;
     pen.Color := clyellow;
     moveto(0,h div 2);
     lineto(b div 2,0);
     lineto(b,h div 2);
     lineto(b div 2, h);
     lineto(0, h div 2);
     brush.Color := clblue;
     mb := b div 2;
     mh := h div 2;
     r := 35*h div 100;
     ellipse(mb - r,mh - r, mb + r, mh + r);
  End;
end;


Lösung zu Aufgabe Graphik2 Es sind nur wenig Änderungen nötig. Gib zu besseren Lesbarkeit den vier Buttons im Objektinspektor einprägsame Namen.
var
  Form1: TForm1;        //Schrieb Delphi
  x0, y0, r0, vx, vy: integer;  //Hier die "globen" Variablen!
implementation        //Schrieb Delphi
{$R *.DFM}            //Schrieb Delphi

procedure zeichneKreis(x, y, r: integer; farbeRand, farbeInnen:Tcolor);
begin
  with form1.image1.canvas do Begin
    Pen.Style := psSolid;
    Pen.Mode := pmNotXor;   //  zweifach zeichnen löscht !!!
    Pen.Color := farbeRand;
    CopyMode := cmSrcInvert;//  zweifach kopieren löscht !!!
    Pen.Width := 5;
    Brush.Style := bssolid;
    Brush.Color := farbeInnen;
    Ellipse(x-r,y-r,x+r,y+r);
    x0 := x;
    y0 := y;
    r0 := r;
   End
end;

procedure TForm1.BstartClick(Sender: TObject); //Button1 umbenannt
 var w, h:integer;
begin
  //Vorbereitung Zeichenfläche
  w := form1.Width;
  h := form1.Height;
  with image1 do Begin //alles löschen
    canvas.Pen.Mode := pmwhite;
    Brush.Color := clwhite;
    canvas.Rectangle(0, 0, w,  h);
  End;
  //Jetzt "Kugel" starten
  timer1.Interval := 10;
  vx := 15; //Anfangsgeschwindigkeit
  vy := 10;
  zeichneKreis(random(w), random(h), 10, clblack, clred); //Zum ersten Mal
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  zeichneKreis(x0, y0, r0, clblack, clred); //lösche alten Kreis
  x0 := x0 + vx;
  if (x0 «= 0) or (x0 » image1.Width) then vx := -vx;
  y0 := y0 + vy;
  if (y0 «= 0) or (y0 » image1.Height) then  vy:= -vy;
  zeichneKreis(x0, y0, r0, clblack, clred); //zeichne neuen Kreis
end;


procedure TForm1.BSchnellerClick(Sender: TObject); //button2 umbenannt
begin
  vx := 3*vx div 2;
  vy := 3*vy div 2;
end;

procedure TForm1.BlangsamerClick(Sender: TObject);//button3 umbenannt
begin
  vx := 2*vx div 3;
  vy := 2*vy div 3;
end;

procedure TForm1.BSchliessenClick(Sender: TObject); //Button4 umbenannt
begin
  close
end;

Lösung zu Aufgabe timer1 Reflektierender Ball
procedure TForm1.Button1Click(Sender: TObject);
begin
  panel1.DoubleBuffered := true; //Das muss man halt wissen: Verhindert flackertn
  vx := 1;
  vy := 1;
  timer1.Interval := 10; //Millisekunden
  shape1.shape := stcircle;    //Besser im Objektinspector
  shape1.Brush.Color := clred; //Besser im Objektinspector
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  shape1.left:=shape1.left+vx;
  shape1.top:=shape1.top+vy; //vy>0 bedeutet nach unten
  if shape1.left>=panel1.width-shape1.width then vx:=-abs(vx);
  if shape1.left<=0 then vx:=abs(vx);
  if shape1.top>=panel1.Height-shape1.height then vy:=-abs(vy);
  if shape1.top<=0 then vy:=abs(vy);
end;


Lösung zu Aufgabe timer2 Ball rollt Ebene hinab.
var Form1: TForm1;
       x,y, r: integer; //globale Variable

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
  var b, h, mb, mh, r: integer;  x:real;
begin
  b := form1.clientwidth;
  h := form1.clientHeight;
  with Canvas do Begin
     pen.width := 3;
     brush.Color := clblack;
     moveto(0,0);
     lineto(b,b div 2);  //Steigung m = 1/2
  End;
  r := 10;
  x := 0;
  y := - r;
  canvas.Pen.width := 0;
  canvas.Brush.color := clred;
  timer1.Interval := 10;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  x := x + 2;
  y := y + 1;
  canvas.Ellipse(x - 4, y - 4, x + 4, y + 4);
  if x > clientwidth then Begin
    timer1.Enabled := false; //=disabled
    showmessage('Fertig');
  End;
end;


zurück    Hinweis   Inhalt