Entwickler-Ecke
Multimedia / Grafik - Stoppuhr und Timer einbinden
PiL(L)e - So 05.02.06 20:53
Titel: Stoppuhr und Timer einbinden
Hi...
ist ne ziemelich doofe frage,aber ich kann Delphi noch net so gut:
Ich möchte eine Stoppuhr in mein Programm einbinden, die herunterläuft. Am besten die Ansicht in einem LAbel...
Und eine Uhr wie lange das Programm schon läuft wäre nicht schlecht. Ich weiss,dass ich dazu den Timer brauch,aber wie geanu ich ihn dann einsetzt kP....
Achja, ich müsste auch eine Schleife eine bestimmte anzahl an sekunden durchlaufen lassen. Also so zu sage,alle 15sek. soll das und das geschene.
am besten wäre noch ein wenig erklärung dazu,weil ich Delphi halt noch net so gut kann....
danke
Marco D. - So 05.02.06 21:09
Hallo,
erstmal setzt du einen Timer aufs Formular :wink:
Ab welcher Startzeit soll denn die Uhr runterlaufen?
Und wegen der Zeit, wie lang das Prog läuft:
Den interval des Timers auf 1 setzen und im Ereignis OnTimer
Delphi-Quelltext
1: 2: 3: 4:
| var zeit:integer;
inc(zeit); label1.caption:='Programm läuft seit '+inttostr(zeit)+' Sekunden.'; |
Und das mit der Schleife geht so:
Du stellst den interval eines Timers auf 15000 und klickst doppelt auf den Timer - dort schreibst du dann deine Schleife rein.
Es ist aber besser, nacheinander immmer ein Problem abzuarbeiten, anstatt hier alles durcheinander zu besprechen.
andras - So 05.02.06 21:10
zum anzeigen, wie lange dein programm schon läuft:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin i:=i+1; Label1.Caption:=IntToStr(i); end; |
wenn du etwas alle 15 sek wiederholen willst:
Delphi-Quelltext
1:
| Timer1.Interval:=15000 |
//Edit: da war wer schneller :wink:
Gausi - So 05.02.06 21:30
So ist das keine besonders gute Idee. Besser wäre es, wenn man beim Start der Stoppuhr die aktuelle Zeit (z.B. mit GetTickCount) ermittelt und im TimerEvent immer die Differenz zu dieser Startzeit und der aktuellen Zeit ermittelt und daraus die weiteren Aktionen ableitet.
Das ist deswegen besser, weil der Timer an sich nicht besonders genau ist, und sich beim simplen hochzählen einer Variable im OnTimerEvent mit der Zeit diese Ungenauigkeiten hochschaukeln können.
PiL(L)e - Mo 06.02.06 16:45
Ich bekomm es net gebacken:(
eure quellcoeds funktionieren nicht in der gewünschten form und ich verstehe sie nich richtig.
Marco D. - Mo 06.02.06 17:02
Titel: Re: Stoppuhr und Timer einbinden
PiL(L)e hat folgendes geschrieben: |
Hi...
Ich bekomm es net gebacken:(
eure quellcoeds funktionieren nicht in der gewünschten form und ich verstehe sie nich richtig.
|
Kein Problem :wink:
PiL(L)e hat folgendes geschrieben: |
Hi...
Ich möchte eine Stoppuhr in mein Programm einbinden, die herunterläuft. Am besten die Ansicht in einem LAbel...
|
Das ist ein wenig komplizierter. Das machen wir später :wink:
PiL(L)e hat folgendes geschrieben: |
Hi...
Und eine Uhr wie lange das Programm schon läuft wäre nicht schlecht. Ich weiss,dass ich dazu den Timer brauch,aber wie geanu ich ihn dann einsetzt kP.... |
Dafür setzt du einen Timer auf dein Formular und stellst interval auf 1 (für 1 Millisekunde)
Dann klickst du doppelt auf den Timer. Jetzt befindest du dich in dem Ereignis 'OnTimer', welches eintritt, wenn die eine Sekunde vorüber ist. Sprich: Du kannst dort alles reinschreiben, was nach dem Zeitintervall gemacht werden soll.
Vorher musst du aber noch eine Variable definieren, in der du die bisherige Zeit abspeicherst:
In OnTimer kommt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| inc(zeit); label1.caption:=inttostr(zeit); |
Wenn ich jetzt nicht mächtig aufm Schlauch stehe, dann war es das. Das Label zeigt dir jetzt die Millisekunden an, wielange dein Programm schon läuft.
Du willst bestimmt, dass dir das mit Stunden/Minuten/Sekunden angezeigt wird :?:
Das ist auch kein Problem, aber ich denke, du solltest erstmal das ausprobieren :wink:
PiL(L)e - Mo 06.02.06 17:09
Wenn ich das so mache,dann sehe ich wie schon in dem vorherigen Beispiel die Zahl 4345205. Diese ändert sich dann auch nicht weiter.
LLCoolDave - Mo 06.02.06 17:22
Das lässt sich leicht erklären: du hast zeizt (oder im vorhergehenden Beispiel i) als Lokale Variable der Timer1Timer Prozedur erklärt. Wird die Prozedur aufgerufen, wird quasi eine freie Stelle im Speicher für deine lokale Variable zeit gesucht, aber nicht geleert. Der Inhalt dieses Speicherbereichs wird nun als Integer gedeutet, um eins erhöht und ausgegeben. Danach wird die Prozedur verlassen und der Speicherbereich wieder freigegeben. Schlägt der Timer wieder Alarm geschieht das ganze von vorne: Der Wert von Zeit ist somit unbestimmt und hat mit der tatsächlichen Zeit herzlich wenig zu tun. Zeit muss für diese vorgehensweise eine globale Variable sein, dass die Änderungen auch beim nächsten Prozeduraufruf noch bekannt sind.
Des weiteren würde ich einen Timer NIE NIE NIE auf 1 ms laufen lassen. Das ist VERDAMMT ungenau. Der Timer wird von Windows verwaltet. Wenn die Zeit wieder abgelaufen ist wird an dein Programm eine nachricht geschickt. Dein Programm ist aber auch noch mit anderen Dingen beschäftigt, so muss es z.B. darauf reagieren, wenn es verschoben wird oder wenn es von einem anderen Fenster verdeckt wird etc. etc. Das Programm arbeitet also auch noch viele andere Nachrichten ab, und die Timer Nachricht wird einfach in diesen Haufen mit eingeschoben. Es ist also auf keinen Fall gewährleistet, dass das OnTimer Event auch wirklich jede ms auftritt.
Eine viel bessere Vorgehensweise ist dazu ein Timer mit einem höheren Intervall (250 ms+) und die Funktion GetTickCount, mit der du viel effektiver die ms feststellen kannst. Diese Angaben sind auch nicht immer absolut genau bei der Verwertung, die Fehler summieren sich aber nicht auf, da die Systemuhr unabhängig von deinem Programm weiterläuft.
Blackheart666 - Mo 06.02.06 17:23
Crashkurs würde helfen.(Variable Deklarieren Wo ?)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!