Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sekunden an einen Timer übergeben (https://www.delphipraxis.net/28755-sekunden-einen-timer-uebergeben.html)

glkgereon 30. Aug 2004 22:09

Re: Sekunden an einen Timer übergeben
 
hmm, bei den eingabewerten hab ich auch einen fehler...moment

nein, ich will einfach das der timer nicht OnEdit3Change aktiviert wird sondern wenn der user aufn button klickt...

ahh, hier:
Delphi-Quellcode:
vorhanden:=    strtofloat(Edit1.Text);
prostunde:=    strtofloat(Edit2.Text);
benoetigt:=    strtofloat(Edit3.Text);

dec(zeitsekunden);//runterzählen

fehlend:=      benoetigt - vorhanden;
zeitstunden:=  fehlend / prostunde;
zeitsekunden:= round(zeitstunden * 3600);//und dann wieder auf festen wert setzen
du musst das noch reintuen:

Delphi-Quellcode:
vorhanden:=vorhanden+round((zeitsekundenold-zeitsekunden)*prostunde/3600);
nee, klappt auch nicht...

argghhh!!!

erst decrementierst du die zeitsekunden und dann sagst du
Delphi-Quellcode:
h:=            zeitsekunden div (60 * 60);
zeitsekunden:= zeitsekunden - h*60*60;
m:=            zeitsekunden div 60;
zeitsekunden:= zeitsekunden - m*60;
s:=            zeitsekunden;
ich mach das mal neu...

glkgereon 30. Aug 2004 22:23

Re: Sekunden an einen Timer übergeben
 
also, ich hab das mal etwas anders gelöst, nebenbei noch ne fehler-abfrage gemacht, es sollte jetzt klappen:

Delphi-Quellcode:
var
  Form1: TForm1;//erst mal hab ich deine globalen variablen gelichtet
  vorhanden, prostunde, benoetigt:double;
  laufzeit:integer;
implementation

{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
  h, m, s, sekunden:integer;
  fehlend:double;                       //dafür lokale...
begin
inc(laufzeit);                           //wie lange läuft es schon?
vorhanden:=laufzeit*prostunde/3600;      //wieviel is nach der zeit da
fehlend:=benoetigt-vorhanden;            //wieviel fehlt dann noch
sekunden:=round((fehlend)/prostunde*3600);//soviel zeit fehlt noch

h:=        sekunden div (60 * 60);      //deine berechnung
sekunden:= sekunden - h*60*60;
m:=        sekunden div 60;
sekunden:= sekunden - m*60;
s:=        sekunden;

Edit4.Text:= 'h: '+inttostr(h)+' min: '+inttostr(m)+' sec: '+inttostr(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin                                     //auf buttonklick
try
  vorhanden:=    strtofloat(Edit1.Text); //einlesen
  prostunde:=    strtofloat(Edit2.Text);
  benoetigt:=    strtofloat(Edit3.Text);
  Timer1.Enabled:=true;                   //timer enablen
except                                    //wenns fehler gibt (zahl flsch drin oder so)
  Application.MessageBox('Da Stimmt aber eine Zahl nicht...','Oops...');
end;
end;
und ich versteh immer noch nicht was das prog macht... :(

Tavik 31. Aug 2004 04:59

Re: Sekunden an einen Timer übergeben
 
folge diesem Link und melde dich an, dann verstehst du was los ist!


http://ds80-237-205-38.dedicated.hos....php?ref=cMzrb



wenn dir das Spiel spaß macht komm zur BUC! wir sind zwar klein, aber wir spielen nur aus Spaß an der Freunde.
Das Programm erleichtert dort die Planung der Baueinsätze!

schwer zu erklären....probier es einfach aus!


vielen vielen Dank nochmal!
tavik

Sharky 31. Aug 2004 06:34

Re: Sekunden an einen Timer übergeben
 
Hai Tavik,

auch wenn es mir nicht gesagt wird sehe ich das so das Du einen Countdown anzeigen möchtest?
Warum dafür nicht mit der Systemzeit arbeiten?
Hier mal mein Ansatz. Er benötigt:
1 x Timer
1 x Button
3 x Edit
2 x Label
Delphi-Quellcode:
var
  stunden : Integer;
  minuten : Integer;
  sekunden : Integer;
  startzeit : TTime;
  countdown   : TTime;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
  Timer1.Interval := 25;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  stunden := StrToInt (Edit1.Text);
  minuten := StrToInt (Edit2.Text);
  sekunden := StrToInt (Edit3.Text);
  countdown := EncodeTime (stunden,minuten,sekunden,0);
  startzeit := Now;
  Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := TimeToStr (now); // Echzeit
  Label2.Caption := TimeToStr (countdown - (now-startzeit)); // Mein Countdown
end;

Tavik 31. Aug 2004 13:40

Re: Sekunden an einen Timer übergeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi glkbkk


leider haben deine veränderungen auch einen nachteil!
die variable benötigt hat keinen einfluss mehr auf den timer!
er zählt nur runter wie lange gebraucht wird um die rohstoffe zusammenzusparen wenn nix da ist!

gib mal ein:

vorhanden: 30
pro stunde: 60
benoetigt: 30

der timer sollte jetzt null anzeigen! da ich genügend rohstoffe zusammenhab, aber leider fängt er bei einer halben stunde an!

hast du vielleicht die rettende idee?


gruss
sascha


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.
Seite 3 von 3     123   

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