Informatik

4.908 Beiträge

Ampelsimulation in Lazarus?

Sehr geehrte gutefrage-Community,

ich bin gerade an der Bearbeitung einer Ampelsimulation, jedoch funktioniert die Implementierung der drei senkrechten Kreise nicht so wie gewünscht. Für Vorschläge/Tipps der Verbesserung stehe ich Ihnen gerne offen.

Unten abgebildet ist die bisherige Programmierung der Ampelsimulation in Lazarus (Free Pascal).

unit Unit1;
{$mode objfpc}{$H+}

interface
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
  { TAmpel }
  TAmpel = class(TForm)
    ZeichneAmpel: TButton;
    procedure ZeichneAmpelClick(Sender: TObject);
  private
    procedure ZeichneKreis (Farbe:integer);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Ampel: TAmpel;

implementation
{$R *.lfm}

procedure Wait (time:word);
var Start: Integer;
begin
  Start := GetTickCount64;
  while GetTickCount64 - Start <= time do
    application.ProcessMessages;
end;

procedure ZeichneAmpelClick(Sender: TObject);
var
  i, x, y, radius, Abstand: integer;
begin // Grundeinstellungen
  radius := 50; // Radius der Kreise
  Abstand := 20; // Abstand zwischen den Kreisen
  x := 10 div 2; // Horizontale Position (in der Mitte des Fensters)

  // mehrere Kreise senkrecht zeichnen
  for i := 0 to 4 do // Zeichnet 5 Kreise
  begin
    y:= (i * (2 * radius + Abstand)) + radius; // Berechne vertikale Position
  end;
end;

{ TAmpel }
procedure TAmpel.ZeichneKreis(Farbe:integer);
begin
  Canvas.Pen.Color := Farbe;
  Canvas.Brush.Color := Farbe;
  Canvas.Ellipse(10, 10, 100, 100);
end;

procedure TAmpel.ZeichneAmpelClick(Sender: TObject);
begin
  ZeichneKreis(clred);
  wait(1000);
  ZeichneKreis(clyellow);
  wait(1000);
  ZeichneKreis(clgreen);
end;

end.                   
Ask Me Anything: Themenspecials