![]() |
Zeitversetzt senden
Wie kann ich eine Email zeitversetzt senden.
Das normale Versenden mit Button.Onclick hab ich schon fertig und es funktioniert auch, müßte nur noch , vermutlich mit TTimer , eine Zeit einstellen und dann verschicken. z.B in 15 Minuten oder 21:00 Uhr |
Re: Zeitversetzt senden
Hi,
wo ist nun dein Problem? Wenn du das Timer-Intervall auf 1000 ms setzt, kannst du eine Variable hochzählen lassen und nach x Sekunden eine Aktion ausführen. Die DateTime-Funktionen kannst du zum Vergleichen mit der Systemzeit verwenden. Grüße, Matze |
Re: Zeitversetzt senden
Zitat:
|
Re: Zeitversetzt senden
In 15 Minuten -> Timer.Interval := 15000, zu einer bestimmten Uhrzeit könntest Du im Timer die aktuelle Zeit pollen und vergleichen (natürlich mit einer gewissen Toleranz).
|
Re: Zeitversetzt senden
DeddyH
dir ist aber schon bewusst, dass 15.000 Millisekunden 15 Sekunden sind, oder ? :D Wenn dann 900.000 ms ;) |
Re: Zeitversetzt senden
:oops: klar
|
Re: Zeitversetzt senden
Zitat:
Delphi-Quellcode:
aber wie rechnet man die Differenz in Timer1.Intervall um , wenn Timer1.Intervall:=1000 ist ?????
procedure TForm1.Zeitversetzt_Senden;
var Systemzeit,Systemzeit_Datum,Versende_Zeit_Datum,Versende_Zeit,Differenz:TDatetime; begin Systemzeit:=Time; Systemzeit_Datum:=Date; Versende_Zeit:= Datetimepicker2.Time; Versende_Zeit_Datum:=Datetimepicker1.Date; If Systemzeit_Datum = Versende_Zeit_Datum then Differenz:= Versende_Zeit - Systemzeit; end; |
Re: Zeitversetzt senden
Musst Du doch gar nicht. Wie schon beschrieben, merk Dir die "Startzeit" und schau im Timer nach, ob sie erreicht ist.
|
Re: Zeitversetzt senden
Zitat:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin Timer1.Interval:= 1000; if Systemzeit = Versende_Zeit then Zeitversetzt_Senden; end; |
Re: Zeitversetzt senden
Das wird so wahrscheinlich nicht funktionieren, Du solltest auf größer oder gleich abfragen.
|
Re: Zeitversetzt senden
Zitat:
....so
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin Timer1.Interval:= 1000; if Systemzeit >= Versende_Zeit then Zeitversetzt_Senden; end; |
Re: Zeitversetzt senden
Beinahe, ich würde das eher so machen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin //Timer1.Interval:= 1000; einmal reicht doch if Systemzeit >= Versende_Zeit then begin Timer1.Enabled := false; //den Timer brauchen wir nicht mehr Zeitversetzt_Senden; end; end; |
Re: Zeitversetzt senden
ich habs so eingegeben, aber es funktioniert einfach nicht :gruebel:
|
Re: Zeitversetzt senden
Damit fangen wir nichts an. Was geht nicht? Kommen Fehlermeldungen? Wenn ja, welche?
Hast du "Systemzeit" und "Versende_Zeit" definiert? Wenn ja, welche Werte weist du ihnen denn zu? Grüße |
Re: Zeitversetzt senden
...die Systemzeit ermittelt man mit "now", also if sende_tag_und_zeit <= now then...
Bernd. |
Re: Zeitversetzt senden
Zitat:
Delphi-Quellcode:
Fehlermeldungen kommen keine, es wird nichts verschickt
systemzeit := time;
Versende_Zeit := DatetimePicker1.Time; Timer1.Interval := 1000; Ich hab mal zur Kontrolle einen ähnlichen Code geschrieben, um alles nochmal zu überprüfen, aber der funktioniert auch nicht
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; DateTimePicker1: TDateTimePicker; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if time >= datetimepicker1.Time then begin Timer1.Enabled := false; form1.Color:= clbackground ; end; end; procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled:=true; end; end. |
Re: Zeitversetzt senden
Wenn ich das richtig verstanden habe, hast Du 2 DateTimePicker, die musst Du erst zusammenpfriemeln, sonst stimmt entweder die Zeit oder das Datum nicht.
Delphi-Quellcode:
StartZeit := Trunc(DateTimePickerDate.Date) + Frac(DateTimerPickerTime.Time);
|
Re: Zeitversetzt senden
Zitat:
Ich kann keinen Fehler finden.. :gruebel:
Delphi-Quellcode:
Normalerweise müßte sich die Farbe des Formulars , beim Erreichen der Startzeit ändern :gruebel:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; DateTimePicker1: TDateTimePicker; DateTimePicker2: TDateTimePicker; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Startzeit :TDatetime; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin StartZeit := Trunc(DateTimePicker2.Date) + Frac(DateTimePicker1.Time); if now >= StartZeit then begin Timer1.Enabled := false; form1.Color:= clbackground ; end; end; procedure TForm1.Button1Click(Sender: TObject); begin timer1.Enabled:=true; end; end. |
Re: Zeitversetzt senden
Hast Du Dir Startzeit zur Kontrolle mal ausgeben lassen? Außerdem genügt es ja, diese im Button1 einmalig zu setzen.
[edit] Es könnte auch etwas anderes sein. Lass Dir doch einfach eine Message ausgeben, statt die Farbe umzustellen. [/edit] [edit2] Bei mir (Delphi 5) funktioniert das einwandfrei. [/edit2] |
Re: Zeitversetzt senden
Zitat:
Form1.color := CLBackground geht auch irgendein Fehler, seltsam |
Re: Zeitversetzt senden
In der Tat merkwürdig, warst Du mal durchgesteppt? Normalerweise merkt man das dabei recht schnell, wenn etwas nicht ausgeführt wird oder eine Variable den falschen Wert hat.
|
Re: Zeitversetzt senden
Zitat:
programmiert, beim zweiten Mal hat es dann funktioniert. Vermutlich ein Fehler von Delphi 2005, soll nicht ganz fehlerfrei sein. |
Re: Zeitversetzt senden
Fehler gefunden !
Datetimepicker1.Time Datetimepicker2.date Datetimepicker1.date Datetimepicker2.time vetauscht :wall: |
Re: Zeitversetzt senden
Das ist mit ein Grund dafür, dass man Komponenten vernünftig benennen sollte. Bei dtpDate und dtpTime hätte man bereits im Code gesehen, was was ist ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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