Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zeitraum zur Uhrzeit addieren


WarrenFaith - Mi 12.05.04 15:37
Titel: Zeitraum zur Uhrzeit addieren
Hi

ich hab folgendes Problem:
Ich hab für ein Onlinegame ein Ressourcenrechner gemacht, der mir ausgibt wieviel Zeit ich bis zum ersparen bestimmter Mengen benötige. Diese Zeiten sind in Tage, Stunden, Minuten unterteilt und jeweil in einem extra editfeld ausgegeben. Nun würde ich gerne die ausgerechnete zeit zur momentanen Systemzeit addieren, damit man bei 3 Tagen, 5h und 37 Minuten nicht noch selbst rechnen muss :)
Ich hab momentan ein Systemzeittimer eingebaut und komme nun nicht weiter.
Hat da wer schonmal sowas gemacht und kann mir nen bissle Quellcode als Ideenstütze geben?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
 { String sStunde ergibt gesamtdauer, aufteilung der dauer in Tage, Stunden, Minuten }
 while sStunde > 24 do
 begin
      sStunde := sStunde - 24;
      rDay := rDay + 1;
 end;
 Day.Text := FloatToStr(rDay);

 while (sStunde < 24) and (sStunde >= 1) do
 begin
      sStunde := sStunde - 1;
      rHours := rHours + 1;
 end;
 Hours.Text := FloatToStr(rHours);

 if (sStunde < 1) and (sStunde >= 0) then
 begin
      sStunde := sStunde * 60;
      while sStunde >= 1 do
      begin
           sStunde := sStunde - 1;
           rMinutes := rMinutes +1;
      end;
 end;
 Minutes.Text := IntToStr(rMinutes);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Systemzeit.caption:=timetostr(now);
end;

procedure TForm1.RestzeitClick(Sender: TObject);
begin
 { hier soll die berechnung für die Zeit + Systemzeit hin }
 Restzeit.caption:=TimeToStr(sRestzeit);
end;


Ich bin anfänger, deswegen hab ich wahrscheinlich einen extrem Komplizierten weg genommen um mein Ziel zu erreichen. Also deswegen bitte drüber hinwegsehen :)

Danke im vorraus

[edit] Code verkleinert [/edit]


jaenicke - Mi 12.05.04 16:02

Du erwartest doch wohl nicht, dass ich diesen ganzen Quelltext durchgehe, oder???

Schreib bitte nur eine gekürzte Fassung des Quelltextes in deine Frage, bei der alles überflüssige rausgenommen ist :evil:
Und ein bisschen Kommentar wäre hilfreich.

Na gut:

Du musst zur Lösung des Problems wissen, dass die Zeit, also eine TDateTime-Variable nix anderes als eine Gleitkommazahl, bei der 1 ein Tag bedeutet und 1/24 also eine Stunde.
Du musst also Tage + (Stunden / 24) + (Minuten / (24 * 60)) zur aktuellen Systemzeit (now) dazurechnen:


Delphi-Quelltext
1:
    Restzeit.caption:=TimeToStr(now + Tage + (Stunden / 24) + (Minuten / (24 * 60)));                    


Die Variablen, in denen Stunden und Minuten stehen, musst Du da einsetzen. Welche das sind, kann man ja nicht so schnell in dem Riesenquelltext sehen. (Zumal ohne Kommentare über die Bedeutung der Variablen)

Sebastian


WarrenFaith - Mi 12.05.04 16:18

Danke nun hab ich endlich ne idee (danke auch für die berechtigte kritik am post)


MSCH - Mi 12.05.04 19:26

da gibts die Unit DateUtils, da ist alles drinne was man so brauch.
grez
msch


WarrenFaith - Do 13.05.04 08:05

ich glaub das ist bei Delphi 5 nicht dabei :)