Autor Beitrag
tuni94
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 02.11.10 17:54 
Morgen,

Ich schreiben morgen eine Klausur, da wird zusätzlich das Thema Ampelschaltung mit einem Timer vorkommen. Aber ich war das letzte mal im Unterricht nicht anwesend und habe den Quelltext bzw. den Anfang nicht mitbekommen.
Aufgabe: Wir sollen eine Ampel erstellen (4 Images:Rot-Rotgelb-Grün-Gelb) diese 4 Bilder sollen durch einen Klick, der den Timer in Gang setzt laufen. Das mit dem Interval ist so, dass die Rote Ampel und die grüne Ampel länger "aufleuchten" als die Rotgelb und Gelb. Diese soll ich in einem Quelltext zusammenfassen.
Nach langer Suche habe ich aber leider nicht das richtige gefunden, obwohl es sehr viele Themen zu der Ampelschaltung gibt. Also ich glaube If-Anweisungen müssen vorhanden sein (?).
Ich bitte euch somit um dringende Hilfe ..

Mfg Tuni




Und wie ich grad seh, hab ich hier keine Icons mit einer Ampel drauf. Wäre nett einen Link zu posten
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Di 02.11.10 18:32 
Ehm... erwartest du nun ernsthaft, dass dir hier jemand das ganze Projekt so aus Spaß innerhalb der nächten Stunden schreibt? Wenn du konkrete Fragen hast, helfen wir dir gerne, aber deine Arbeit an sich wird mit Sicherheit niemand abnehmen.
Hast du denn einen Ansatz? Hast du das ganze mal auf Papier aufgezeichnet? Wo genau kommst du denn nicht weiter?

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
tuni94 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 02.11.10 18:38 
Ok ich sage es mal so:
Ansatz brauche ich ja nur vielleicht das erste Beispiel..
Aber ich habe in der Zeit schon etwas versucht, aber es klappt leider nocht nicht.


Image1=Rot Image2=Rotgelb Image3=Grün Image4=Gelb


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
procedure TForm1.Button1Click(Sender: TObject);
  begin
if Button1.Caption='Start'
then begin
    Timer1.enabled:=true ;
    Button1.Caption:='Stop' ;
end
    else if Button1.caption='Stop'
      then begin
        Timer1.enabled:=false ;
        Button1.caption:='Start' ;
      end

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if image1.Visible=false
  then begin
    image1.Visible:=true ;
    image4.Visible:=false ;
  end
    else if image1.visible=true
      then begin
        image1.visible:=false;
        image2.visible:=true ;
      end
        else if image2.Visible=true
          then begin
          image2.visible:=false;
          image3.Visible:=true;
          end
            else if image3.visible=true
              then begin
              image3.visible:=false ;
              image4.visible:=true;
              end
                
end;

end.


Moderiert von user profile iconMartok: Delphi-Tags gesetzt
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Di 02.11.10 18:39 
Und was genau geht nicht?

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 02.11.10 18:41 
die verschiedenen Zeiten bei der Ampel (das grün länger ist als die anderen Phasen) kannst du erreichen indem du den intervall vom timer immer dann anders setzt. (vor dem grün schalten länger, nach dem grün schalten wieder kürzer usw)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 02.11.10 18:43 
user profile icontuni94 hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if image1.Visible=false  //wenn NICHT Rot
  then begin
    image1.Visible:=true ;       
    image4.Visible:=false ;      
  end


Das ist natürlich Quatsch, denn Image 1 ist ja nie sichtbar (außer in der Rot-Phase). Das heißt du schaltest IMMER in die Rot-Phase, wenns nicht gerade rot ist.

Also besser auf true prüfen, wie bei den andren else-Zweigen auch. Dafür musst du irgendwann mal eins vorher auf true setzen ODER du müsstest gucken, ob GARKEINS sichtbar ist, und dann rot sichtbar machen.

Es hilft übrigens ungemein, die images mit Namen zu versehen (z.B. imgRot) oder einen Kommentar dranzuschreiben

Wenn du noch Icons brauchst, hab welche hier.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)


Zuletzt bearbeitet von Xion am Di 02.11.10 18:46, insgesamt 3-mal bearbeitet
tuni94 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 02.11.10 18:45 
//EDIT


Hab es mal umgeschrieben :

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
procedure TForm1.Button1Click(Sender: TObject);
  begin
