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.