![]() |
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 |
Re: Timer
Hallo
So kannst du die Systemzeit anzeigen: TimeToStr(Now) |
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.??? |
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] |
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? |
Re: Timer
Moin!
Du kannst mit nem Timer alle n Sekunden die Systemzeit prüfen und mit der im Editor vergleichen. MfG Niels |
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. |
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 |
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? |
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 |
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:
[edit=Luckie]Delphi-Tags ergänzt. Mfg, Luckie[/edit]
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; |
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:
So richtig hab ich aber nicht verstanden, was du machen willst :roll:
TForm1.startClick(irgendeinObjekt); // musst halt den Name eines Objekts auf deiner Form einsetzen...z.b. Edit1
MfG Niels |
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:
<-- da macht er stress
else
TForm1.startClick(start); [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' |
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);
|
Re: Timer
hätte noch ne frage wenn ich
Delphi-Quellcode:
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?
TimeToStr(Now)
|
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:
MfG Niels
Form1.Edit1.Text := TimeToStr(now);
|
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 |
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:
dazu habe ich einpar fragen, also den timer habe ich in mein formular gezogen so wie ein editfenster(Name: zeit)
Form1.Edit1.Text := TimeToStr(now);
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] |
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:
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.
Zeit.Text := TimeToStr(Now);
Man liest sich, Stanlay :hi: |
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.
|
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:
wenn ihr wisst wodran das liegt sagt bescheid und sag mir bitte wie ich es verbessern kann....danke
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. MfG deagel |
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. |
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