Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer (https://www.delphipraxis.net/13295-timer.html)

deagel 15. Dez 2003 17:14


Timer
 
hallo

ich beschäftige mich erst seit ein paar monaten mit delphi und habe im moment ein kleines problem:

ich habe ein feld angelegt in das ich eine ZEit eingeben kann.
des weiteren möchte ich meine Sysstemzeit auslesen lassen. dann soll delphi diese beiden zeiten vergleicen und wenn die Systemzeit dann gleich der von mir gewählten zeit ist, dann soll das programm eine procedure starten.

Wie geht das, ich bitte um eure hilfe....
danke...

MfG
deagel

Dagon 15. Dez 2003 17:20

Re: Timer
 
Hallo

So kannst du die Systemzeit anzeigen: TimeToStr(Now)

deagel 15. Dez 2003 17:23

Re: Timer
 
thx, wie kann ich dann die zeit mit meiner eingabe vergleichen und dann die procedure starten lassen, wenn die zeit erreicht ist?

und ist es möglich die Urzeit eines servers anzeigen zu lassen, also eines rechners generell der im www hängt.???

Niels 15. Dez 2003 17:34

Re: Timer
 
Moin!

Guck dir mal in der Delphi Hilfe die Funktion CompareTime an. Die ist direkt fürs Vergleichen gedacht.

Du kannste auch die Daten mit DateTimeToTimeStamp in nen TimeStamp umwandeln (is ne längere Zahl und wird im Internet meist benutzt) und dann die beiden vergleichen

[edit]Wie meinste das mit dem Server? Willste die Zeit von außen abfragen?[/edit]

[edit2]verschrieben[/edit2]

deagel 15. Dez 2003 17:51

Re: Timer
 
jo genau ich will das das proggy mir die systemzeit eines im www hängenden Pcs anzeigt.
wie kann ich machen das zeit.text:=TimeToStr(Now); mitläuft und nicht unverändert dann da steht?

Niels 15. Dez 2003 18:50

Re: Timer
 
Moin!

Du kannst mit nem Timer alle n Sekunden die Systemzeit prüfen und mit der im Editor vergleichen.

MfG Niels

deagel 15. Dez 2003 19:04

Re: Timer
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin

end;

end.


das da oben steht da wenn ich auf den timer doppelklicke....jetzt bitte ich euch drum das mal so zu modden das er funktionieren würde, und ich es dann auch verstehe...

danke.

Niels 15. Dez 2003 19:14

Re: Timer
 
Zuerst stellste im OI ein, in welchem Zeitabstand der diese Prozedur ausführen soll (Zeit in ms).

In die Prozedur muss nur der Vergleich zwischen den beiden Zeiten rein.

MfG Niels

deagel 15. Dez 2003 19:25

Re: Timer
 
jo das ich nen vergleich brauche iss mir schon klar nur weiss ich leider net wie genau das aussehen soll.

ich hab ein feld namens zeit in dem die zeit eingetippt wird. könnte mir jmd bitte den quelltext hier posten, und etwas erklären, dass selbst ich als delphi noob verstehe?danke
also ich denke an ein konkretes beispiel danke...

wie verknüpfe ich den timer mit dem eingabe fenster und wie stelle ich esan dass er die procedure die normal über knopfdruck beginnt durch den timer ins laufen gebracht wird?

Niels 15. Dez 2003 19:35

Re: Timer
 
Moin!

Also du machst das folgendermaßen

Delphi-Quellcode:
if DateTimeToTimeStamp(StrToTime(Edit1.Text)).Time < DateTimeToTimeStamp(now).Time then // wenn Zeit im Edit-Feld kleiner als aktuelle
    //mach was
  else
    //mach was anderes

deagel 15. Dez 2003 19:39

Re: Timer
 
oki das hlft mir schon mal sehr weiter jetzt müsste ich nur wissen wie es geht :

bei //mach was anderes <-- da möchte ich die procedure

Delphi-Quellcode:
procedure TForm1.startClick(Sender: TObject); // <----DIESE PROCEDURE möchte ich ins laufen bringen..
Procedure pause(t : longint);
Var start : longint;
Begin
  Start:= gettickcount;
  While gettickcount < start+t do
              Application.processmessages
end;
begin
x:=strtoint(eingabe.text);
i:=x;
For i:=x downto 0 do
begin
ausgabe.caption:=inttostr(i);
fortschritt.position:=trunc((x-i)*(100/x)) ;
pause(1000);
end;
end;
procedure TForm1.schliessenClick(Sender: TObject);
begin
close;
end;
[edit=Luckie]Delphi-Tags ergänzt. Mfg, Luckie[/edit]

Niels 15. Dez 2003 19:51

Re: Timer
 
Füg nächstes mal bitte Delphi-Tags ein...das lässt sich schlecht lesen so!

Falls du die Prozedur startClick nur aus der IF-Entscheidung aufrufen willst dann kannste ne ganz normale Prozedur draus machen (ohne Parameter). Falls du die auch noch über den Click auf Start aufrufen willst dann lass sie so und ruf sie in der IF-Entscheidung so auf

Delphi-Quellcode:
TForm1.startClick(irgendeinObjekt); // musst halt den Name eines Objekts auf deiner Form einsetzen...z.b. Edit1
So richtig hab ich aber nicht verstanden, was du machen willst :roll:

MfG Niels

deagel 15. Dez 2003 20:28

Re: Timer
 
irgendwie macht er bei diesem letzten schritt mucken, ka wodran das liegt.
mein startbutton heisst start:

aber das hier funzt net:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if DateTimeToTimeStamp(StrToTime(zeit.Text)).Time < DateTimeToTimeStamp(now).Time then // wenn Zeit im Edit-Feld kleiner als aktuelle
    ausgabe.Caption:='noch zeit'
  else
    TForm1.startClick(start);
end;

Delphi-Quellcode:
else
    TForm1.startClick(start);
<-- da macht er stress


[Warning] Unit1.pas(42): Comparing signed and unsigned types - widened both operands
[Warning] Unit1.pas(48): For loop control variable must be simple local variable
[Error] Unit1.pas(65): This form of method call only allowed for class methods
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Niels 15. Dez 2003 21:00

Re: Timer
 
Tut mir leid...hatte mich verschrieben weil ich das einfach kopiert hatte....
Du musst das natürlich ohne TForm1. aufrufen

Delphi-Quellcode:
startClick(start);

deagel 16. Dez 2003 14:25

Re: Timer
 
hätte noch ne frage wenn ich
Delphi-Quellcode:
TimeToStr(Now)
angebe, ,dann gibt er nur die aktuelle zeit aus, ich möchte aber dass sie fortlaufend sofort ab start des programms in einem editfenster läuft, ,wie kannich das machen?

Niels 16. Dez 2003 15:10

Re: Timer
 
Moin!

Du musst nen Timer jeder Sekunde die Zeit abfragen lassen. Dazu stellste das Interval vom Timer auf 1000.
Bei der OnTimer-Routine muss einfach folgendes rein:

Delphi-Quellcode:
Form1.Edit1.Text := TimeToStr(now);
MfG Niels

Brüggendiek 16. Dez 2003 21:03

Re: Timer
 
Hallo!

Den Timer auf 1 Sekunde stellen, ist etwas unglücklich.
Da die Timer-Nachrichten sehr geringe Priorität im System haben, kann das zu ruckelnder Zeitumstellung führen - der Fehler summiert sich irgendwan auf 1 Sekunde und die Anzeige springt dann natürlich um 2 Sekunden höher.

In meinen Programmen habe ich auf dem Hauptformlar normalerweise eine Uhrzeitangabe. Die wird alle 1/10 Sekunde (Intervall 100) aktualisiert und läuft flüssig.

Gruß

Dietmar Brüggendiek

deagel 16. Dez 2003 21:11

Re: Timer
 
wie so oft gibt es mal wieder probleme, bei mir als delphi noob, der noch nie einen timer benutzt hat :oops: :oops: :oops:
Delphi-Quellcode:
Form1.Edit1.Text := TimeToStr(now);
dazu habe ich einpar fragen, also den timer habe ich in mein formular gezogen so wie ein editfenster(Name: zeit)
nun wollte ich die zeile da einfügen, also habe ich den timer markiert die zeit eingestellt (ja das habe ich gschafft :lol: )
und dann den reiter 'events' gewählt:
dort unter on timer habe ich diese zeile eingefüllt, nur weiss ich leider net was ich für Form1 und Edit1 einsetzen soll.
also bei Edit1 denke ich mir muss ich dann 'zeit' einsetzen aber bei dem Form1 weiss ich es net....
muss ich dannnet auch noch was in den timer schreiben(also wenn ich auf das TImer icon doppelklicke???)
sry das ich so viele fragen habe aber ich bin halt erst am lernen, würde mich also sehr freuen wenn mir jmd die zeile für mich umschreiben könnte und etwas erklären könnte, was wie für was steht.... :wiejetzt: :lol:

okay, vielen dank
auf eine antwort und geduld der delphi könner hoffend,

MfG

deagel


-----> :wall: oki leute sry ich habs geschafft ich binhalt etwas ungeschickt ^^ :wall:
-----> HABS GESCHAFFT DANKE
nun muss ich nur noch schaffen dass der vergleich zwischen der voon mir in einem fenster eingegeben zeit und der system zeit funzt und bei gleichheit eine andre procedure startet :cheers:

[edit=Luckie]Delphi-Tags korrigiert. Mfg, Luckie[/edit]

Stanlay Hanks 16. Dez 2003 21:22

Re: Timer
 
Hallo. "Form1" müsstest du durch den Namen deines Formulars ersetzen. Wenn der Timer und das Edit Feld auf dem gleichen Formular sind, kannst du das aber auch weglassen.

Delphi-Quellcode:
Zeit.Text := TimeToStr(Now);
Sollte auch gehen. Den Namen des Forms musst du nur davor schreiben, wenn du zum Beispiel ein Edit Feld auf einem anderen Formular ansprechen willst. "Form1" Ist dabei sozusagen das Übergeordnete Element, in dem sich das Edit Feld befindet. Es ist der sog. Parent.

Man liest sich, Stanlay :hi:

Uriel 16. Dez 2003 21:51

Re: Timer
 
ist es auch möglich die zeit von einem internet server abzurufen und diese dann weiterlaufen zu lassen? also ich hab ne www-adresse deren zeit ich abrufen möchte und dann als fortlaufende zeit ausgeben möchte.

deagel 17. Dez 2003 14:26

Re: Timer
 
so soweit funzt mein proggy jetzt, ,aber leider zählt er weiter als zur NULL das sollte net sein, habe aber KA wo der fehler liegt bitte schaut euch das mal an. danke,

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Spin, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    eingabe: TEdit;
    start: TButton;
    schliessen: TButton;
    ausgabe: TLabel;
    fortschritt: TProgressBar;
    Label1: TLabel;
    Label2: TLabel;
    systime: TEdit;
    userzeit: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    stop: TButton;
    start1: TButton;
    Label5: TLabel;
    procedure startClick(Sender: TObject);
    procedure schliessenClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure stopClick(Sender: TObject);
    procedure start1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,i :longint;
implementation

{$R *.dfm}

procedure TForm1.startClick(Sender: TObject);
Procedure pause(t : longint);
Var start : longint;
Begin
  Start:= gettickcount;
  While gettickcount < start+t do
              Application.processmessages
end;
begin
x:=strtoint(eingabe.text);
i:=x;
For i:=x downto 0 do
begin
ausgabe.caption:=inttostr(i);
fortschritt.position:=trunc((x-i)*(100/x)) ;
pause(1000);
end;
end;
procedure TForm1.schliessenClick(Sender: TObject);
begin
close;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
systime.Text := TimeToStr(Now);
if DateTimeToTimeStamp(StrToTime(userzeit.Text)).Time = DateTimeToTimeStamp(StrToTime(systime.Text)).Time
      then startClick(start);
end;

procedure TForm1.stopClick(Sender: TObject);
begin
timer1.enabled:=false;
end;

procedure TForm1.start1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

end.
wenn ihr wisst wodran das liegt sagt bescheid und sag mir bitte wie ich es verbessern kann....danke

MfG
deagel

Jens Schumann 17. Dez 2003 14:33

Re: Timer
 
Hallo,
ich glaube, es ist interessant zu wissen, welche Wert Du für das Timer Interval vorgegeben hast.

Deine Schleife benötigt ca 10. Sekunden für einen Durchlauf.
Wenn das Timer Interval kleiner als 10 Sekunden ist wird TForm1.startClick wiederholt aufgerufen.

deagel 17. Dez 2003 21:03

Re: Timer
 
naja mein timerintervall steht bei 100 ms glaube ich...also auf jedenfall weniger als 1 s.
aber anders wird die uhrabfrage zu ungenau, der timer muss sitzen....genau.

wie könnte man dasdenn machen?
dass die net 2 mal geöffnet wird aber trotzdem genau angezeigt wird?

wie gibt maacht man es denn wenn man folgendes machen möchte:
also wenn die zeit, im fenster 'userzeit' um 5 ms uberschrittet wurde, dass dann der timer disabled wird?
vielen dank.

FRAGEN ÜBER FRAGEN:
wie kann ich denn eine wav oder mp3 datei abspielen lassen, also wenn mein countdown zum beispiel, dass man ab den letzten 5 sekunden eineen piep hört....


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