Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Terminplaner (https://www.delphipraxis.net/70623-terminplaner.html)

Z32 1. Jun 2006 18:47


Terminplaner
 
Hallo,

Ich habe mir vorgennomen, ein Erinnerungsprogramm in abgespeckter Form zu schreiben. Alles auch schön und gut. Ich habe aber noch ein entscheidenes Problem, was ich nicht gelöst bekomme und absolut merkwürdig finde.

Also es geht darum:
Ich möchte zu jedem Termin eingeben können wann er mich an diesen Eintag erinnert. Also z.B. 14.06.2006 16:00 soll es klinkeln. Ich habe mir gedacht, dass ich die Uhrzeit und das Datum einfach zusammen schreibe, also Datum Lerrstelle Uhrzeit und dann diese Kombination in eine txt Datei speichere. Und wenn man das Programm startet liest er diese Datei aus und schreibt sich den Wert in eine Variable. Dann kann man ja im Timer vergleichen, wann der Zeitpunk gekommen ist. Pustekuchen, klapp irgentwie nicht. Wenn der Zeitpunkt gekommen ist tut sich nichts.

Aber hier ein bisschen Code. Zur Info es ist eine Testversion, also nur ob das mit der Ringfunction funst.

Delphi-Quellcode:
var eingabe: string;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := timetostr (time); //Label wird mit Uhrzeit gefüllt
label2.Caption := datetostr (date); //Label wird mit Datum gefüllt
label3.caption := label1.caption+'  '+label2.caption; //Datum und Uhrzeit werden zusammen geschrieben
if label4.caption = label3.caption then //Label 4 wird unten mit Inhalt gefüllt
showmessage('ring, ring...');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.SaveToFile('uhr.txt'); //Eingegebener termin wird abgespeichert
showmessage('Änderungen werden erst bei dem nächsten Programmstart wirgsam');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
memo2.lines.LoadFromFile('uhr.txt'); //Memo wird mit der txt Datei gefüttert
eingabe := memo2.Text; //Übertragen von dem Wert in eine Variable
label4.caption := eingabe; //Übertragen in Label 4
end;

end.
Ich verstehe jetzt nicht warum das nicht geht ??? Ich sehe keinen Fehler und er Compiler hat auch keinen gefunden.

fkerber 1. Jun 2006 18:51

Re: Terminplaner
 
Hi!

Du solltest keine Strings vergleichen, wenn du Daten vergleich willst.
Egal wie du vergleichst, solltest du auch nie auf Gleichheit prüfen, da die Bedingung dann nur genau eine Sekunde erfüllt wäre und die Chance, genau dann zu überprüfen, ist sehr gering.

Also eher testen, ob aktuelle Zeit > eingestellter Zeit - und dieser Vergleich geht eben am einfachsten mit einem TimeStamp o.ä.


Ciao Frederic

Z32 1. Jun 2006 19:03

Re: Terminplaner
 
Aso..also der Timmer ist zu lahm um genau die Sekunde zu treffen.

Soweit habe ich deine Antwort verstanden, nur ich weiß momentan nicht, was ein TimeStamp ist. Könntest du mir das vielleicht erklären. Oder ist das nur ein andres Wort für Timer ???

fkerber 1. Jun 2006 19:08

Re: Terminplaner
 
Hi!

Jepp, Timer ist sozusagen zu lahm...

Aber TimeStamp ist etwas anderes als ein Timer. z.B. gibt es da den Unix-TimeStamp der eigentlich nur die Sekunden ab dem 01.01.1970 zählt...

Ist aber für dein Vorhaben nicht unbedingt notwendig.
Schau mal nach Sachen wie FormatDateTime, Timetostr, now etc.


Ciao Frederic

Z32 1. Jun 2006 19:15

Re: Terminplaner
 
mhh, also strtotime und now ect, kenne ich eigentlich. Ich weiß momentan jetzt nich worauf du hinaus möchtest. Und wie ich mit den Befeheln mein Problem lösen könnte.

Ratte 1. Jun 2006 19:16

Re: Terminplaner
 
ganz einfach: Du wandelst die Zeit mittels Strtotime in einen TDatetime wert und vergleichst diesen mit now.

Z32 1. Jun 2006 19:29

Re: Terminplaner
 
aber ich brauche ja auch noch das datum, das ist ja auch wichtig.

fkerber 1. Jun 2006 19:31

Re: Terminplaner
 
Hi!

Dann solltest du dich auch nach Datetostr und umgekehrt schauen...


Ciao Frederic

Z32 1. Jun 2006 19:35

Re: Terminplaner
 
gut, ok, ich glaube ich has gleich.

Aber noch eine Frage.

now ist die aktuelle Uhrzeit und ist so aufgebaut, oder 00:00:00

Aber wie heißt den der Befehl für das aktuelle datum ??

Ratte 1. Jun 2006 19:45

Re: Terminplaner
 
now übergibt ein TDatetime, dass sowohl das Datum als auch die Uhrzeit enthält.
mfg,
Ratte

hboy 1. Jun 2006 19:57

Re: Terminplaner
 
mh ich würds anders machen... TimeStamp + Boolean "abgearbeitet". So ist das einmalige abarbeiten garantiert bzw man kann den wert auf false lassen und 5 minuten draufaddieren.

Z32 3. Jun 2006 17:45

Re: Terminplaner
 
Also ehrlich gesagt, blick ich jetzt gar nicht mehr durch. Ich hab jetzt schon verschiedenes Probiert, aber nichts funst. Es wäre sehr nett, wenn einer mal ein bisschen Code posten könnte, damit ich mal einen kleinen Anhlatsounkt bekomme. TimeStap, now, vergleichen :wiejetzt:

Ich möchte doch einfach nur schaffen, dass man eine Uhrzeit mit Datum eingeben kann die gespeichert wird und beim nächsten Programmstart wieder ausgelesen wird. Und wenn der Zeitpunkt erreicht ist, soll es "klingen". Das kann doch nicht so schwer sein, oder???

Maja Jessica 3. Jun 2006 19:34

Re: Terminplaner
 
Hi

nö, ist auch nicht sooo schwer.
Wie du die Zeichenfolge Datum und Uhrzeit in eine Textdatei speicherst weist du.
Auslesen kannst du diese Zeichenfolge in eine Stringvariable auch.
Beispielsweise diese Zeichenfolge: 03.06.2006 22:00:00

Wenn du nun diese eingelesene Zeichenfolge im Timer-Event vergleichst:

Delphi-Quellcode:
...
WeckZeit : String;
...

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if now >= StrToDateTime(WeckZeit) then
  begin
    ShowMessage('Riiiiiiing');
    Timer1.Enabled := false;
  end;
end;
sollte es einmal 'bimmeln'.

MJ

Z32 3. Jun 2006 22:24

Re: Terminplaner
 
so, habe doch gleich nochmal neu angefangen zu werkeln. ich habe das jetzt so gemacht wie in dem Beitrag vor mir beschrieben, doch an einer Stelle mekert der Compiler immer noch. Ich finde aber denn Fehler nicht.

Stelle im Code:
if now>= strtodatetime weckzeit then

Fehlermedlung des Compilers:
[Fehler] Unit1.pas(60): Es gibt keine überladene Version von 'StrToDateTime', die man mit diesen Argumenten aufrufen kann


Hier nochmal der gesamte neue Code. ich denke er ist diesmal realativ übersichtlich :wink:

Delphi-Quellcode:
var weckzeit: string;

procedure TForm1.Button1Click(Sender: TObject); //bei klick soll die weckzeit abgespeichert werden
begin
memo1.lines.SaveToFile('aus.txt');
showmessage('Die Ändernungen werden erst nach dem nächsten Programmstart wirksam');
end;

procedure TForm1.FormCreate(Sender: TObject); //beim öffnen soll die var weckzeit mit der Datei gefüttert werden
begin
memo3.lines.LoadFromFile('aus.txt');
weckzeit := memo3.Text;
label7.caption := (weckzeit);
end;

procedure TForm1.Timer1Timer(Sender: TObject); //der vergleich des timers
begin
label1.caption := timetostr (now);
label2.caption := datetostr (now);

if now>= strtodatetime weckzeit then
begin
showmessage('Ringgggg');
timer1.Enabled:=false;
end;
end;

end.
Also ich habe auch geprüft, ob die weckzeit richtig abgespeichrt wird und nachher auch wieder richtig in der var steht.

Hobby-Programmierer 3. Jun 2006 23:57

Re: Terminplaner
 
Moin :) ...,
Zitat:

