Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verbleibende Zeit anzeigen (https://www.delphipraxis.net/47412-verbleibende-zeit-anzeigen.html)

tail 10. Jun 2005 18:59


Verbleibende Zeit anzeigen
 
Ich habe einen Timer, Timer1. Der hat die Intervall 6000 (60s) Der läuft ab.Und ich will die Verbleibende Zeit in einem Label angezeigt bekommen, das ist aber kein Problem. Ich möchte wissen, wie ich die Verbleibende Zeit herausfinde. Kann mir einer helfen?

zecke 10. Jun 2005 19:02

Re: Verbleibende Zeit anzeigen
 
:hi:

eine direkte funktion/befehl kenne ich spontan nicht, aber du kannst auch einfach einen 2. timer erstellen, welcher dann einfach ein label oder einen wert jede sekunde aktualisiert, sozusagen parallel zu dem eigentlich ablaufenden.

also das ist die noob-lösung, sowas mach ich immer! :)

funktionalität reicht mir :thumb: :mrgreen:

:hi:

100nF 10. Jun 2005 19:03

Re: Verbleibende Zeit anzeigen
 
hallo,

zeig mal ein bisschen code...

tail 10. Jun 2005 19:04

Re: Verbleibende Zeit anzeigen
 
Zitat:

Zitat von urbanbruhin
hallo,

zeig mal ein bisschen code...

Was für einen Code meinst du?

@Zecke, danke. Aber wie lese ich die Verbleibende Zeit dann aus dem Raus?

jfheins 10. Jun 2005 19:08

Re: Verbleibende Zeit anzeigen
 
Du könntest z.B. den Timer auf 1135 ms stelle, und dann sowas machen:
Delphi-Quellcode:
var
Zeit: Integer;

...

// Timer-Prozedur:
dec (Zeit);
LabelX.Caption := inttostr ('noch genau ' + zeit + ' tail''sche Zeiteinheiten');
if Zeit = 0 then
begin
  TimerY.Enabled := False;
  // ...
end;
;)

100nF 10. Jun 2005 19:10

Re: Verbleibende Zeit anzeigen
 
Zitat:

Was für einen Code meinst du?
den den du schon hast. einfach das ontimer ereignis...

tail 10. Jun 2005 19:19

Re: Verbleibende Zeit anzeigen
 
Zitat:

Zitat von urbanbruhin
Zitat:

Was für einen Code meinst du?
den den du schon hast. einfach das ontimer ereignis...

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
     //Nach einer Minute das Memo sperren
     Memo1.ReadOnly := True;
     Label2.Caption := 'Zeit abgelaufen';
     Label3.Visible := False;

     //gezählte Zeichen auf einem Label ausgeben
     lblZeichen.Caption := IntToStr(Length(Memo1.Text) - 2 * Memo1.Lines.Count);
end;
@jfheins: Das geht nicht, der Meldet mir:
[Error] UAnschlag.pas(72): ',' or ':' expected but '(' found

jfheins 10. Jun 2005 19:30

Re: Verbleibende Zeit anzeigen
 
Zitat:

Zitat von tail
@jfheins: Das geht nicht, der Meldet mir:
[Error] UAnschlag.pas(72): ',' or ':' expected but '(' found

Vieleicht sagst du mir genau, wo ? Normalerweise müsste das nämlich gehen - und es ist mit Abstand eleganter und besser, als ein 2. Timer ... :roll:

Ach ja, sorry, muss
Delphi-Quellcode:
LabelX.Caption := 'noch genau ' + inttostr (zeit) + ' tail''sche Zeiteinheiten';
heißen, aber darauf müsste man noch selber kommen ... ;)

tail 10. Jun 2005 19:41

Re: Verbleibende Zeit anzeigen
 
Zitat:

Zitat von jfheins
Zitat:

Zitat von tail
@jfheins: Das geht nicht, der Meldet mir:
[Error] UAnschlag.pas(72): ',' or ':' expected but '(' found

Vieleicht sagst du mir genau, wo ? Normalerweise müsste das nämlich gehen - und es ist mit Abstand eleganter und besser, als ein 2. Timer ... :roll:

Ach ja, sorry, muss
Delphi-Quellcode:
LabelX.Caption := 'noch genau ' + inttostr (zeit) + ' tail''sche Zeiteinheiten';
heißen, aber darauf müsste man noch selber kommen ... ;)

Achso, das hier:
dec (Zeit);

das ist die Zeile

Auf das mit dem inttostr bin ich selber gekommen.

100nF 10. Jun 2005 19:49

Re: Verbleibende Zeit anzeigen
 
hi,

du könntest den timer intervall auf 1000 einstellen. dann bei einem label immer so eins minus rechnen:
Delphi-Quellcode:
label1.caption := inttostr(strtoint(label1.caption)-1);
wenn label1.caption = 0, dann wird das ereignis ausgelöst, dass du jede minute haben willst. natürlich musst du label1.caption wieder auf 60 stellen.