if Button1.Caption='Start'
then begin
    Timer1.enabled:=true ;
    Button1.Caption:='Stop' ;
    image1.visible:=true ;
end
    else if Button1.caption='Stop'
      then begin
        Timer1.enabled:=false ;
        Button1.caption:='Start' ;
      end

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin


if image1.visible=true
      then begin
        image1.visible:=false;
        image2.visible:=true ;
        image3.Visible:=false ;
        image4.Visible:=false ;
      end
        else if image2.Visible=true
          then begin
          image2.visible:=false;
          image3.Visible:=true;
          image1.Visible:=false ;
          image4.Visible:=false ;
          end
            else if image3.visible=true
              then begin
              image3.visible:=false ;
              image4.visible:=true;
              image1.Visible:=false ;
              image2.Visible:=false ;
              end

             else if image4.visible=true
                then begin 
                    image1.visibel:=true;
                    image3.visible:=false ; 
                    image2.visible:=false ;
                    image4.visible:=false;
               end   
end;

end.


Nun es springt von Rot auf Rotgelb, aber mehr geht auch nicht .
@ Elundril meinst du das mit dem Interval so:
Ich hab in Erinnerung das man das so schreibt zb;
beim Timer:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin 
image3.visible:=true 
interval=500

end


oder irgendwie sowas

aber bis jetzt danke für eure Hilfe :)

Moderiert von user profile iconMartok: Delphi-Tags gesetzt


Zuletzt bearbeitet von tuni94 am Di 02.11.10 18:50, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 02.11.10 18:48 
jap, so in der art mein ich das (aber nur in der art, ein bisschen mehr gehört da noch dazu). außerdem: bei den if-anweisungen niemals auf false oder true überprüfen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 02.11.10 18:49 
user profile icontuni94 hat folgendes geschrieben Zum zitierten Posting springen:
Hab es mal umgeschrieben :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if image1.Visible=false
  then begin
    image1.Visible:=true ;
    image3.Visible:=false ;
    image2.Visible:=false ;
    image4.Visible:=false ;

  end



Du musst überprüfen ob Image4 sichtbar ist! Nach Rotgelb kommt Rot. Am Anfang musst du natürlich irgendein Image sichtbar machen, damit die Ampel loslegen kann.

Mensch die Antworten kommen ja hier im Sekundentakt rein *schneller tippt*

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
tuni94 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 02.11.10 18:50 
Habs oben mal editiert :)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 02.11.10 18:56 
und? Auswirkung? :D noch Probleme?

Edit: So ganz passt es noch nicht, Image1 darfst du nicht bei Start setzen (dann wirds immer rot wenn du die Ampel weiterlaufen lassen willst) sondern ich würde das ins OnCreate der Form setzen. Oder noch einfacher, ganz unten nach den else if einfach ein else, wo du dann Image1 auf sichtbar setzt

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)


Zuletzt bearbeitet von Xion am Di 02.11.10 18:58, insgesamt 2-mal bearbeitet
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 02.11.10 18:58 
Wo du schonmal dabei bist:

Bitte verwende für Quellcode die entsprechenden [delphi]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:
ausblenden Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAGde98e1061ea2d60a7e9038b2b3c90c98}</span></span>					

Wird:
ausblenden Delphi-Quelltext
1:
var Test: integer;					


Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 02.11.10 19:03 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Du musst überprüfen ob Image4 sichtbar ist!
Ich würde in der Timerroutine einfach mit einem Case arbeiten und dazu eine globale IntegerVariable:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
case Ampelstatus of
  1 :   //Grünphase
      begin
        Image1.Visible := true;
        ...
        Timer1.Intervall := 10000;  // 10 Sekunden
        Inc(Ampelstatus);
      end;
  2 :  // Gelbphase
usw.

Und im letzten Anweisungsblock statt Inc(Ampelstatus) einfach Ampelstatus wieder auf 1 setzen.
tuni94 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 02.11.10 19:11 
So habs nun so :
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
procedure TForm1.Button1Click(Sender: TObject);
  begin
if Button1.Caption='Start'
then begin
    Timer1.enabled:=true ;
    Button1.Caption:='Stop' ;

end
    else if Button1.caption='Stop'
      then begin
        Timer1.enabled:=false ;
        Button1.caption:='Start' ;
      end
     
end;