Zitat von Z32
Fehlermedlung des Compilers:
[Fehler] Unit1.pas(60): Es gibt keine überladene Version von 'StrToDateTime', die man mit diesen Argumenten aufrufen kann

einfach mal in die OH schauen, aber so sollte es gehen.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject); //der vergleich des timers
begin
  label1.caption:= timetostr(now);
  label2.caption:= datetostr(now);

  if StrToDateTime(weckzeit) >= Now then begin
    Showmessage('Ringgggg');
    Timer1.Enabled:=false;
  end;
end;
Hatte Maja aber auch shcon so geschrieben!!

LG Mario

Maja Jessica 4. Jun 2006 11:21

Re: Terminplaner
 
Hi

Delphi-Quellcode:
if now>= strtodatetime weckzeit then
Klammern?

Z32 4. Jun 2006 13:27

Re: Terminplaner
 
hey, och freu es klappt endlich. Ich hatte doch tatsächlich die Klammern vergessen, sorry.

Aber ein eigenartiges Phänomen ist jetzt aufgetreten, ich muss wenn die weckzeit erreicht ist und die Showmessage kommt immer 4 mal auf OK klicken bis die weg geht. Woran kann das den liegen??? Aber ich möchte ja eh im Endprogramm dann einen Sound abspielen lassen. Mal schaun ob das besser geht.

