Autor |
Beitrag |
PiL(L)e
Hält's aus hier
Beiträge: 15
|
Verfasst: So 05.02.06 20:53
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.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: So 05.02.06 21:09
Hallo,
erstmal setzt du einen Timer aufs Formular
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.
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
andras
      
Beiträge: 460
Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
|
Verfasst: So 05.02.06 21:10
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
PiL(L)e 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Mo 06.02.06 17:02
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
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
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:
Delphi-Quelltext
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 
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
PiL(L)e 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 212
Win XP
Delphi 2005
|
Verfasst: 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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mo 06.02.06 17:23
Crashkurs würde helfen.(Variable Deklarieren Wo ?)
|
|
|