Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Beim zweiten mal klicken...


20:30 - Di 31.07.12 13:15
Titel: Beim zweiten mal klicken...
So, jetzt komm ich mit einer völligen Anfänger-Frage.
Ich möchte beim Klicken zwischen zwei Timer hin und her wechseln. Ich Voll-Noob bekomm das irgendwie nicht ganz auf die Reihe... :oops:

i ist ein globaler boolean

(MouseDown:)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  if i = false then
    begin
      Timer1.Enabled := false;
      Timer2.Enabled := true;
      i := true;
    end;
  if i = true then
    begin
      Timer2.Enabled := false;
      Timer1.Enabled := true;
      i := false;
    end;


Webo - Di 31.07.12 13:18

Wenn du die erste if-Abfrage durchlaufen hast und Timer 1 deaktiviert hast, dann setzt du i auf true und dann kommt die zweite if-Abfrage, die dann natürlich auch erfüllt ist - merkste was? :D Ich würde hier ganz einfach statt dem zweiten if ein if-else aus dem ersten machen.


jaenicke - Di 31.07.12 13:20

Und davon abgesehen wäre es sinnvoller gleich nur einen Timer zu benutzen und in dessen Event zu entscheiden was gerade passieren soll.

Zudem ist der Vergleich mit Booleanwerten (z.B. if i = true then) so nicht sinnvoll. Hier habe ich mal ein kleines Beispiel gebastelt, wann das schief geht:
http://www.delphi-forum.de/viewtopic.php?p=548760#548760
Mehr dazu steht hier:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/typische-anfaengerfehler/
Und warum das auch vollkommen unlogisch ist:
http://www.delphi-forum.de/viewtopic.php?p=560637#560637


IhopeonlyReader - Di 31.07.12 22:09

Wennn du umbedingt 2 Timer haben möchtest dann schreib

Delphi-Quelltext
1:
2:
Timer1.Enabled := not Timer1.Enabled;
Timer2.Enabled := not Timer2.Enabled;

aber besser wäre 1 Timer.. in dem machst du das dann so: (ist ist dann immer aktiv)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
//Prozedure vom Timer
if Normal then
 begin
 //schreibste das vom ehemlaigen Timer1.
 end
else 
 begin
 //schreibste das vom Timer2 rein
 end;

//Auf Klick passiert dann (dein ehemaliger Timerwechsel)
Normal := not Normal


Fertig :)


Delete - Mi 01.08.12 13:10

Man könnte dafür auch die tag Eigenschaft der Schaltfläche für die Unterscheidung nutzen. Wobei die Lösung mit dem Not am elegantesten und übersichtlichsten ist.