Aufjedenfall vielen dank für die hilfe.

PS: Wenn aber jemand eine Idee zu dem Showmessage-Problem hat würde es mich freuen, wenn ihr nochmal schreibt.

Maja Jessica 4. Jun 2006 13:37

Re: Terminplaner
 
Hi,

eigentlich sollte, sobald der timer deaktiviert ist, die timerroutine nie mehr aufgerufen werden.
Bin mir jetzt aber nicht sicher ob das Programm bei ShowMessage die Bearbeitung anhält bis du auf OK geklickt hast, oder ob "parallel" dazu die "Timer1.enabled := false"-Anweisung ausgeführt wird.
Probiere es doch mal aus und vertausche die Reihenfolge zwischen
Timer-Abschalten und Showmessage.

MJ

Z32 4. Jun 2006 13:44

Re: Terminplaner
 
jo, daran lags. Es klappt jetzt Perfekt.

Aber was anderes ist mir aufgefallen :cry:

Immer wenn man das Programm startet, und die Weckzeit schon abgelaufen ist, kommt trotzdem die Showmessage mit Ring. Also wenn es z.b. um 14:00:00 klingeln soll und ich um 14:10:00 das Programm öffne kommt als erstest erst mal ein Ring und der Timer wird abgeschaltet. Wenn ich aber um 13:50:00 öffne und es halt um 14:00:00 erst klingel soll, dann kommt die Showmessage nicht, was ja auch richtig ist.

Ich finde diesen Effekt etwas störend, aber ich glaube das liegt an dem >=, oder? Und das lässt sich ja auch nicht ändern. Aber ich glaube ich habe eine Idee: Man könnte ja im Form.Create schreiben, das wenn die Weckzeit schon abgelaufen ist, dass dann halt irgentwas anderes passiert. Z.B showmessage('Termin schon vorbei')

Oder hat wer eine andere Idee??

//edit\\ Ich habs geschafft! :hello:

Ich habe einfach in Form.create geschrieben:
Delphi-Quellcode:
if weckzeit < datetimetostr (now) then
begin
timer1.enabled:=false;
showmessage('Termin verpasst');
Naja, klappt aufjedenfall Perfekt. Und nochmal vieln Dank füre eura Hilfe. //edit\\


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz