Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Differenz 2erDatum in Tmemo (https://www.delphipraxis.net/70115-differenz-2erdatum-tmemo.html)

danku 1. Jun 2006 11:43

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:
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
      ...
wird wenn das weckdate kleiner als die reale zeit ist, immer nur von einem tag ausgegangen.
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?

Hawkeye219 1. Jun 2006 18:50

Re: Differenz 2erDatum in Tmemo
 
Zitat:

Zitat von danku
kann mir einer helfen?

Das habe ich in Beitrag #4 versucht...

Gruß Hawkeye

marabu 1. Jun 2006 19:06

Re: Differenz 2erDatum in Tmemo
 
Hallo.

Du hast einen dicken Fehler in deiner Rechnung:

Delphi-Quellcode:
Uhrzeit_Verbleib := Time - Uhrzeit_ende;
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.

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 DateTimeToStr2() verwenden.

Freundliche Grüße vom marabu

danku 3. Jun 2006 09:27

Re: Differenz 2erDatum in Tmemo
 
Also würdest du das so machen?

Delphi-Quellcode:
 
...
    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;
...
man kann die datetimetostr2 doch auch anders machen?

//einen tag höher setzen
if (Wecktime) < TimeToStr(now)
then cbdatum.ItemIndex:= 1;

Problem aber weiterhin Weckzeit in Abhängigkeit vom Weckdatum

marabu 3. Jun 2006 10:09

Re: Differenz 2erDatum in Tmemo
 
Hallo Daniel,

ich würde es so oder ähnlich machen - nur den Rechenteil, nicht die Ablaufsteuerung:

Delphi-Quellcode:
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;
Freundliche Grüße vom marabu

danku 3. Jun 2006 12:56

Re: Differenz 2erDatum in Tmemo
 
hm so geht das.
bissel kürzer und effektiver.
danke

danku 5. Jun 2006 17:10

Re: Differenz 2erDatum in Tmemo
 
ich hab noch in der showremainingtime procedure
das dazugefügt:

Delphi-Quellcode:
 if Now =(dtRemaining) then begin
              fileopen:= Label2.caption;
              With MediaPlayer1 do begin
               Filename := opendialog1.filename;
               Open;
               Play;
wieso wird dann aber nicht wenn die verbleibende zeit und die reale zeit gleich null sind
die datei abgespielt?

marabu 5. Jun 2006 17:16

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:
begin
  if dtRemaining < 0 then
  begin
    fileopen:= Label2.caption;
    with MediaPlayer1 do
    begin
      Filename := OpenDialog1.Filename;
      Open;
      Play;
// ...
Grüße vom marabu

danku 5. Jun 2006 18:05

Re: Differenz 2erDatum in Tmemo
 
das geht aber nicht in deiner prozedur ..ShowRemainingTime(dtAlarm: TDateTime);

marabu 5. Jun 2006 18:12

Re: Differenz 2erDatum in Tmemo
 
Warum nicht?

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz