![]() |
Ampel mit visible=true/false
Liste der Anhänge anzeigen (Anzahl: 1)
hi erstmal! tut mir leid falls ich ins falsche forum schreibe oder eine total dumme frage stele - aber ich bin ein ziemlicher delphi-noob :wink: 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; |
Re: Ampel mit visible=true/false
Hi,
herzlich willkommen in der dp :party: ! 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; |
Re: Ampel mit visible=true/false
Zitat:
|
Re: Ampel mit visible=true/false
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 |
Re: Ampel mit visible=true/false
jup danke erstmal :)
aber wir sollen das echt so machen :wink: hab ja schon alles durchsucht nach sonem programm aber absolut nichts mit visible:=true/false gefunden :( |
Re: Ampel mit visible=true/false
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:
Delphi-Quellcode:
Ansonsten kann das Ganze nicht gehen da Delphi das nicht so interpretiert wie du es gedacht hast....
if (Form1.sh_red.visible=true) and (Form1.sh_yellow.visible=true) and (Form1.sh_green.visible=false)
Außerdem würd ich den Code etwas besser strukturieren und einrücken, um ihn lesbarer zu machen. Beispiel:
Delphi-Quellcode:
MfG Benedikt
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 ... |
Re: Ampel mit visible=true/false
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:
Gruß,
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; ManuMF [edit] Ist ja so ähnlich wie von Benedikt. Wo war aber der Kasten?[/edit] |
Re: Ampel mit visible=true/false
Wie umständlich, die Shapefarben schnell verändern und das wars doch schon.
|
Re: Ampel mit visible=true/false
Zitat:
Zitat:
Es gibt andere Möglichkeiten, aber das ist offenbar nicht die Aufgabenstellung. Gruß, ManuMF |
Re: Ampel mit visible=true/false
oh man es lag echt nur an den klammern :wink:
ich werd das ganze denk ich nochmal überarbeiten und die anderen methoden ausprobieren! vielen dank :-D @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! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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-2025 by Thomas Breitkreuz