procedure TForm1.Timer1Timer(Sender: TObject);
 begin
 if image1.visible=true
      then begin
        image1.visible:=false;
        image2.visible:=true ;
        image3.Visible:=false ;
        image4.Visible:=false ;
      end
        else if image2.Visible=true
          then begin
          image2.visible:=false;
          image3.Visible:=true;
          image1.Visible:=false ;
          image4.Visible:=false ;
          end
            else if image3.visible=true
              then begin
              image3.visible:=false ;
              image4.visible:=true;
              image1.Visible:=false ;
              image2.Visible:=false ;
              end
                else if image4.visible=true
                 then begin
                   image3.Visible:=false ;
                   image4.Visible:=false ;
                   image1.Visible:=true ;
                   image2.Visible:=false ;
                   end

end;


Nun hab ich nur noch das Problem, was Xion erwähnt hat, dass am Anfang alle Ampeln sichtbar sind und dann bei Button1click direkt auf Rotgelb springt.
Die anderen Themen sind alle Leicht, hoffe werde mein Können in der Klausur auch zeigen :)

@ Gerd Kayser würd ich ja gern, aber keine Ahnung ob es unser Lehrer es so sehen will
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 02.11.10 19:23 
das kann ja keiner mitansehen. mal überarbeitet (siehe kommentare im Quelltext):

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Caption='Start' then begin
    Timer1.enabled:=true ;
    Button1.Caption:='Stop' ;
    end
  else begin // zweite if-abfrage unnötig, der button kann eh nur 2 zustände haben hoff ich
    Timer1.enabled:=false ;
    Button1.caption:='Start' ;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if image1.visible then begin  //nie auf = true oder = false überprüfen!
    image1.visible := false;  //benenne die images logisch!! ZB imgRot und so weiter
    image2.visible := true;
    image3.Visible := false;
    image4.Visible := false;
    timer1.interval := 10000//10 sekunden grün
    end
  else if image2.Visible then begin
    image2.visible := false;
    image3.Visible := true;
    image1.Visible := false;
    image4.Visible := false;
    timer1.interval := 2000//2 sekunden
    end
  else if image3.visible then begin
    image3.visible := false;
    image4.visible := true;
    image1.Visible := false;
    image2.Visible := false;
    timer1.interval := 2000//2 sekunden
    end
  else if image4.visible then begin
    image3.Visible := false;
    image4.Visible := false;
    image1.Visible := true;
    image2.Visible := false;
    timer1.interval := 10000//2 sekunden
    end;
end;


btw, warum 4 images bei einer ampel? Wir in österreich haben nur 3 Farben bei einer Ampel...

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 02.11.10 19:25 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:

btw, warum 4 images bei einer ampel? Wir in österreich haben nur 3 Farben bei einer Ampel...


Ne, das ist ja zu einfach. In Deutschland gibt es einen Unterschied zwischen Gelb und Gelb ;) Wird es nämlich gleich grün, dann ist es RotGelb, wird es gleich Rot, dann leuchtet nur gelb.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 02.11.10 19:31 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Ne, das ist ja zu einfach. In Deutschland gibt es einen Unterschied zwischen Gelb und Gelb ;) Wird es nämlich gleich grün, dann ist es RotGelb, wird es gleich Rot, dann leuchtet nur gelb.

Das sind aber immer noch nur 3 Farben ;)
ausblenden Quelltext
1:
2:
R -> RY-> G
G -> Y -> R

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
tuni94 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 02.11.10 19:38 
ausblenden Delphi-Quelltext
1:
 if image1.visible then begin ..					

wenn ich es so am anfang reinschreibe. Dann bleibt die Ampel ja immer auf einer Farbe? Zumindest bei mir.
Das mit dem Interval hab ichs nun verstanden, nur noch die Ampel am Anfang muss auf Rot bleiben


/Edit

Nach etwas rumprobieren hab ichs raus , hoff ich zumindest. Da die Ampel wieder auf Rot geht, wenn ich auf den Button 'Stop' klicke:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button1Click(Sender: TObject);
  begin
if Button1.Caption='Start'
then begin
    Timer1.enabled:=true ;
    Button1.Caption:='Stop' ;

end

    else  begin
        Timer1.enabled:=false ;
        Button1.caption:='Start' ;
      end ;
       begin
       Image1.Visible:=true ;
      image2.Visible:=false ;
      image3.Visible:=false ;
      image4.Visible:=false ;
      end
end;