![]() |
ShowMessage mit Hilfe von Datum in ListView
Hi Leudz!
Ich ma widder... :oops: Ich wollt es nun so machen (bin dabei einen Terminplaner zu erstellen) das mein Programm über einen Timer meine Spalte "Datum" in Schleife überprüft ob ein Datum = dem des aktuellen Tages ist. Danach soll nach der Uhrzeit überprüft werden, soweit bin ich aber noch nicht. Ich hab es so gemacht, das der Timer erst dann aktiv ist, wenn mindestens 1 Eintrag in der ListView steht. Das funzt auch, nur kommt er danach in ne Zugriffsverletzung, die in ner Schleife endet bzw. immer wieder aufgerufen wird. Ich weiß nicht, ob ich auf die falsche Spalte oder zeile zugreife. Hier ist mal der Code von OnTimer2
Delphi-Quellcode:
THX
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var i: integer; begin for i:=0 to lv_eintraege.Items.Count do begin if (lv_eintraege.Items[i].Caption=DateToStr(now)) and (lv_eintraege.Items[i].Caption=TimeToStr(now)) then begin ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].Caption+') beginnt!'); end; end; end; Gruß, |
Re: ShowMessage mit Hilfe von Datum in ListView
Auf den ersten Blick solltest du
Delphi-Quellcode:
in
lv_eintraege.Items.Count
Delphi-Quellcode:
ändern!
lv_eintraege.Items.Count - 1
Und nochwas: Du wirst in deinem Beispiel nie einen Dialog sehen!
Delphi-Quellcode:
Was steht bei dir in der Caption? Ein Datum, eine Uhrzeit oder beides?
(lv_eintraege.Items[i].Caption=DateToStr(now)) and (lv_eintraege.Items[i].Caption=TimeToStr(now))
Falls beides, dann wäre der Vergleich
Delphi-Quellcode:
richtig.
lv_eintraege.Items[i].Caption=DateTimeToStr(now)
Wie ich das sehe, hast du aber noch nciht so ganz den Unterschied zwischen Caption, SubItems[0], SubItems[1], ... verstanden? Sogar bei der Meldung verweist du darauf. Jetzt hast du aber das Problem, dass du dir irgendwie noch merken mußt, bei welchem Item er schonmal nen Dialog angezeigt hast. Sonst bekommst du an einem Tag "100000mal" (bzw. bei jedem OnTimer Ereignis) den Dialog zu Gesicht. |
Re: ShowMessage mit Hilfe von Datum in ListView
:roll: Jetzt bekomm ich aber auch keine Meldung angezeigt. Es passiert nichts!! :cry:
|
Re: ShowMessage mit Hilfe von Datum in ListView
Deshalb lies dir nochmal meinen Beitrag (untere Hälfte!) von eben durch.
Sag mir mal an Hand eines Beispieles, was du in welcher Spalte stehen hast. |
Re: ShowMessage mit Hilfe von Datum in ListView
In welchem Format hast du es denn in der ListView stehen? Soweit ich weiss gibt "Now" folgendes Format aus:
Datum: dd.mm.yyyy Zeit: hh:mm:ss Wenn du also nur "15:14" in der ListView stehen hast, ist es klar, dass nichts kommt :) Gruß Yheeky |
Re: ShowMessage mit Hilfe von Datum in ListView
@ Yheeky: Die Umwandlung des string Wertes zum Datum wäre echt besser, nur sein Problem scheint wohl viel mehr die Belegung der Spalten zu sein. Im Caption stehen bei ihm: Datum, Uhrzeit und der Termin! Also irgendwas läuft da schief, daher soll er mal den Inhalt der Spalten posten.
|
Re: ShowMessage mit Hilfe von Datum in ListView
Sorry, hatte erst nicht gesehen, das du noch editiert hast!!
Zitat:
Zitat:
|
Re: ShowMessage mit Hilfe von Datum in ListView
@Yheeky: Ich habe das Datum im Format dd.mm.jjjj und die Uhrzeit im Format ss:mm:ss. Also angezeigt müsst ich sie bekommen.
|
Re: ShowMessage mit Hilfe von Datum in ListView
Liste der Anhänge anzeigen (Anzahl: 1)
Hier is ma n Screenshot, da könnt ihr euch den Aufbau ma angucken!
|
Re: ShowMessage mit Hilfe von Datum in ListView
Warum du nach XML fragst verstehe ich jetzt zwar in diesem Zusammenhang nicht, aber na gut.
Ich gehe jetzt mal davon aus, dass dein ListView so aufgebaut ist:
Code:
Den Inhalt von Spalte1 bekommst du über die Caption, den Inhalt von Spalte 2 über SubItems[0], den inahlt von Spalte3 über SubItems[1].
Spalte1|Spalte2|Spalte3
Datum|Zeit|Termin Somit sollte dein obiger Code wie folgt abgewandelt funktionieren:
Delphi-Quellcode:
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var i: integer; begin for i:=0 to lv_eintraege.Items.Count - 1 do begin if (StrtoDate(lv_eintraege.Items[i].SubItems[1])=now) and (StrtoTime(lv_eintraege.Items[i].SubItems[2])=now) then begin ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].SubItems[0]+') beginnt!'); end; end; end; |
Re: ShowMessage mit Hilfe von Datum in ListView
Hast ja recht, mein Problem selber hat nichts mit XML zutun.War ne verpeilung jetze von mir. Siehste, mit deiner Erklärung, das die erste Spalte das Caption ist und die weiteren jeweils mit SubItem angesprochen werden, hab ich es verstanden. Da werd ich erstma weiter machen und hoffe, das es nich all zu nerven aufreibend für euch war. :oops: GREAT THX!!!
Gruß, |
Re: ShowMessage mit Hilfe von Datum in ListView
Jetzt gehe ich mal noch davon aus, dass dein Timer ein Interval von 1 Minute hat? Da ein Timer aber nicht genau geht, kann es sein, dass er um 15:15:52 und das nächste mal erst um 15:17:02 Uhr das Ereignis überprüft. Und was ist jetzt mit deinem Termin um 15:16Uhr? :mrgreen:
Daher muß der Vergleich anstatt = >= lauten und du mußt dir merken, ob ein Termin schonmal mit dem Dialog angemahnt war oder nicht. Sonst gibt es die eben beschriebenen vielen schönen Meldungen. |
Re: ShowMessage mit Hilfe von Datum in ListView
Sorry die vielleicht jetzt schon wieder dumme Frage.
Hättest du vielleicht n Vorschlag wie ich mir merken kann, welche Termin schon gemeldet wurde. Da fehlt mir jetzt grad die Vorstellung, ob ich es in Variablen machen soll, oder lieber in n File. P.s. Der Timerinterval ist im Moment auf einer Sekunde |
Re: ShowMessage mit Hilfe von Datum in ListView
Ich würde deinen ganzen Terminplaner mit nem array of record aufbauen.
Mal auf die Schnelle:
Delphi-Quellcode:
type
TTermin = record Nr: integer; Datum: Date; Zeit: Time; Beschreibung, Text: string; Aktiv: boolean; end; private Termin: array of TTermin; |
Re: ShowMessage mit Hilfe von Datum in ListView
Da müsste ich jetzt das Prog umstellen, da ich im Moment mit ner XML Datei arbeite und versuche darin alle notwendigen Eintragungen zumachen.
Aber könnt ich ja versuchen.... |
Re: ShowMessage mit Hilfe von Datum in ListView
Hast du es schon mal mit "Time" und "Date" anstatt "Now" probiert?
|
Re: ShowMessage mit Hilfe von Datum in ListView
Wie meinstn das? Du meinst das doch wo nich so
Delphi-Quellcode:
oder?? :roll:
if (StrtoDate(lv_eintraege.Items[i].SubItems[1])=Date) and (StrtoTime(lv_eintraege.Items[i].SubItems[2])=Time) then begin
|
Re: ShowMessage mit Hilfe von Datum in ListView
Kann mis jemand vielleicht sagen, wie ich das Ausgabeformat von TimeToStr(now) ändern kann so das ich es dann nurnoch im Format hh:mm herauskriege!?
|
Re: ShowMessage mit Hilfe von Datum in ListView
Delphi-Quellcode:
FormatDateTime()
|
Re: ShowMessage mit Hilfe von Datum in ListView
Öhm, ich habs jetzt ma versucht, aber der Kompiler meint "inkompatible typen String und TDateTime.
Hatte mir in der Delphi Hilfe ma was zu FormatDateTime angeguckt und fand dieses Beispiel:
Code:
Da dacht ich mir ich könnts vielleicht so anwenden:
Im folgenden Beispiel wird die String-Variable S mit folgendem Wert belegt: 'Die Besprechung ist am Mittwoch, 15. Februar 1998 10:30'.
S := FormatDateTime('"Die Besprechung ist am " dddd, mmmm d, yyyy, " um " hh:mm AM/PM', StrToDateTime('2/15/98 10:30am'));
Delphi-Quellcode:
Aber dat funzt nich. Kann mir das ma jemand erklären?? :lol:
var
uhr_aktuell: String; //Hatte es auch als TDateTime versucht begin ... uhr_aktuell:=FormatDateTime('dd.mm.yyyy hh:mm',StrToDateTime(StrtoDate(lv_eintraege.Items[i].SubItems[1])=StrToDate(now) lv_eintraege.Items[i].SubItems[2])>=StrToTime(now)));... end. |
Re: ShowMessage mit Hilfe von Datum in ListView
Ganz einfach, du hast nen Vergleich in ner Parameterübergbe einer Funktion. :shock: Das kann doch nicht Funktionieren!
Was willst du jetzt haben? Den Vergleich? Oder möchtest du was angezeigt bekommen? |
Re: ShowMessage mit Hilfe von Datum in ListView
Also ich will die Uhrzeit, die sich in der Splate "Uhrzeit" befindet mit der "aktuellen Zeit" aber im Format hh:mm vergleichen. Und anhand dessen will ich dann die Meldung "zu passender Stunde und Minute" angezeigt bekommen. Natürlich muss auch das Datum passen. Nich das er jeden Tag meine Termine einzeigt, die ich vielleicht schon hatte oder erst haben werde.
|
Re: ShowMessage mit Hilfe von Datum in ListView
Wo liegt dann dein Problem?
Den Code von mir mit Yheeky's Idee verknüpft ergibt das:
Delphi-Quellcode:
Das müßte doch funktionieren?
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var i: integer; begin for i:=0 to lv_eintraege.Items.Count - 1 do begin if (StrtoDate(lv_eintraege.Items[i].SubItems[1])=date) and (StrtoTime(lv_eintraege.Items[i].SubItems[2])=time) then begin ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].SubItems[0]+') beginnt!'); end; end; end; |
Re: ShowMessage mit Hilfe von Datum in ListView
Achman son sch***!! Es will nicht klappen, das ich ne Meldung zu gewünschter Zeit bekomme. Habs doch aber so angewandt wie ihrs vorgeschlagen habt.
|
Re: ShowMessage mit Hilfe von Datum in ListView
Dann halt so:
Delphi-Quellcode:
Mit dem >= geht's seltsamerweise. Gibt jetzt aber schöne viele Fenster. Daher ja mein Vorschlag, das du dir Merken mußt, ob er schon aktiv war oder nciht.
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var i: integer; begin for i:=0 to lv_eintraege.Items.Count - 1 do begin if (StrtoDate(lv_eintraege.Items[i].SubItems[1])=date) and (StrtoTime(lv_eintraege.Items[i].SubItems[2])>=time) then begin ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].SubItems[0]+') beginnt!'); end; end; end; |
Re: ShowMessage mit Hilfe von Datum in ListView
Yeah!! :dancer: Merci. Jetzt bekomm ich zwar was weiß ich wie oft de Meldung, das mein Termin beginnt. :lol: Aber dafür werdsch ne Lösung finden.
Ich hab überlegt ob ich in mein XML File einfach zum jeweiligen termin einfüge ob er angezeigt wurde oder nicht. Und dies dann in meiner Schleife abfrage. Du hattest zwar n Vorschlag mit n Array gemacht, aber das übersteigt mein bisheriges Wissen über Arrays. :roll: :dp: |
Re: ShowMessage mit Hilfe von Datum in ListView
Dann viel Erfolg.
|
Re: ShowMessage mit Hilfe von Datum in ListView
THX :wink: Und danke nochma für eure Ausdauer beim helfen. :firejump:
Gruß, |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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