gruss
urbanbruhin

jfheins 10. Jun 2005 19:52

Re: Verbleibende Zeit anzeigen
 
Mhmm ... dan schreib halt zeit := zeit - 1; ;)

Khabarakh 10. Jun 2005 21:29

Re: Verbleibende Zeit anzeigen
 
Ich wäre für eine Endlosschleife (natürlich nur für 60s endlos), Timer sind hässlich :P .

malo 10. Jun 2005 21:40

Re: Verbleibende Zeit anzeigen
 
Zitat:

Zitat von Khabarakh
Ich wäre für eine Endlosschleife (natürlich nur für 60s endlos), Timer sind hässlich :P .

Endlosschleife? :shock:

Wem willst du DAMIT die Rechenleistung klauen? :shock:

Ein Timer ist imho nicht hässlich. Es ist einfach ein eigener Thread, der in einem voreingestellten Intervall immer das OnTimer-Event auslöst.

Prinzipiell kann man es mit einer Schleife machen, aber:

Entweder das Programm wird durch die ewige Schleife (und eventuelle Sleeps) ins "Stocken" gebracht (ich weiß grade nicht, wie Delay funktioniert...), oder man ruft immer "Application.ProcessMessages" auf und macht dann alles nur langsamer. Ein Thread ist für sowas imho genau das richtige (in diesem Fall in Form eines Timers) ;)

tail 10. Jun 2005 21:46

Re: Verbleibende Zeit anzeigen
 
Zitat:

Zitat von urbanbruhin
hi,

du könntest den timer intervall auf 1000 einstellen. dann bei einem label immer so eins minus rechnen:
Delphi-Quellcode:
label1.caption := inttostr(strtoint(label1.caption)-1);
wenn label1.caption = 0, dann wird das ereignis ausgelöst, dass du jede minute haben willst. natürlich musst du label1.caption wieder auf 60 stellen.

gruss
urbanbruhin

Danke, dass habe ich genommen und funktioniert.

SirThornberry 10. Jun 2005 21:53

Re: Verbleibende Zeit anzeigen
 
mit GetTickCount bekommt man die Zeit in Millisekunden seit windowsstart.
Bevor du den Timer startest holst du dir also die Zeit und addierst deine spanne dazu.
Delphi-Quellcode:
EndTime := GetTickCount + 6000;
Timer1.Interval := 500;
Timer1.Enabled := True;
und im OnTimer ereignis
Delphi-Quellcode:
var LTime: Cardinal;
begin
  LTime := GetTickCount;
  if LTime < EndTime then
    caption := 'verbleibend: ' + inttostr(EndTime - LTime) + ' sekunden'
  else begin
    Timer1.Enabled := False;
    caption := 'fertig';
  end;
und ein Timer ist keine Schleife in einem Thread. Das Timer-Event wird von Windows ausgelöst und es wird an die Anwendung eine Message geschickt. Alternativ kann man auch wenn man die Api-Funktion dafür nutzt direkt eine Funktionsadresse angeben so das keine Message geschickt wird...

manakinn 21. Jun 2005 16:55

Re: Verbleibende Zeit anzeigen
 
[quote="tail"]
Zitat:

Zitat von urbanbruhin
hi,

du könntest den timer intervall auf 1000 einstellen. dann bei einem label immer so eins minus rechnen:
Delphi-Quellcode:
label1.caption := inttostr(strtoint(label1.caption)-1);
wenn label1.caption = 0, dann wird das ereignis ausgelöst, dass du jede minute haben willst. natürlich musst du label1.caption wieder auf 60 stellen.

gruss
urbanbruhin

Das hab ich auch Probiert, aber anscheint geht das nicht bei Random Timer :(
Im Label5 soll einfach nur die Zeit angezeigt werden, bis der Timer abgelaufen ist

alzaimar 21. Jun 2005 17:05

Re: Verbleibende Zeit anzeigen
 
Delphi-Quellcode:
Procedure SetupTimer;
Begin
  Timer.Tag := 60; // So oft soll der Timer feuern, bis fettich
  Timer.Interval := 1000; // 1x pro Sekunde
  Timer.OnTimer := ShowRemaining;
  Timer.Enabled := True;
End;

Procedure TmyForm.ShowRemaining (Sender : TObject);
Begin
  Timer.Tag := Timer.Tag - 1;
  If Timer.Tag = 0 Then Begin
    Timer.Enabled := False;           // Timer Ausschalten
    Label2.Caption :='Fettich';
    DoWhatever;
    End
  Else
    Label2.Caption := Format('Verbleibende Zeit %d Sekunden',[Timer.Tag]);
End;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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