Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Zeit] 30min aufzählen (https://www.delphipraxis.net/122176-%5Bzeit%5D-30min-aufzaehlen.html)

BullsEye 10. Okt 2008 22:44


[Zeit] 30min aufzählen
 
Hallo DP'ler...

Also, ich arbeite zur Zeit an einem kleinem Projekt. Nichts großes bzw besonderes. Dort geb ich auf einem Label die Zeit aus.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  lblUhrzeit.Caption := TimeToStr(time);
end;
Soweit so gut. Dann kann ich in einem Editfeld eine frei wählbare Uhrzeit ausgeben ('22:22:22' als BSP). Sobald ich die gewünschte funktion aktviere, wird ein Timer Enabled, der dauerhaft die Uhrzeit des Labels mit der Uhrzeit im Edit vergleich.

Delphi-Quellcode:
  IF lblUhrzeit.Caption = edtUhrzeit.text THEN BEGIN
          // [..]
  END;
Stimmt nun die Zieluhrzeit (Edit) mit der aktuellen Uhrzeit (Label) überein, ist der Code aktiv. Das funktioniert soweit auch alles.
Allerdings möchte ich nun, wenn die Zeit abgelaufen ist, eine neue Zielzeit berechnen. Sprich die wir haben es 22:22:22 und der Code ist einmal durchlaufen. Bisher war es so, das einfach die CheckBox nicht mehr abgehackt ist. Ich möchte aber, das die Zieluhrzeit aus dem Editfeld von 22:22:22 auf 22:52:22 gesetzt wird. Sprich +30 Minuten.

Welches ist hier die am besten geeigntste Lösung?


gruß

Fussball-Robby 10. Okt 2008 22:56

Re: Zeitproblem
 
Am besten die Uhrzeit aus dem Edit in ein TDateTime umwandeln, mit der Funktion IncMinute aus der Unit DateUtils 30 Minuten dazuzählen und dann wieder ausgeben.

SimStar001 11. Okt 2008 07:28

Re: Zeitproblem
 
ich würde es so machen:

Delphi-Quellcode:


function GetNewTime(Zeit : TTime; IncMinuten : integer):TTime;
var Hour, Minute, Sek, mSek : word;
begin
  DecodeTime(Zeit,Hour,Minute,Sek,mSek);
  Minuten := IncMinuten + Minuten;
  result := EncodeTime(Hour,Minuten,Sekunden,mSek);
end;

Ich bin mir aber gerade net sicher, die EncodeFunktion Minuten > 59 auch richtig umwandelt und dann dementsprechend die H hochsetzt.
Einfach mal ausprobieren!

alzaimar 11. Okt 2008 08:32

Re: Zeitproblem
 
Wie wäre es mit einem simplen:
Delphi-Quellcode:
NeueZeit := AlteZeit + Minuten/1440;

BullsEye 11. Okt 2008 10:50

Re: Zeitproblem
 
Ich habs mal so gemacht:

Delphi-Quellcode:
      IF chkbAutoTime.Checked THEN BEGIN
        zeit := StrToTime(edtZeit.Text);
        zeit := IncMinute(zeit, 31);
        edtZeit.Text := TimeToStr(zeit);
      END ELSE BEGIN
        MrVariable:= 3; // ist ne Integervariable die ich zum vergleichen des Status benötigt
      END;

SirThornberry 11. Okt 2008 12:29

Re: Zeitproblem
 
Könntest du deinem Beitrag bitte einen aussagekräftigeren Titel geben? "Zeit" sagt nicht gerade viel aus. Danke :-)

BullsEye 11. Okt 2008 12:34

Re: Zeitproblem
 
Zitat:

Zitat von SirThornberry
Könntest du deinem Beitrag bitte einen aussagekräftigeren Titel geben? "Zeit" sagt nicht gerade viel aus. Danke :-)

Ich hoffe der ist ein wenig besser ;)


Zitat:

Zitat von BullsEye
Ich habs mal so gemacht:

Delphi-Quellcode:
      IF chkbAutoTime.Checked THEN BEGIN
        zeit := StrToTime(edtZeit.Text);
        zeit := IncMinute(zeit, 31);
        edtZeit.Text := TimeToStr(zeit);
      END ELSE BEGIN
        MrVariable:= 3; // ist ne Integervariable die ich zum vergleichen des Status benötigt
      END;


hm iwie klappt das nur ab und zu. Manchmal zählt der dann +3 Stunden

nahpets 13. Okt 2008 10:12

Re: Zeitproblem
 
Hallo,

versuch's mal so:
Delphi-Quellcode:
IF chkbAutoTime.Checked THEN BEGIN
  edtZeit.Text := TimeToStr(StrToTime(edtZeit.Text) + (1 / 24 / 2));    
END ELSE BEGIN
  MrVariable:= 3; // ist ne Integervariable die ich zum vergleichen des Status benötigt
END;
1 = 1 Tage im TDateTime
1 / 24 = eine Stunde
1 / 24 / 2 = eine halbe Stunde
entspricht 1 / 48 oder 0,020833333333333333333333333333333

BullsEye 13. Okt 2008 10:23

Re: [Zeit] 30min aufzählen
 
Ansich klappt das. Aber ich glaub ich habe den Fehler gefunden.
Ich habe mal einen Counter eingebaut. Diesen habe ich nach der Änderung deines Codes auf 0 gesetzt.

Dann habe ich das Programm ausgeführt. Wir hatten es 11:10. Die Zeit zu der die Seite aufgerufen werden soll ist die Startzeit. Nachdem die Startzeit erreicht wurde und die Aufgabe erfüllt, soll automatisch die Zielzeit eingetragen werden.

Zitat:

11:15 0 -> Startzeit
11:45 1 -> Zielzeit
12:15 2
12:45 3
13:15 4
13:45 5
14:15 6
Allerdings erhalte ich als Zielzeit 14:15. Und der Counter steht auf 6. Sprich er ruft die Seite 5x auf!

Aber ich glaub der Fehler liegt darin, das der Counter sowie die Zeit im "OnDocumentComplete" des TWebBrowsers aufgerufen wird.

EDIT: Fehler gefunden und behoben!!!
Ich hab mURL auf 2 gesetzt. WENN mURL = 2 DANN soll die Procedure aufgerufen werden. Wenn chkbAutoTime nicht angewählt ist, dann soll mURL auf 3 gesetzt werden. Und da ich das immer angewählt hatte, wurde mURL nicht weiter gesetzt und war somit immer auf 2 und hat den Counter und die Zeit jedes mal aufgezählt, wenn eine Internetseite fertig geladen ist. Und sich ein Werbefenster geöffnet hat, war die Zeit deshalb jedes mal mind Doppelt so weit Sprich Counter auf 2 anstatt auf 1

@nahpets: Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr.

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