Time();
-
So könnte man das machen (mit Timer):
void __fastcall TForm1::Timer1Timer(TObject *Sender) { a = Time(); //Time liefert die Uhrzeit als String, und mit Stunden, Minuten und Sekunden. Edit1->Text = a; if (a=="14:00:00") Edit2->Text = "Es ist jetzt 14 Uhr"; }
Hinweis: == ist Vergleichsoperator, = entspricht einem Zuweisungsoperator.
-
ein posting obs geklappt hat wäre nett
-
Die Uhrzeit lässt sich anzeigen so weit war ich auch schon aber die soll noch mit laufen.
-
Da das hier sonst nur wieder eine endlose Diskussion wird:
void __fastcall TForm1::Timer1Timer(TObject *Sender) { Edit1->Text = "Es ist jetzt " + TDateTime::CurrentDateTime().TimeString() + " Uhr"; } //---------------------------------------------------------------------------
wirre hatte eigentlich schon alles gesagt...
-
Jo jetzt gehts
@ Unregistrierter sry mein Fehler deien Lösung ging auch ich hatte es nur vergessen in die Time Komponente zu schreiben
-
roflcopter schrieb:
@ Unregistrierter sry mein Fehler deien Lösung ging auch ich hatte es nur vergessen in die Time Komponente zu schreiben
Was willst Du denn jetzt? Eine mitlaufende Anzeige, oder eine Anzeige die angibt, wann es 14 Uhr ist (mehr macht die Version von Unregistriert nämlich nicht...).
-
[quote="Joe_M."]
roflcopter schrieb:
...(mehr macht die Version von Unregistriert nämlich nicht...).
Die 14 Uhr sollten nur ein Beispiel sein. Natürlich kann man das für jede andere Uhrzeit auch machen, z.B. mit einer switch- Struktur
void __fastcall TForm1::Timer1Timer(TObject *Sender) { a = Time(); //Time liefert die Uhrzeit als String, und mit Stunden, Minuten und Sekunden. Edit1->Text = a; switch (a) { case "14:00:00" { Edit2->Text = "Es ist 14 Uhr"; } case "15:00:00" { Edit2->Text = "Es ist 115 Uhr"; } case "16:00:00" { Edit2->Text = "Es ist 16 Uhr"; } case "17:00:00" { Edit2->Text = "Es ist 17 Uhr"; } //usw.
Man kann das ganze natürlich noch perfektionieren, mit z.B. Substring und die Stunde herausfiltern
Edit2->Text = "Es ist jetzt " + (a.SubString (0, 2)) + "Uhr.";
Das könnte man dann mit nem Timer jede Minute wiederholen, allerdings würde die Anzeige dann auch 14 Uhr anzeigen, wenn es 14:01, 14:02, .. ist.
-
UUPs, es muss anstatt von
0,2
2,2
lauten
Sorry
-
Wie man die Zeit kontinuierlich mitlaufen lässt, hab ich ja schon gepostet.
Wenn man nur die Stunden will, dann nimmt man besser TDateTime::DecodeTime() um an die einzelnen Werte zu gelangen. Dann braucht man aber auch keinen jede Sekunde laufenden Timer. Vergleichen und muss man auch nicht, sondern einfach nur den Timer entsprechend nur einmal stündlich, zur vollen Stunde auszulösen.
void __fastcall TForm1::Timer1Timer(TObject *Sender) { unsigned short stunde, minute, sekunde, millisekunde; TDateTime::CurrentDateTime().DecodeTime(&stunde, &minute, &sekunde, &millisekunde); Timer1->Interval = (60 * 60 * 1000) - (minute * 60 * 1000) - (sekunde * 1000) - millisekunde + 500; Label1->Caption = "Es ist " + AnsiString(stunde) + " Uhr."; } //---------------------------------------------------------------------------
Der Nachteil an dieser Lösung ist, dass das Programm es nicht mitbekommt, wenn die Zeit verstellt wird. Es dauert bis zum Abschluss des laufenden Zyklus, bis es wieder synchron läuft.
@Unregistriert: Es wäre selbstverständlich möglich, das Problem so zu lösen, wie Du vorschlägst. Ich halte es nur für unelegant und ineffizient. Ich vermute, Dir fehlt noch etwas Erfahrung.
-
Mist, nicht eingelogged == keine Signatur...
Also:Grüße
Joe_M.
-
zufaulzumeinloggen schrieb:
void __fastcall TForm1::Timer1Timer(TObject *Sender) { unsigned short stunde, minute, sekunde, millisekunde; TDateTime::CurrentDateTime().DecodeTime(&stunde, &minute, &sekunde, &millisekunde); Timer1->Interval = (60 * 60 * 1000) - (minute * 60 * 1000) - (sekunde * 1000) - millisekunde + 500; Label1->Caption = "Es ist " + AnsiString(stunde) + " Uhr."; } //---------------------------------------------------------------------------
Bei dieser Lösung muss man dann aber den Timer genau zur vollen Stunde aufrufen, sonst zeigt er, wenn man den Timer um 15:30 aufruft, erst um 16:30 "Es ist jetzt 16:00", oder?
-
Wenn Du schon nicht liest, was ich schreibe, dann probier es doch zumindest aus...
Grüße
Joe_M.
-
ty aber das mit dem Time(); war erst mal in Ordnung :>
-
roflcopter schrieb:
ty aber das mit dem Time(); war erst mal in Ordnung :>
Nein, ist es eben nicht, es ist schlechter Stil... Noch dazu ineffizient...
Grüße Joe_M.
-
Sorry das ich mich hier einfach mal einklinke, aber ich steh vor einem ganz ähnlichen Problem.
Ich möchte eine sekundengenaue Uhr programmieren.
Wie hoch sollte der Timer dann aufgelöst sein, reichen 100ms oder sollten es weniger sein?
Was meint ihr?Gibt es eine Möglichkeit das ganze ohne Timer zu realisieren, also evtl. mit einem Time-Event von Windows?
vielen Dank im voraus.
Arno
-
Die Frage passt doch in den Thread, also kein Grund für ein Sorry... Das ist sogar gewünscht.
Die TTimer-Komponente ist nur ein Wrapper für die Windowskomponente, es macht also keinen Unterschied, welche Du verwendest, außer das TTimer einfacher zu handhaben ist.
Eigentlich reicht ein Interval von genau tausend (also genau eine Sekunde). Windows ist kein Echtzeitbetriebssystem und der Windows-Timer (und somit auch TTimer) arbeiten Nachrichtengesteuert, somit ist eine gewisse Ungenauigkeit nicht zu vermeiden. Ich weiß nicht mehr genau, aber unter 30 bis 40 ms läuft das ganze schon sehr unpräzise.Grüße Joe_M.
-
Hallo
Arno schrieb:
Ich möchte eine sekundengenaue Uhr programmieren.
Wie hoch sollte der Timer dann aufgelöst sein, reichen 100ms oder sollten es weniger sein?
Was meint ihr?Für eine sekundengenaue Uhr reichen 100ms vollkommen aus. Das ist ja 10-mal so genau als du es brauchst. Abweichungen von 100ms unter weniger sind jedenfalls für Menschen so gut wie nicht wahrnehmbar.
Noch viel genauer kommst du mit TTimer eh nicht, da must du dann andere WinAPI-Mitte wie QueryPerformanceCounter benutzenGibt es eine Möglichkeit das ganze ohne Timer zu realisieren, also evtl. mit einem Time-Event von Windows?
Die einzige mir bekannte Alternative ist die schon genannte QueryPerformanceCounter-Funktion. Weiteres kannst du dann im WinAPI-Forum nachfragen.
bis bald
akari
-
Vielen Dank, werd mir das mal zugemüte ziehn.
Gruß Arno