Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 11:53:37
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Allgemeines Forum
| | |-+  Mit Daten und Zeiten umgehen...
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Mit Daten und Zeiten umgehen...  (Gelesen 2994 mal)
AndreasMascher
Gast
« am: 05.03.2002, 16:11:47 »

Hallo, mein Programm soll mit Hilfe eines Timers und einer ListView (Style = report) Dinge zu einer Bestimmten Datums und Uhrzeit ausführen.

Ich denke, dass um so weniger im Timer drin steht,  es auch um so besser ist. Ich habe also beispielsweise 10 Datumsangaben (04.10.2002) und 10 Uhrzeiten (14:23) jeweils in einer ListView1.Spalte.

Meine Fragen:
- Wie bringe ich den Timer dazu, alle 60 000 millisekunden etwas auszuführen (das geht ja noch  :D ), aber immer zur vollen Minute?

- Wie überpfüfe ich, ob ein Datum älter als das aktuelle Datum ist? (Gleiches gilt für Uhrzeit), ohne dass ich den String zerlegen muss und als integer auswerte...

- Gibt es eine möglichkeit, die Datumsangabe aus dem Timer herauszulassen? Warum soll er jede Minute überprüfen, ob es nach 00:00 Uhr ist? Vielleicht gibt es da ja eine Message für...

Okay, ich danke schon mal im vorraus! Denkansätze reichen meistens schon (hier soll mir keiner die arbeit abnehmen) aber ich habe damit schon meine schwierigkeiten und hoffe ihr könnt mir weiterhelfen!


Thanks, Andi.
Gespeichert
Lemy
Hero Member
*****
Offline Offline

Beiträge: 605



« Antworten #1 am: 05.03.2002, 16:45:00 »

1. Hol doch im Idle die Zeit und schau ob die Minute gewechselt hat.

2. Wenn Du das Datum im Format "yyyy.mm.dd" hast, kannst Du mit CompareStr ] 0 oder CompareText ] 0 testen.

3. Die Funktion Time gibt nur die Zeit zurück.
Gespeichert
AndreasMascher
Gast
« Antworten #2 am: 05.03.2002, 23:03:17 »

Thx Lemy für die Antwort...

Zu1: Ich kenne den Idle nicht (nur vom Aim hehe), kannst du das etwas genauer erleutern?

Zu2: Perfekt :P

Zu3: Wahrscheinlich falsch verstanden. Der Timer überprüft ja, ob es übereinstimmungen von Datum und Uhrzeit (Aktuell) und aus der ListView gibt. Da sich das Datum aber nicht jede Minute ändern, sondern nur alle 24 Stunden, möchte ich diese function date nicht so gerne in den Timer schreiben. (Oder meint ihr, dass es egal ist und der Aufruf von Date sowieso nicht bremsen tut?)
Gespeichert
downloads
Newbie
*
Offline Offline

Beiträge: 19



WWW
« Antworten #3 am: 06.03.2002, 08:26:17 »

schau mal hier nach:
[a href="http://www.swissdelphicenter.ch/de/showcode.php?id=887" target="_blank"]http://www.swissdelphicenter.ch/de/showcode.php?id=887[/a]
Gespeichert
AndreasMascher
Gast
« Antworten #4 am: 06.03.2002, 10:22:03 »

Zu1: Perfekt, jippie
Zu2: Okay, roger
Zu3: ???
Gespeichert
Lemy
Hero Member
*****
Offline Offline

Beiträge: 605



« Antworten #5 am: 06.03.2002, 12:48:55 »

Ah, Du möchtest eine Broadcast Message im Stil:
WM_HEY_ITS_MIDNIGHT,
WM_DAY_HAS_CHANGED  ;)

Das gibt es meines Wissens nach nicht.
Wenn man bedenkt was sonst schan ales läuft glaube ich nicht, dass die Funktion date da noch gross ins Gewicht fällt.
Gespeichert
AndreasMascher
Gast
« Antworten #6 am: 06.03.2002, 15:30:07 »

Ja okay, so ähnlich habe ich eigentlich auch gedacht.

Es hat sich jetzt aber doch noch ein Problem ergeben:
CompareText (s1, s2) ist kewl, nur wie mache ich aus dem Datumsformat dd.mm.yyyy das Format yyyy.mm.dd ?

Vielleicht gibt es ja String-Befehle oder Date-Befehle, die ich einfach nicht kenne?

Problematik:
Ich habe Datumswerte in dem Format dd.mm.yyyy in einer Listview gespeichert. Wenn dieser Wert sichtbar sein sollte, kann ich ihn dort auf keinen Fall ändern. Wenn es die möglichkeit gibt, diese Spalte unsichtbar zu machen (sie muss aber trotzdem vorhanden sein), dann würde sich das Problem von selbst lösen...
Gespeichert
Rainer
Hero Member
*****
Offline Offline

Beiträge: 1666


WWW
« Antworten #7 am: 06.03.2002, 15:43:19 »

TDateTime sind eigentlich auch nur Integer von daher kann man einfach größenvergleiche machen und Datumswerte voneinander subtrahieren usw.

Zum Beispiel für dein Probem:

[font size=2 face="Courier New"][font color="#000000"]procedure TForm1.Button1Click(Sender: TObject);
var
  
d1, d2: TDate;
begin
  
d1 := StrToDate('06.03.2002');
  d2 := StrToDate('08.03.2002');
  if d1 < d2 then
    
ShowMessage('d1 ist früher')
  else if d2 < d1 then
    
ShowMessage('d2 ist früher')
  else
    
ShowMessage('gleiches Datum');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  
t1, t2: TTime;
begin
  
t1 := StrToTime('12:01');
  t2 := StrToTime('12:00');
  if t1 < t2 then
    
ShowMessage('t1 ist früher')
  else if t2 < t1 then
    
ShowMessage('t2 ist früher')
  else
    
ShowMessage('gleiche Zeit');
end;
[/font][/font]
Gespeichert

MfG Rainer

end.
Lemy
Hero Member
*****
Offline Offline

Beiträge: 605



« Antworten #8 am: 06.03.2002, 17:52:08 »

[font  size=2 face="Courier New" color="#000000"]@Rainer: Nicht integer sondern double.

@Andi: FormatDateTime('yyyy.mm.dd', now);
Ich würds aber nicht so machen. Ich würde für jedem Eintrag einen
Pointer auf TDateTime erzeugen und es dann dem Item.Data zuweisen.

var
  
MeinZeitDatum: TDateTime;
  pdt: PDateTime;
  ListItem: TListItem;
begin
  
[font color="#000080"]{...}
      
[/font]ListItem := Items.Add;
      ListItem.Caption := Names[0];
      pdt := New(PDateTime);
      pdt^ := MeinZeitDatum;
      ListItem.Data := pdt;
  [font color="#000080"]{...}
[/font]end;

Wenn du einen Eintrag löschst darst Du aber nicht vergessen den
Speicher freizugeben.
[/font]
Gespeichert
Rainer
Hero Member
*****
Offline Offline

Beiträge: 1666


WWW
« Antworten #9 am: 06.03.2002, 19:55:09 »

@Lemy
richtig, hatte den richtigen Typ nicht mehr im Kopf :-)
Gespeichert

MfG Rainer

end.
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS