AGB  ·  Datenschutz  ·  Impressum  







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

Ampel mit visible=true/false

Ein Thema von Jackel89 · begonnen am 9. Feb 2006 · letzter Beitrag vom 10. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Jackel89

Registriert seit: 9. Feb 2006
6 Beiträge
 
#1

Ampel mit visible=true/false

  Alt 9. Feb 2006, 19:37
hi erstmal! tut mir leid falls ich ins falsche forum schreibe oder eine total dumme frage stele - aber ich bin ein ziemlicher delphi-noob naja ich bin in der 11. Klasse und wir haben in Informatik grade mit delphi angefangen (haben vorher Turbo Pascal gemacht), jetzt sollen wir eine Ampel programmieren, die beim Klicken eines buttons einen "status" weitergeht, also grün -> gelb -> rot -> rot-gelb -> grün und so weiter. Das ganze soll mit visible:=true bzw. false und if, then, else gemacht werden!

Ich versuche das jetzt schon Stundenlang aber ich kriegs einfach nicht hin, vielleicht könnt ihr mir ja sagen wo in meinem Programm der Fehler ist.

Das ist die Prozedur die ich momentan gemacht hab - wenn ich das Programm starte, schaltet er aber nur zwischen grün und rot+gelb um

Delphi-Quellcode:
procedure TForm1.switchClick(Sender: TObject);
begin

if Form1.sh_red.visible=true and Form1.sh_yellow.visible=true and Form1.sh_green.visible=false
then begin Form1.sh_red.visible:=false; Form1.sh_yellow.visible:=false; Form1.sh_green.visible:=true; end else

IF Form1.sh_red.visible=false and Form1.sh_yellow.visible=true and Form1.sh_green.visible=false
then begin Form1.sh_red.visible:=true; Form1.sh_yellow.visible:=false; Form1.sh_green.visible:=false; end else

IF Form1.sh_red.visible=false and Form1.sh_yellow.visible=false and Form1.sh_green.visible=true
then begin Form1.sh_red.visible:=false; Form1.sh_yellow.visible:=true; Form1.sh_green.visible:=false; end else

IF Form1.sh_red.visible=true and Form1.sh_yellow.visible=false and Form1.sh_green.visible=false
then begin Form1.sh_red.visible:=true; Form1.sh_yellow.visible:=true; Form1.sh_green.visible:=false; end else

