![]() |
zahl in Uhrzeit darstellen
Moin,
also meine Frage ist: Wie kann ich zb. die Zahl 3000 in einer Uhrzeit darstellen, zb. in einem Label. Die 3000 soll 3000 Sekunden bedeuten. MfG |
Re: zahl in Uhrzeit darstellen
Delphi-Quellcode:
function FormatTime(t: int64): string; { (gettime by Assarbad) }
begin result := IntToStr(t mod 1000); case t mod 1000 < 100 of true: result := {'0' +} result; end; t := t div 1000; // -> seconds {result := IntToStr(t mod 60) + ' Sekunden ' + result; case t mod 60 < 10 of true: result := '0' + result; end;} t := t div 60; //minutes result := IntToStr(t mod 60) + ' Min ' + result; case t mod 60 < 10 of true: result := '0' + result; end; t := t div 60; //hours result := IntToStr(t mod 24) + ' Std ' + result; case t mod 60 < 10 of true: result := '0' + result; end; result := IntToStr(t div 24) + ' T ' + result; end; |
Re: zahl in Uhrzeit darstellen
Delphi-Quellcode:
Mögest mir den auch kruz erklären?
function FormatTime(t: int64): string; { (gettime by Assarbad) }
begin result := IntToStr(t mod 1000); case t mod 1000 < 100 of true: result := {'0' +} result; end; t := t div 1000; // -> seconds {result := IntToStr(t mod 60) + ' Sekunden ' + result; case t mod 60 < 10 of true: result := '0' + result; end;} t := t div 60; //minutes result := IntToStr(t mod 60) + ' Min ' + result; case t mod 60 < 10 of true: result := '0' + result; end; t := t div 60; //hours result := IntToStr(t mod 24) + ' Std ' + result; case t mod 60 < 10 of true: result := '0' + result; end; result := IntToStr(t div 24) + ' T ' + result; end; |
Re: zahl in Uhrzeit darstellen
@Luckie: Sei doch bitte nicht immer so wortkarg und erläutere doch die wichtigen Dinge. Hier beispielsweise, dass man die Zeit in Millisekunden angeben muss. ;)
Edit: Ging es nicht auch einfach so?
Delphi-Quellcode:
function FormatTime(t: int64): string;
begin t := t div 1000; // seconds result := IntToStr(t mod 60) + ' Sek ' + result; t := t div 60; // minutes result := IntToStr(t mod 60) + ' Min ' + result; t := t div 60; // hours result := IntToStr(t mod 24) + ' Std ' + result; result := IntToStr(t div 24) + ' T ' + result; end; |
Re: zahl in Uhrzeit darstellen
Wenn ich ganz ehrlich bin steig ich da noch net ganz durch^^
|
Re: zahl in Uhrzeit darstellen
Zitat:
![]() ![]() Aufgerufen wird das ganze zum Beispiel so:
Delphi-Quellcode:
Da der Parameter die Anzahl der Millisekunden erwartet, müsstest du die Sekunden erst umrechnen (mit 1000 multiplizieren), natürlich kannst du auch zu Beginn der Funktion folgendes aufrufen:
ShowMessage(FormatTime(3000000));
// 3000000 = 3000 * 1000 // ms s
Delphi-Quellcode:
dann kannst du direkt die Anzahl der Sekunden übergeben.
t := t * 1000;
|
Re: zahl in Uhrzeit darstellen
Hi,
so geht es auch:
Delphi-Quellcode:
Grüße vom marabu
uses
DateUtils; // const SecsPerDay = 86400; function SecondsToStr(nSeconds: Cardinal): String; begin Result := DateTimeToStr2(nSeconds / SecsPerDay); end; PS: ![]() |
Re: zahl in Uhrzeit darstellen
Zitat:
Und Cardinal ist ein Typ gell? |
Re: zahl in Uhrzeit darstellen
Das hast du genau richtig erkannt.
marabu |
Re: zahl in Uhrzeit darstellen
Also Luckie, von deiner langen Funktion bin ich jetzt etwas überrascht... Ich würd das in einen 2-Zeiler packen :mrgreen:
Delphi-Quellcode:
function SecToStr (t : int64) : string ;
var DT : TDateTime ; begin DT := t / 60 / 60 / 24 ; Result := format ('%s Tage, %s',[Trunc(TD),formatdatetime ('h Stunden, n Minuten und s Sekunden',DT)]) ; end ; |
Re: zahl in Uhrzeit darstellen
Ich habe den Code mal ein wenig poliert, damit der Compiler ihn übersetzen kann und der Rechner ohne Laufzeitfehler das richtige Ergbnis liefert:
Delphi-Quellcode:
Gruß Hawkeye
function SecToStr (t: Int64): string;
var DT : TDateTime; begin DT := t / (60 * 60 * 24); Result := Format('%d Tag(e), %s', [Trunc(DT), FormatDateTime('h "Stunden", n "Minuten und" s "Sekunden"', DT)]); end; |
Re: zahl in Uhrzeit darstellen
Zitat:
|
Re: zahl in Uhrzeit darstellen
und wie bau ich eine function ein? wie eine prozedure?
|
Re: zahl in Uhrzeit darstellen
Zitat:
Delphi-Quellcode:
Damit die Funktion "gesehen" wird, muss Sie vor dem Aufruf im Button1Click in die Unit eingefügt werden:
procedure TForm1.Button1Click(Sender: TObject);
begin Label1.Caption := SecToStr(25000); end;
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function SecToStr (t: Int64): string; var DT : TDateTime; begin DT := t / (60 * 60 * 24); Result := Format('%d Tag(e), %s', [Trunc(DT), FormatDateTime('h "Stunden", n "Minuten und" s "Sekunden"', DT)]); end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := SecToStr(25000); end; end. |
Re: zahl in Uhrzeit darstellen
Und damit das ganze noch besser lesbarer ist, sollte man statt 24*60*60 lieber die definierten Zeitkonstanten nehmen, z.B.:
Delphi-Quellcode:
Wenn man dann noch Format Variablen verwendet ist es auch noch auf der ganzen weiten Welt verwendbar.
FormatDateTime(ShortTimeFormat, Seconds/(HoursPerDay*MinsPerHour*SecsPerMin));
|
Re: zahl in Uhrzeit darstellen
@Michael:
Wie hängt die Prozedure mit der Funktion zusammen? @All: Was mir glaub ich am meisten hilft, wenn mir einer ma dei Zelen dazu auch erklärt um es nachvoll ziehen zu können. MfG |
Re: zahl in Uhrzeit darstellen
hmmm keine Antworten mehr...ich hoffe ich nerve euch nicht zu sehr damit. :(
Ich kenne mich eben in delphi nicht so aus und darum wäre eine erklärungen u den zeilen der hilfreich wie zb. was ist int64 ist und so. MfG |
Re: zahl in Uhrzeit darstellen
Nochmal die Unit und die wichtigsten Hinweise dahinter.
Um dieses Beispiel nachzubilden, brauchst Du ein leeres Formular (neues Projekt), wo Du einen Button und ein Label rauftust. Anschließend einen Doppelklick auf den Button. [edit] 1. nochmals vereinfacht 2. ![]() [/edit]
Delphi-Quellcode:
HTH
unit Unit1; // war Delphi
// interface // überall, wo ein leerer // Kommentar hintersteht, uses // soll stellvertretend Windows, Messages, SysUtils, Variants, // darstellen, dass diese Classes, Graphics, Controls, Forms, Dialogs, // Zeilen von Delphi StdCtrls; // generiert wurden // type // TForm1 = class(TForm) // Label1: TLabel; // Button1: TButton; // procedure Button1Click(Sender: TObject); // nach Doppelklick auf den Button private // { Private-Deklarationen } // public // { Public-Deklarationen } // end; // // var // Form1: TForm1; // // implementation // // {$R *.dfm} // // die folgende Funktion muss kopiert und in Delphi eingefügt werden // und zwar an genau dieser Stelle, dadurch wird sichergestellt, // dass alle nachfolgenden "ButtonClicks" und andere Funktionen/Prozeduren // diese Benutzerfunktion "sehen" können function SecToStr (sec: Int64): string; // Name der Funktion mit einem // Übergabeparameter vom Typ var // Integer, Rückgabe nach // Verarbeitung des Parameters DT : TDateTime; // lokale Variable // ist ein String, der die // Sekunden umgewandelt hat begin DT := sec / (60 * 60 * 24); // Sekunden umwandeln in Tage // die folgende Zeile kodiert die Tage aus dem "Double" = TDateTime // in einen lesbaren String, der die Angabe Tage enthält Result := IntToStr(Trunc(DT)) + ' Tage'; // Trunc schneidet den // Nachkommaanteil einer // Dezimalzahl ab // IntToStr wandelt Zahl // in String um end; procedure TForm1.Button1Click(Sender: TObject); // begin // // in dieser Zeile wird die selbstgeschriebene Funktion aufgerufen "SecToStr" // und ihr ein Wert mitgegeben (25000 Sekunden) // die Funktion wird ausgeführt und der Rückgabewert (der ein String ist) // im Label ausgegeben Label1.Caption := SecToStr(25000); end; // end. // Finale mfg Michael |
Re: zahl in Uhrzeit darstellen
Also ich habe jetzt bei dieser zeile:
Delphi-Quellcode:
irib, iriv und iri2 sind alles als real deklariert genauso wie irig.
irig := floattosec((irib - iriv) / iri2);
label51.caption := sectostr(irig); den fehler: "Undefinierter Bezeichner: floattosec" Meine Frage wie mach ich das jetzt, dass das label irig in der Zeit angibt?? |
Re: zahl in Uhrzeit darstellen
Zitat:
:!: -->> Nicht alle Funktionen, die man gerne benutzen möchte, gibt es auch, manchmal muss man selbst Hand anlegen. |
Re: zahl in Uhrzeit darstellen
also ich hatte genau deine function vor die procedure gesetzt.
nur find ich da irgendwie keinen fehler, nochma alles:
Delphi-Quellcode:
function SecToStr (sec: Int64): string;
var DT : TDateTime; begin DT := sec / (60 * 60 * 24); Result := IntToStr(Trunc(DT)) + ' Tage'; end; procedure TForm1.Button1Click(Sender: TObject); var prodiri, prodhol, prodo2, wk, hol, o2, iri, bbt: real; iri2, hol2, o22, iri3, hol3, o23: real; iritag, holtag, o2tag: real; iristd, holstd, o2std: real; iriv, irib, holv, holb, o2v, o2b: real; irig: real; begin prodiri := strtofloat(edit1.Text); prodhol := strtofloat(edit4.text); prodo2 := strtofloat(edit5.text); bbt := strtofloat(edit2.text); wk := strtofloat(edit3.text); iri := (10 * (1 + (Power(prodiri,1.9)))); hol := (10 * (1 + (Power(prodhol,1.8)))); o2 := (10 * (Power(prodo2,2))); iri2 := iri * (Power(1 + 5/100, bbt)); hol2 := hol * (Power(1 + 5/100, bbt)); o22 := o2 * (Power(1 + 5/100,wk) * (20/70)); label1.Caption := floattostr(iri2); label2.Caption := floattostr(hol2); label4.Caption := floattostr(o22); iritag := iri2 * 24; holtag := hol2 * 24; o2tag := o22 * 24; label10.caption := floattostr(iritag); label11.caption := floattostr(holtag); label12.caption := floattostr(o2tag); iristd := strtofloat(edit6.text) * iri2; holstd := strtofloat(edit6.text) * hol2; o2std := strtofloat(edit6.text) * o22; label19.Caption := floattostr(iristd); label20.Caption := floattostr(holstd); label21.Caption := floattostr(o2std); iriv := strtofloat(edit7.text); irib := strtofloat(edit8.text); holv := strtofloat(edit9.text); holb := strtofloat(edit10.text); o2v := strtofloat(edit11.text); o2b := strtofloat(edit12.text); irig := floattosec((irib - iriv) / iri2); label51.caption := sectostr(irig); end; |
Re: zahl in Uhrzeit darstellen
Zitat:
|
Re: zahl in Uhrzeit darstellen
ok dann weiß ich schonma wie das mit dem aufrufen der function geht aber jetzt hab ich das entfernt nun hab ich in dieser zeile:
Delphi-Quellcode:
den fehler:
label51.caption := SectoStr(irig);
[Fehler] ets_res_prod2.pas(174): E2010 Inkompatible Typen: 'Int64' und 'Real' Liegt es damit zu sammen das ich irig als real deklariert hab und der rückgabewert in int64 ist? |
Re: zahl in Uhrzeit darstellen
Du brauchst jetzt die Funktionen zum Konvertieren:
FloatToStr StrToFloat IntToStr StrToInt FloatToStr StrToFloat usw. Float = Real Int = Integer steht alles in der Hilfe. |
Re: zahl in Uhrzeit darstellen
nur das doofe ist ja das es keine ganzzahligen zahlen sind und integer nur ganzzahlige beeinhaltet.
Im mom hab ich keine Ahnung wie ich das machn könnte |
Re: zahl in Uhrzeit darstellen
Zitat:
Delphi-Quellcode:
mfg
function SecToStr (sec: Int64): string;
function SecToStr (sec: Double): string; |
Re: zahl in Uhrzeit darstellen
Zitat:
|
Re: zahl in Uhrzeit darstellen
hmmm :shock: :shock: :shock: :shock: :shock: :shock:
blicke da nicht durch. Also der rückgabewert der function ist als string deklariert richtig? Dann muss ich doch irig auch als string deklarieren seh ich das richtig? Hab jetzt einfach ma irig als string deklaerier habe aber dann in der letzten zeile noch einen Fehler: "[Fehler] ets_res_prod2.pas(174): E2010 Inkompatible Typen: 'Int64' und 'string'" Demnach wäre der rückgabewert int64 jetzt meine frage wie mach ich des denn richtig? |
Re: zahl in Uhrzeit darstellen
Zeig man die QuellCodeZeile zu dieser Fehlermeldung.
PS: der Fehler könnte auch gut bei einem anderem Parameter liegen ... also wenn das mit dem String jetzt stimmt ;) |
Re: zahl in Uhrzeit darstellen
Unit: System
Description: The Trunc function truncates a real-type value to an integer-type value. X is a real-type expression. Trunc returns an Int64 value that is the value of X rounded toward zero. If the truncated value of X is not within the Int64 range, an EInvalidOp exception is raised.
Delphi-Quellcode:
...
label51.caption := sectostr(Trunc(irig)); ... |
Re: zahl in Uhrzeit darstellen
Also ichhabe das "Truunc()" mal mit eingebauut nunr anderer fehler, ier der code mit dem fehler:
Delphi-Quellcode:
und in der zeile:
function SecToStr (sec: Int64): string;
var DT : TDateTime; begin DT := sec / (60 * 60 * 24); Result := IntToStr(Trunc(DT)) + ' Tage'; end; procedure TForm1.Button1Click(Sender: TObject); var prodiri, prodhol, prodo2, wk, hol, o2, iri, bbt: real; iri2, hol2, o22, iri3, hol3, o23: real; iritag, holtag, o2tag: real; iristd, holstd, o2std: real; iriv, irib, holv, holb, o2v, o2b: real; irig: string; begin prodiri := strtofloat(edit1.Text); prodhol := strtofloat(edit4.text); prodo2 := strtofloat(edit5.text); bbt := strtofloat(edit2.text); wk := strtofloat(edit3.text); iri := (10 * (1 + (Power(prodiri,1.9)))); hol := (10 * (1 + (Power(prodhol,1.8)))); o2 := (10 * (Power(prodo2,2))); iri2 := iri * (Power(1 + 5/100, bbt)); hol2 := hol * (Power(1 + 5/100, bbt)); o22 := o2 * (Power(1 + 5/100,wk) * (20/70)); label1.Caption := floattostr(iri2); label2.Caption := floattostr(hol2); label4.Caption := floattostr(o22); iritag := iri2 * 24; holtag := hol2 * 24; o2tag := o22 * 24; label10.caption := floattostr(iritag); label11.caption := floattostr(holtag); label12.caption := floattostr(o2tag); iristd := strtofloat(edit6.text) * iri2; holstd := strtofloat(edit6.text) * hol2; o2std := strtofloat(edit6.text) * o22; label19.Caption := floattostr(iristd); label20.Caption := floattostr(holstd); label21.Caption := floattostr(o2std); iriv := strtofloat(edit7.text); irib := strtofloat(edit8.text); holv := strtofloat(edit9.text); holb := strtofloat(edit10.text); o2v := strtofloat(edit11.text); o2b := strtofloat(edit12.text); irig := floattostr((irib - iriv) / iri2); label51.caption := SectoStr(Trunc(irig)); end;
Delphi-Quellcode:
Kommt folgender Fehler:
label51.caption := SectoStr(Trunc(irig));
"[Fehler] ets_res_prod2.pas(174): E2008 Inkompatible Typen" |
Re: zahl in Uhrzeit darstellen
:) logisch wenn du
irig: string; benutzt, mach daraus wieder irig: real; und irig := (irib - iriv) / iri2; dann solltes laufen |
Re: zahl in Uhrzeit darstellen
jaaa also so weit geht es *freu*
Nun das nächste problem und zwar wie mach ich aus der Tagesanzeige eine Stunden Anzeige? |
Re: zahl in Uhrzeit darstellen
Wenn du viel mit dem TDateTime rum spielst lohnt sich ein Blick in die Unit DateUtils
|
Re: zahl in Uhrzeit darstellen
hmm hab da ein wneig durch geblättert aber trotzdemkomm ich damit net vie weiter...
denn ich möchte ja eine solche anzeige 00:00:00 |
Re: zahl in Uhrzeit darstellen
Hallo,
blätter mal ein wenig in der Hilfe nach dem Stichwort "Datum/Zeit (Routinen)". |
Re: zahl in Uhrzeit darstellen
Noch kann mir die delphi hilf enet richtig helfen deshalb hab ich ma hier geshcaut:
![]() Nur da frag ich mich wie ich das einbaue, wie mach ich das denn? |
Re: zahl in Uhrzeit darstellen
Zitat:
ich (wir) weiss (wissen) leider nicht, was Du mit diesem Programm vorhast. Aber so langsam lässt mich Deine ganze Fragerei vermuten, dass es nur irgendeine Schul-/Studien-/Praktikumsabeit sein wird. Es ist nicht schlimm, wenn man als Anfänger viele Fragen hat, aber nachdem Du hier soviele (mehr oder weniger :zwinker: ) gute Antworten bekommen hast, bist Du nun auch mal selbst am Zuge, Dich mal ein wenig in die Grundthematik einzuarbeiten, die Hinweise, wo Du schauen kannst, sind ja schon genannt worden.... Als da wären: Datentypen und Variablen, Prozeduren, Funktionen, generelle Funktionen zum umwandeln von Typen Gewiss findest Du nicht alle Antworten in der OH, aber manche Sachen solltest Du vielleicht erstmal da nachlesen. Ich weiss nicht, was Du von der Delphi-Hilfe erwartest, aber wenn die Dir "enet richtig helfen" kann, dann werden Dir wahrscheinlich die Antworten, die hier genannt werden, auch nicht viel weiterhelfen. mfg Michael |
Re: zahl in Uhrzeit darstellen
hmmm dann ich das vielleicht falsch rüber gekommmen, ich beschäftige mich zur zeit selbst damit ohne für irgendwas. ;)
Tut mir auch leid wenn ich zuviel frage. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz