Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zeitversetzt senden (https://www.delphipraxis.net/126030-zeitversetzt-senden.html)

Thomas F 16. Dez 2008 16:16


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

Matze 16. Dez 2008 16:19

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

Thomas F 16. Dez 2008 16:30

Re: Zeitversetzt senden
 
Zitat:

Zitat von Matze
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

Die Differenz aus Systemzeit und Versende_Zeit ermitteln, und dann mit dem Timer hochzählen.

DeddyH 16. Dez 2008 16:35

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).

Noedel 16. Dez 2008 16:46

Re: Zeitversetzt senden
 
DeddyH
dir ist aber schon bewusst, dass 15.000 Millisekunden 15 Sekunden sind, oder ? :D
Wenn dann 900.000 ms ;)

DeddyH 16. Dez 2008 16:47

Re: Zeitversetzt senden
 
:oops: klar

Thomas F 16. Dez 2008 16:54

Re: Zeitversetzt senden
 
Zitat:

Zitat von DeddyH
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).

Delphi-Quellcode:
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;
aber wie rechnet man die Differenz in Timer1.Intervall um , wenn Timer1.Intervall:=1000 ist ?????

DeddyH 16. Dez 2008 16:56

Re: Zeitversetzt senden
 
Musst Du doch gar nicht. Wie schon beschrieben, merk Dir die "Startzeit" und schau im Timer nach, ob sie erreicht ist.

Thomas F 16. Dez 2008 17:05

Re: Zeitversetzt senden
 
Zitat:

Zitat von DeddyH
Musst Du doch gar nicht. Wie schon beschrieben, merk Dir die "Startzeit" und schau im Timer nach, ob sie erreicht ist.

Achso, jetzt hab ichs kapiert.....

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Interval:= 1000;
if Systemzeit = Versende_Zeit then
Zeitversetzt_Senden;

end;

DeddyH 16. Dez 2008 17:07

Re: Zeitversetzt senden
 
Das wird so wahrscheinlich nicht funktionieren, Du solltest auf größer oder gleich abfragen.

Thomas F 16. Dez 2008 17:09

Re: Zeitversetzt senden
 
Zitat:

Zitat von DeddyH
Das wird so wahrscheinlich nicht funktionieren, Du solltest auf größer oder gleich abfragen.


....so

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Interval:= 1000;
if Systemzeit >= Versende_Zeit then
Zeitversetzt_Senden;

end;

DeddyH 16. Dez 2008 18:28

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;

Thomas F 16. Dez 2008 20:02

Re: Zeitversetzt senden
 
ich habs so eingegeben, aber es funktioniert einfach nicht :gruebel:

Matze 16. Dez 2008 20:07

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

aladin60 16. Dez 2008 20:09

Re: Zeitversetzt senden
 
...die Systemzeit ermittelt man mit "now", also if sende_tag_und_zeit <= now then...

Bernd.

Thomas F 16. Dez 2008 21:03

Re: Zeitversetzt senden
 
Zitat:

Zitat von Matze
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

Delphi-Quellcode:
systemzeit := time;
Versende_Zeit := DatetimePicker1.Time;
Timer1.Interval := 1000;
Fehlermeldungen kommen keine, es wird nichts verschickt
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.

DeddyH 17. Dez 2008 07:04

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);

Thomas F 17. Dez 2008 07:55

Re: Zeitversetzt senden
 
Zitat:

Zitat von DeddyH
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);

........komisch, das funktioniert trotzdem nicht.
Ich kann keinen Fehler finden.. :gruebel:

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;
    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.
Normalerweise müßte sich die Farbe des Formulars , beim Erreichen der Startzeit ändern :gruebel:

DeddyH 17. Dez 2008 07:57

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]

Thomas F 17. Dez 2008 08:28

Re: Zeitversetzt senden
 
Zitat:

Zitat von DeddyH
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]

...ich hab alles nochmal neu eingegeben, jetzt funktioniert es :gruebel:

Form1.color := CLBackground geht auch

irgendein Fehler, seltsam

DeddyH 17. Dez 2008 08:36

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.

Thomas F 17. Dez 2008 11:36

Re: Zeitversetzt senden
 
Zitat:

Zitat von DeddyH
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.

Ich konnte keinen Fehler finden, ich habe dann alle Objekte gelöscht und dann alles nochmal neu
programmiert, beim zweiten Mal hat es dann funktioniert.
Vermutlich ein Fehler von Delphi 2005, soll nicht ganz fehlerfrei sein.

Thomas F 17. Dez 2008 13:10

Re: Zeitversetzt senden
 
Fehler gefunden !

Datetimepicker1.Time Datetimepicker2.date

Datetimepicker1.date Datetimepicker2.time

vetauscht :wall:

DeddyH 18. Dez 2008 07:17

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 08:02 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