![]() |
Re: Differenz 2erDatum in Tmemo
hab das problem weckzeit in abhängigkeit vom weckdatum schon seit tagen versucht zu lösen und probiert.
obwohl ich dem timer zuweise:
Delphi-Quellcode:
wird wenn das weckdate kleiner als die reale zeit ist, immer nur von einem tag ausgegangen.
WeckTime:= edhours.Text + ':' + edmin.Text + ':' + edseconds.Text ;
WeckDate:= cbdatum.Text; if TimeToStr(Now) =WeckTime then begin //now >= strToDateTime(WeckTime + WeckDate) selbst geht auch nicht für mein prob ... DecodeTime(Time, aStd, aMin, aSec, aMsec); //now := Timetostr(Time); Uhrzeit_Ende := strtoTime(Wecktime); Wecktime:=Timetostr(Uhrzeit_Ende); Uhrzeit_Verbleib := Time - Uhrzeit_ende; Buffer := timetostr(Uhrzeit_Verbleib); if Uhrzeit_Ende > Time then begin... else begin ... in klartext: weckzeit: 06:45:00 //vom user eingestellt über 3 editfelder weckdate: 02.06.06 dann geben die 3editfelder den countdown für die differenz von 18:1:00 aus. // nur als richtwert. sobald jetzt aber das weckdate auf 03.06.06 gesetzt wird, kommt das selbe wie oben also 18:1:00 differenz aus. kann mir einer helfen? |
Re: Differenz 2erDatum in Tmemo
Zitat:
Gruß Hawkeye |
Re: Differenz 2erDatum in Tmemo
Hallo.
Du hast einen dicken Fehler in deiner Rechnung:
Delphi-Quellcode:
Du rechnest hier mit TDateTime-Werten. Diese Werte geben den Zeitabstand zu einem Referenzdatum in Tagen an. Nur mit den Uhrzeitanteilen -- Time und UhrzeitEnde sind Werte kleiner 1 -- rechnest du effektiv mit einer Uhrzeit am 30. Dez 1899, was gewiss nicht dein Wunsch ist. Um den zeitlichen Abstand zwischen zwei Zeitpunkten zu bestimmen müssen unbedingt beide Zeitpunkte auf das gleiche Referenzdatum normiert sein.
Uhrzeit_Verbleib := Time - Uhrzeit_ende;
Du darfst also nicht Time (0.75 = 18 Uhr), sondern musst Now (38869.75 = heute 18 Uhr) als Minuend verwenden. Aus gleichem Grund musst du beim Subtrahend (UhrzeitEnde) mit der Kombination von WeckDatum und WeckZeit rechnen (UhrzeitEnde := StrToDate(WeckDatum) + StrToTime(WeckTime) // nur zur Verdeutlichung). Bei der Differenz darfst du dann allerdings auch Werte größer als 1 erwarten, die dann einen Zeitraum angeben. Der Wert vor dem Komma repräsentiert die Tage, der Wert nach dem Komma den Bruchteil eines Tages. Bei der Darstellung von Zeiträumen Größer oder gleich 1 versagt TimeToStr(), aber du kannst statt dessen die Funktion ![]() Freundliche Grüße vom marabu |
Re: Differenz 2erDatum in Tmemo
Also würdest du das so machen?
Delphi-Quellcode:
man kann die datetimetostr2 doch auch anders machen?... function DateTimeToStr2(dt: TDateTime; daySep: string): string; begin Result := Format('%d%s%s', [Trunc(dt), daySep, TimeToStr(dt)]) end; begin WeckTime:= edhours.Text + ':' + edmin.Text + ':' + edseconds.Text ; WeckDate:= cbdatum.Text; DecodeTime(Time, aStd, aMin, aSec, aMsec); Uhrzeit_Ende := StrToDate(WeckDate) + StrToTime(WeckTime); Wecktime:=Timetostr(Uhrzeit_Ende); Uhrzeit_Verbleib := Now - Uhrzeit_ende; DateTimeToStr2(Uhrzeit_Verbleib,WeckTime); //parameter funzen aber nich 100% Buffer := timetostr(Uhrzeit_Verbleib); if Uhrzeit_Ende > Time then begin Std := copy(Buffer, 1,2); Min := copy(Buffer, 4,2); Sec := copy(Buffer, 7,2); bsec := strtoint(Sec) +1; mehours.text:=std; memin.Text:=min; meseconds.text:=inttostr(bsec); end else begin Std := copy(Buffer, 1,2); Min := copy(Buffer, 4,2); bstd := 23-strtoint(std); bmin := 59-strtoint(min); if asec >0 then bsec := 60-asec else bsec := 0; mehours.text:=inttostr(bstd); memin.Text:=inttostr(bmin); meseconds.text:=inttostr(bsec); end; ... //einen tag höher setzen if (Wecktime) < TimeToStr(now) then cbdatum.ItemIndex:= 1; Problem aber weiterhin Weckzeit in Abhängigkeit vom Weckdatum |
Re: Differenz 2erDatum in Tmemo
Hallo Daniel,
ich würde es so oder ähnlich machen - nur den Rechenteil, nicht die Ablaufsteuerung:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TDemoForm.???
var dtAlarm: TDateTime; begin dtAlarm := StrToTime(edhours.Text + ':' + edmin.Text + ':' + edseconds.Text) + StrToDate(cbdatum.Text); if Now < dtAlarm then ShowRemainingTime(dtAlarm); end; procedure TDemoForm.ShowRemainingTime(dtAlarm: TDateTime); var s: String; dtRemaining: TDateTime; hours, mins, secs, msecs: Word; begin // DecodeTime(Time, aStd, aMin, aSec, aMsec); // Uhrzeit_Ende := StrToDate(WeckDate) + StrToTime(WeckTime); // Wecktime := Timetostr(Uhrzeit_Ende); // Uhrzeit_Verbleib := Now - Uhrzeit_ende; dtRemaining := dtAlarm - Now; DecodeTime(dtRemaining, hours, mins, secs, msecs); hours := hours + 24 * Trunc(dtRemaining); meHours.Text := IntToStr(hours); meMin.Text := IntToStr(mins); meSeconds.Text := IntTostr(secs); { Buffer := timetostr(Uhrzeit_Verbleib); if Uhrzeit_Ende > Time then begin Std := copy(Buffer, 1,2); Min := copy(Buffer, 4,2); Sec := copy(Buffer, 7,2); bsec := strtoint(Sec) +1; mehours.text := std; memin.Text := min; meseconds.text := inttostr(bsec); end else begin Std := copy(Buffer, 1,2); Min := copy(Buffer, 4,2); bstd := 23-strtoint(std); bmin := 59-strtoint(min); if asec > 0 then bsec := 60-asec else bsec := 0; mehours.text := inttostr(bstd); memin.Text := inttostr(bmin); meseconds.text := inttostr(bsec); end; } end; |
Re: Differenz 2erDatum in Tmemo
hm so geht das.
bissel kürzer und effektiver. danke |
Re: Differenz 2erDatum in Tmemo
ich hab noch in der showremainingtime procedure
das dazugefügt:
Delphi-Quellcode:
wieso wird dann aber nicht wenn die verbleibende zeit und die reale zeit gleich null sind
if Now =(dtRemaining) then begin
fileopen:= Label2.caption; With MediaPlayer1 do begin Filename := opendialog1.filename; Open; Play; die datei abgespielt? |
Re: Differenz 2erDatum in Tmemo
Hallo Daniel,
die reale Zeit (Now) wird wohl in absehbarer Zeit nicht Null werden. Probiere es mal so:
Delphi-Quellcode:
Grüße vom marabu
begin
if dtRemaining < 0 then begin fileopen:= Label2.caption; with MediaPlayer1 do begin Filename := OpenDialog1.Filename; Open; Play; // ... |
Re: Differenz 2erDatum in Tmemo
das geht aber nicht in deiner prozedur ..ShowRemainingTime(dtAlarm: TDateTime);
|
Re: Differenz 2erDatum in Tmemo
Warum nicht?
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 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