end;
Angehängte Dateien
Dateityp: zip ampel_113.zip (200,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#2

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 19:43
Hi,

herzlich willkommen in der dp !

Müsst ihr das wirklich so machen ?

Das ist sehr umständlich, ich habe hier ein kleines Beispiel, ist aber nicht für die manuelle, sondern für die Automatische Schaltung, denke du kannst dir da das was du brauchst besorgen.
Für das Beispiel brauchst du 3 Shapes.
Delphi-Quellcode:
var
  Form1: TForm1;
  i: integer;

// ...

procedure TForm1.AmpelTimer(Sender: TObject);
begin
case i of
0:
begin
rot.brush.Color := clRed;
gelb.brush.Color := clOlive;
gruen.brush.Color := $00004000;
inc(i);
form1.refresh;
end;

1:
begin
rot.brush.Color := clred;
gelb.brush.Color := clYellow;
gruen.brush.Color := $00004000;
form1.refresh;
inc(i);
end;

2:
begin
rot.brush.Color := clMaroon;
gelb.brush.Color := clOlive;
gruen.brush.Color := cllime;
form1.refresh;
inc(i);
end;

3:
begin
rot.brush.Color := clMaroon;
gelb.brush.Color := clYellow;
gruen.brush.Color := $00004000;
form1.refresh;
i:=0;
end;

end;

end;
  Mit Zitat antworten Zitat
letsfetz

Registriert seit: 25. Mär 2005
Ort: Großraum Stuttgart
23 Beiträge
 
Delphi 7 Personal
 
#3

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:03
Zitat von Nils_13:
Müsst ihr das wirklich so machen ?
Das würde mich auch interessieren !
Michael
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:04
Hallo Jackel89,

oder nochmal anders...

Delphi-Quellcode:
  :
  private
    { Private-Deklarationen }
    AmpelStatus:byte;
    procedure Zeigen;
  :
procedure TForm.Zeigen;
begin
  Shape_rot.Visible:=(AmpelStatus in [1, 2]);
  Shape_gelb.Visible:=(AmpelStatus in [2, 4]);
  Shape_gruen.Visible:=(AmpelStatus = 3);
end;

procedure TForm.ButtonClick(Sender: TObject);
begin
  inc(AmpelStatus);
  if AmpelStatus = 5 then
    AmpelStatus:=1;
  Zeigen;
end;

procedure TForm.FormCreate(Sender: TObject);
begin
  AmpelStatus:=1;
  Zeigen;
end;

MfG
Thorsten
  Mit Zitat antworten Zitat
Jackel89

Registriert seit: 9. Feb 2006
6 Beiträge
 
#5

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:05
jup danke erstmal

aber wir sollen das echt so machen hab ja schon alles durchsucht nach sonem programm aber absolut nichts mit visible:=true/false gefunden
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#6

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:21
Hi,

dein Problem lässt sich gaaaanz einfach auch mit deinem Code lösen:
Du musst nur mal Klammern ( ) verwenden in deinen If-Abfragen...

Beispiel für deine erste Zeile:
if (Form1.sh_red.visible=true) and (Form1.sh_yellow.visible=true) and (Form1.sh_green.visible=false) Ansonsten kann das Ganze nicht gehen da Delphi das nicht so interpretiert wie du es gedacht hast....


Außerdem würd ich den Code etwas besser strukturieren und einrücken, um ihn lesbarer zu machen.
Beispiel:

Delphi-Quellcode:
if (Form1.sh_red.visible=true) and (Form1.sh_yellow.visible=true) and (Form1.sh_green.visible=false) then
begin
   //Ampel von Rot/Gelb auf Grün
   Form1.sh_red.visible:=false;
   Form1.sh_yellow.visible:=false;
   Form1.sh_green.visible:=true;
end
else if ...
MfG Benedikt
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#7

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:21
Hi Jackel89,

erst mal ein paar Tiips:
- If-Abfragen besser in Klammern
- If-Abfragen für einen Boolean-Wert (= true oder false) brauchen kein "= true", wenn auf true geprüft wird (siehe unten)
- neue Blöcke einrücken, erhöht Übersicht (siehe unten)
- das not ist so wie "= false", nur erkennt man es besser
- Die Prozedur switchClick "gehört" zu Form1. Das heißt, du musst in dieser Prozedur nicht jedes mal Form1. ... schreiben (siehe unten)

So, das habe ich getestet, und es funktioniert. Es gibt natürlich auch einfachere Methoden, aber da ihr es so machen sollt, habe ich mich daran gehalten

Delphi-Quellcode:
procedure TForm1.switchClick(Sender: TObject);
begin

  if (sh_green.Visible) then
  begin
    sh_green.Visible := false;
    sh_yellow.Visible := true;
  end
  else if (sh_yellow.Visible) and not (sh_red.Visible) then
  begin
    sh_yellow.Visible := false;
    sh_red.Visible := true;
  end
  else if (sh_red.Visible) and not (sh_yellow.Visible) then
  begin
    sh_yellow.Visible := true;
  end
  else if (sh_red.Visible) and (sh_yellow.Visible) then
  begin
    sh_red.Visible := false;
    sh_yellow.Visible := false;
    sh_green.Visible := true;
  end;
end;
Gruß,
ManuMF

[edit] Ist ja so ähnlich wie von Benedikt. Wo war aber der Kasten?[/edit]
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#8

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:31
Wie umständlich, die Shapefarben schnell verändern und das wars doch schon.
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#9

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:34
Zitat von Nils_13:
Wie umständlich, die Shapefarben schnell verändern und das wars doch schon.
Zitat von Jackel89:
aber wir sollen das echt so machen


Es gibt andere Möglichkeiten, aber das ist offenbar nicht die Aufgabenstellung.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Jackel89

Registriert seit: 9. Feb 2006
6 Beiträge
 
#10

Re: Ampel mit visible=true/false

  Alt 9. Feb 2006, 20:35
oh man es lag echt nur an den klammern


ich werd das ganze denk ich nochmal überarbeiten und die anderen methoden ausprobieren!

vielen dank

@Nils_13: joa hab mich auch gewundert warum wir das so machen sollen! naja vielleicht ja weil wir vorher schon mit Turbo Pascal gearbeitet haben und das dann mit den komplizierten, verschachtelten IF - THEN - ELSE Befehlen nochmal üben sollen... keine ahnung!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz