AGB  ·  Datenschutz  ·  Impressum  







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

Ampel programmieren

Ein Thema von michapitbull · begonnen am 4. Dez 2008 · letzter Beitrag vom 4. Dez 2008
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Ampel programmieren

  Alt 4. Dez 2008, 14:11
Als ersters fällt auf, dass beim Timer-Aufruf zwar die Phase gewechselt wird, aber der Teil für die Anzeige wird nur durch Drücken von Button1 durchlaufen ...

Also hier fehlt eigentlich nur noch die vernünftige Aufspaltung der einzelnen Teile:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    Shape1: TShape;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    SRot : TShape;
    SGelb : TShape;
    SGruen : TShape;
    Timer1 : TTimer;

    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
    FPhase: Integer;
    FZeit: Integer;
   
   procedure ZeichneAmpelBild;
   
   procedure SetPhase( Value : Integer );
   procedure SetZeit( Value : Integer );
  public
    { Public-Deklarationen }
   property Phase : Integer read FPhase write SetPhase;
   property Zeit : Integer read FZeit write SetZeit;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Phase := Phase + 1; // <--- hier wird automatisch SetPhase aufgerufen
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  FPhase := 1;
  FZeit := 1;
  ZeichneAmpelBild;
end;

{ Rr }

procedure TForm2.ZeichneAmpelBild;
begin
  case
   Phase
  of
    1: // Rote Ampel
     begin
        SRot.Brush.Color := clRed; // leuchtendes Rot
        SGelb.Brush.Color := clOlive; // dunkles Gelb
        SGruen.Brush.Color := clGreen; // dunkles Grün
       end;
    2: // Rot-Gelbe Ampel
     begin
        SRot.Brush.Color := clRed; // leuchtendes Rot
        SGelb.Brush.Color := clYellow; // leuchtendes Gelb
        SGruen.Brush.Color := clGreen; // dunkles Grün
      end;
    3: // Grüne Ampel
     begin
        SRot.Brush.Color := clMaroon; // dunkles Rot
        SGelb.Brush.Color := clOlive; // dunkles Gelb
        SGruen.Brush.Color := clLime; // leuchtendes Grün
      end;
    4: // Gelbe Ampel
     begin
        SRot.Brush.Color := clMaroon; // dunkles Rot
        SGelb.Brush.Color := clYellow; // leuchtendes Gelb
        SGruen.Brush.Color := clGreen; // dunkles Grün
      end;
  end;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  Close;
end;

procedure TForm2.SetPhase(Value: Integer);
begin
  if
    ( Value <> FPhase )
  then
    begin
      if
        ( Value > 4 ) or
       ( Value < 1 )
      then
        FPhase := 1
      else
        FPhase := Value;
      ZeichneAmpelBild;
   end;
end;

procedure TForm2.SetZeit(Value: Integer);
begin
  if
   ( Value > 12 ) or
   ( Value < 1 )
  then
    FZeit := 1
  else
    FZeit := Value;
   
  case
    FZeit
  of
    1..5 :
     Phase := 1; // <--- hier wird automatisch SetPhase aufgerufen
    6 :
     Phase := 2; // <--- hier wird automatisch SetPhase aufgerufen
    7..11:
     Phase := 3; // <--- hier wird automatisch SetPhase aufgerufen
    12 :
      Phase := 4; // <--- hier wird automatisch SetPhase aufgerufen
  end;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
  Zeit := Zeit + 1; // <--- hier wird automatisch SetZeit aufgerufen
end;

end.
Die Getter/Setter für Properties eigenen sich hier sehr schön, weil dadurch die Programmierung der Steuerung sehr simpel ausfällt

[der rote Kasten war da ... und ich wohl zu langsam ... aber hier eben mal mit Getter und Setter ... und umständlich keineswegs]

cu

Oliver

[edit] es fehlt natürlich noch das ein und ausschalten des timers [/edit]
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
 


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 04:33 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 by Thomas Breitkreuz