AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kreuzung - Timer funktioniert nicht

Ein Thema von Ghostleader · begonnen am 4. Nov 2009 · letzter Beitrag vom 12. Nov 2009
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:19
Dein Problem lösen 2 zusätzliche "else". Das wurde bereits genannt und sogar von Deddy erklärt.

Was du machst, ist eine Ampel, wie man sie im Kindergarten malt: Rot - Gelb - Grün. Tatsächlich sind die Ampeln bei uns Rot - Rot/Gelb - Gelb - Grün (du scheinst Beiträge nur zu überfliegen, wenn überhaupt ...)

Aber das war nur ein Hinweis. Wenn du es nicht an die Realität anlehnen willst, musst du das natürlich nicht.
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#12

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:25
Das von DeddyH hatte ich eben nicht verstanden:
Zitat:
"Frau Else kann es richten"
bzw. dachte ich das wäre ein normaler Name und mir ist das "Else" nicht aufgefallen! - zu deiner Aussage ich würde die Beiträge nur "überfliegen".

Ich weiß das die Ampeln so schalten: Rot - Rot/Gelb - Gelb - Grün und dazu habe ich auch schon geantwortet:

Ich bin zu faul. Wieso sollte es mit einem weiteren Image besser klappen? Also lasse ich es raus! Danke für deine Antwort, ich werde es mal mit else probieren.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:28
Wofür denn ein weiteres Image? Es gibt doch nur 3 Lämpchen und somit 3 Images:

Delphi-Quellcode:
if (ImgRot.Visible) and (ImgGelb.Visible) then
  // Rot/Gelb
else if ImgRot.Visible then
  // Rot
else if ImgGelb.Visible then
  // Gelb
else if ImgGruen.Visible then
  // Grün


Naja das Problem ist nun geklärt. Viel Spaß noch.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:29
Das geht übrigens auch ohne else, wenn man Logik und Darstellung trennt. Das Beispiel im Anhang besteht aus 3 Shapes, einem Timer und einer Unit mit 43 Zeilen (bei meiner Art der Codeformatierung).
Angehängte Dateien
Dateityp: exe ampel_510.exe (404,0 KB, 11x aufgerufen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:33
Aha.. Würdest du mir auch den Text mal hochladen? Ich würde mal gerne sehen wie man das ohne else machen kann...
Mfg Ghost
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:36
Rein theoretisch gibt's zig Möglichkeiten, eine könnte so aussehen:

Delphi-Quellcode:
var
  Ampelzustand: Integer;

// ...

// Rot
if Ampelzustand = 1 then
  Ampelzustand := 2;

// Rot Gelb
if Ampelzustand = 2 then
  AmpelZustand := 3;

// Gelb
if Ampelzustand = 3 then
  AmpelZustand := 4;

// Grün
if AmpelZustand = 4 then
  AmpelZustand := 1;
In den If-Anweisungen kannst du dann deine Images entsprechend ein- bzw. ausblenden.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:39
OK, ein "else" ist doch dabei hab ich gerade gesehen
Delphi-Quellcode:
unit AmpelMain;

interface

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

type
  TAmpelzustand = (azRot, azGelbRot, azGruen, azGelb);

  TFormAmpel = class(TForm)
    shpRot: TShape;
    shpGelb: TShape;
    shpGruen: TShape;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    FZustand: TAmpelzustand;
  public
    { Public-Deklarationen }
  end;

var
  FormAmpel: TFormAmpel;

implementation

{$R *.dfm}

procedure TFormAmpel.Timer1Timer(Sender: TObject);
begin
  if FZustand < High(TAmpelzustand) then
    inc(FZustand)
  else //hier ist das einzige else
    FZustand := Low(TAmpelzustand);
  shpRot.Visible := FZustand in [azRot,azGelbRot];
  shpGelb.Visible := FZustand in [azGelb,azGelbRot];
  shpGruen.Visible := FZustand = azGruen;
end;

end.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#18

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:50
Oha das übersteigt jetzt aber meine Kentnisse. Naja danke für die Antworten jetzt werde ich mir das schon zurecht"schnibbeln" können.

Mit freundliochen Grüßen Ghostleader
Michael
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#19

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:16
Habe auch einen:
Delphi-Quellcode:
var
  at: array [0..3,0..3] of integer = ((1,0,0,5500),(1,1,0,500),(0,0,1,5000),(0,1,0,1000));

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  shape1.Visible := boolean(at[Timer1.Tag, 0]);
  shape2.Visible := boolean(at[Timer1.Tag, 1]);
  shape3.Visible := boolean(at[Timer1.Tag, 2]);
  Timer1.Interval := at[Timer1.Tag, 3];
  if Timer1.Tag > 2 then Timer1.Tag := 0 else Timer1.Tag:= Timer1.Tag +1;
end;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:26
Wird das jetzt wieder so ein "negative Zahlen"-Thread? Zum besseren Verständnis hier mein Timer-Ereignis noch einmal in längerer Form:
Delphi-Quellcode:
procedure TFormAmpel.Timer1Timer(Sender: TObject);
begin
  case FZustand of
    azRot : FZustand := azGelbRot;
    azGelbRot: FZustand := azGruen;
    azGruen : FZustand := azGelb;
    azGelb : FZustand := azRot;
  end;
  if (FZustand = azRot) or (FZustand = azGelbRot) then
    shpRot.Visible := true
  else
    shpRot.Visible := false;
  if (FZustand = azGelb) or (FZustand = azGelbRot) then
    shpGelb.Visible := true
  else
    shpGelb.Visible := false;
  if FZustand = azGruen then
    shpGruen.Visible := true
  else
    shpGruen.Visible := false;
end;
Ist das so verständlicher?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:53 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