Autor |
Beitrag |
Sithlord
      
Beiträge: 172
|
Verfasst: Do 05.06.08 21:25
Hallo Mitglieder !
Ich habe gesucht - aber nicht das gefunden was ich wollte !
Ich brauche eine Schleife, die, wenn der Timer das erste mal aktiviert wird, Aktion1 ausführt. Wenn der Timer danach nochmal aktiviert wird, soll er aktion2 ausführen, wenn der Timer ein drittes mal startet, auch noch aktion3 ausführen, usw...
Nun - ich habe bis jetzt nur Schleifen gefunden, die alles sofort nacheinander erledigt hatten - irgendwie ging das nicht so wie ich wollte.
Mfg Sithlord
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
huuuuuh
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: Do 05.06.08 21:27
geht mit ner global deklarierten zählvariable...
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 05.06.08 21:31
Hi,
Du könntest am Ende von Procedure 1 dem Timer Procedure 2 als neue OnTimer-Variable zuweisen(Timer1.OnTimer := Procedure2;). Sowohl Prozedur 1 als auch 2 müssen (Sender: TObject) als Parameter haben, damit sie vom Timer akzeptiert werden.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 05.06.08 21:38
Könntest du das bitte nochmal als Beispiel bitte ausmalen ?
Bitte nach folgendem Schema :
erste Aktion : showmessage('1');
zweite Aktion: showmessage('2');
Showmessage ist natürlich nur ein Beispiel - soll nicht dahin !
Ich habe gedacht man kann das mit
i: showmessage('1');
...
lösen !
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 05.06.08 21:54
Das wäre eine Case-Abfrage. Auch möglich, aber ziemlich langsam, wenn du eine längere Kette haben solltest.
Mein Ansatz war der hier: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Form1.Timer1Timer(Sender: TObject); begin ShowMessage('1'); Timer1.OnTimer := Timer1Timer2; end;
procedure Form1.Timer1Timer2(Sender: TObject); begin ShowMessage('2'); Timer1.OnTimer := Timer1Timer3; end;
|
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 05.06.08 21:58
Hallo,
erstelle zuerst deine gewünschten OnTimer-Prozeduren, nach diesem Schema:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.OnTimer1(Sender: TObject); begin Timer.OnTimer := OnTimer2; end;
procedure TForm1.OnTimer2(Sender: TObject); begin Timer.OnTimer := OnTimer1; end; |
Vergiss nicht, die Prozeduren im private-Abschnitt zu deklarieren.
So, und im FormCreate weist du dem Timer noch die erste Timermethode zu (wie am Ende von der zweiten Prozedur).
Grüße,
Yogu
|
|
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Do 05.06.08 22:11
oder nimm eine global (oder in der Form) deklarierte Zählervariable, die du hochzählst, jedesmal im OnTimer...
Und dann kommt in die OnTimer-Procedure ein case...
Find ich persönlich übersichtlicher als zig funktionen in meiner Form stehen zu haben...
_________________ 1405006117752879898543142606244511569936384000000000.
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Do 05.06.08 22:19
Hallo und danke für eure Antworten !
Ich find eure Lösung gut, aber umständlich.
Ich will damit zufrieden sein, auch wenn es umständlich ist, wenn ich über Hundert Proceduren hinzufügen muss, da ich ja nicht noch 2 Dialoge anzeige sondern viele. Also im fertigen Programm sind das ja nichtmal Dialoge, sondern andere Befehle.
Gibt es da nichts einfacheres ?
Ich meine, sonst nehm ich das !
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.OnTimer1(Sender: TObject); begin Timer.OnTimer := OnTimer2; end;
procedure TForm1.OnTimer2(Sender: TObject); begin Timer.OnTimer := OnTimer1; end; |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 05.06.08 22:27
Was willst du denn machen?
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Fr 06.06.08 21:14
Das wird ein Game - möchte ich net unbedingt preisgeben !
Ich muss einen String jedes mal nach aktivieren des Teimers um eine bestimmte Zahl erhöhen - aber nicht immer die gleiche !
Deshalb brauche ich sowas
Und das nicht nur einmal, sondern mindestens 100 Mal für jede Funktion 10 Mal !
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 06.06.08 21:16
Dann leg die Zahlen in einem Array ab und speichere den aktuellen Index des Arrays in der Tag-Eigenschaft des Timers. In jedem Timer-Durchlauf erhöhst Du dann den Index.
Aber die Zahlen müssen doch irgendwie berechnbar sein, Du willst doch bestimmt nicht so viele Zahlen eintippen! 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Fr 06.06.08 21:22
Nein - es handelt sich um eine unbestimmte erhöhung oder besser gesagt "ersetzung" der Zahlen durch andere !
Nun - ist dies irgendwie mit weniger Aufwand möglich ?
Sonst wird bei mir alles Unübersichtlich 
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 06.06.08 21:29
Was ist an 1 Array und 1 Timer und 1 OnTimer-Event unübersichtlich.  Du willst was mit Zahlen und einem Timer machen, die brauchste auf jeden Fall. Um das 1 OnTimer-Event zusätzlich wirste nicht wegbekommen 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Fr 06.06.08 21:33
Ich muss das aber nicht nur einmal machen - sondern bei 10 Timern 10 mal ! Und später noch mehr, das ist ja grade das blöde 
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Fr 06.06.08 21:35
solange alle 10 Timer das gleiche machen, gibts ja keine Probleme.
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Fr 06.06.08 21:36
Eben nicht  , leider !
Ich muss alle Timer mit jeweils einem Button separat aktivieren !
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 06.06.08 21:40
Hört sich für mich irgendwie an, als hätte Dein Konzept da eine Schwäche.
Insgesamt kann man nur sagen: Lies Dir die Infos durch, die Du uns gegeben hast, und sag uns, wie wir Dir da noch weiter helfen sollen 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Fr 06.06.08 21:42
musst du denn alles mit Timern Bewegen?
|
|
Sithlord 
      
Beiträge: 172
|
Verfasst: Fr 06.06.08 21:45
ja, weil es erst nach einer gewissen Zeit passieren darf !
_________________ Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 06.06.08 21:56
Hallo,
ich glaube, ich verstehe langsam. Du willst ein Spiel programmieren, bei dem es mehrere Buttons gibt. Wenn der User auf einen von ihnen klickt, wird eine Aktion nach einer bestimmten Zeit ausgeführt.
Jetzt ein paar Fragen:
- Wie ist diese Zeit definiert? Ist sie zufällig? Für jeden Button unterschiedlich, aber konstant? Oder ist sie einstellbar? Gibt es noch andere Faktoren?
- Was passiert, wenn die Zeit abgelaufen ist? Kann man diese Aktion auch irgendwie berechnen?
Vielleicht können wir dir dann besser helfen.
Grüße,
Yogu
|
|