Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ShowMessage mit Hilfe von Datum in ListView (https://www.delphipraxis.net/8423-showmessage-mit-hilfe-von-datum-listview.html)

Akut-Programming 4. Sep 2003 13:40


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:
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;
THX
Gruß,

Tpercon 4. Sep 2003 13:51

Re: ShowMessage mit Hilfe von Datum in ListView
 
Auf den ersten Blick solltest du
Delphi-Quellcode:
lv_eintraege.Items.Count
in
Delphi-Quellcode:
lv_eintraege.Items.Count - 1
ändern!

Und nochwas:
Du wirst in deinem Beispiel nie einen Dialog sehen!
Delphi-Quellcode:
(lv_eintraege.Items[i].Caption=DateToStr(now)) and (lv_eintraege.Items[i].Caption=TimeToStr(now))
Was steht bei dir in der Caption? Ein Datum, eine Uhrzeit oder beides?
Falls beides, dann wäre der Vergleich
Delphi-Quellcode:
lv_eintraege.Items[i].Caption=DateTimeToStr(now)
richtig.

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.

Akut-Programming 4. Sep 2003 14:10

Re: ShowMessage mit Hilfe von Datum in ListView
 
:roll: Jetzt bekomm ich aber auch keine Meldung angezeigt. Es passiert nichts!! :cry:

Tpercon 4. Sep 2003 14:12

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.

Yheeky 4. Sep 2003 14:15

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

Tpercon 4. Sep 2003 14:19

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.

Akut-Programming 4. Sep 2003 14:20

Re: ShowMessage mit Hilfe von Datum in ListView
 
Sorry, hatte erst nicht gesehen, das du noch editiert hast!!

Zitat:

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

Ne, so richtig kenn ich den Unterschied auch noch nicht, da XML für mich neu ist. Von dem einen bekomme ich zu verstehen, das caption die Spalte ist, vom anderen höre ich, das es SubItem ist.

Zitat:

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

Deshalb wollt ich ja eigentlich auch die Uhrzeit, die sich in einer anderen Spalte befindet, mit der "jetzigen" vergleichen. Wenn Datum und Uhrzeit nicht gleich sind, sollte ich doch auch nich zich Meldungen bekommen, oder?

Akut-Programming 4. Sep 2003 14:21

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.

Akut-Programming 4. Sep 2003 14:26

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!

Tpercon 4. Sep 2003 14:26

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:
Spalte1|Spalte2|Spalte3
Datum|Zeit|Termin
Den Inhalt von Spalte1 bekommst du über die Caption, den Inhalt von Spalte 2 über SubItems[0], den inahlt von Spalte3 über SubItems[1].
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;

Akut-Programming 4. Sep 2003 14:32

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ß,

Tpercon 4. Sep 2003 14:36

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.

Akut-Programming 4. Sep 2003 14:41

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

Tpercon 4. Sep 2003 14:45

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;

Akut-Programming 4. Sep 2003 14:49

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

Yheeky 4. Sep 2003 18:59

Re: ShowMessage mit Hilfe von Datum in ListView
 
Hast du es schon mal mit "Time" und "Date" anstatt "Now" probiert?

Akut-Programming 5. Sep 2003 07:05

Re: ShowMessage mit Hilfe von Datum in ListView
 
Wie meinstn das? Du meinst das doch wo nich so

Delphi-Quellcode:
if (StrtoDate(lv_eintraege.Items[i].SubItems[1])=Date) and (StrtoTime(lv_eintraege.Items[i].SubItems[2])=Time) then begin
oder?? :roll:

Akut-Programming 5. Sep 2003 07:06

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!?

Tpercon 5. Sep 2003 08:05

Re: ShowMessage mit Hilfe von Datum in ListView
 
Delphi-Quellcode:
FormatDateTime()

Akut-Programming 5. Sep 2003 09:12

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:
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'));
Da dacht ich mir ich könnts vielleicht so anwenden:

Delphi-Quellcode:
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.
Aber dat funzt nich. Kann mir das ma jemand erklären?? :lol:

Tpercon 5. Sep 2003 09:27

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?

Akut-Programming 5. Sep 2003 09:37

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.

Tpercon 5. Sep 2003 09:45

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:
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;
Das müßte doch funktionieren?

Akut-Programming 5. Sep 2003 10:23

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.

Tpercon 5. Sep 2003 10:36

Re: ShowMessage mit Hilfe von Datum in ListView
 
Dann halt so:
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])=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;
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.

Akut-Programming 5. Sep 2003 11:01

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:

Tpercon 5. Sep 2003 11:07

Re: ShowMessage mit Hilfe von Datum in ListView
 
Dann viel Erfolg.

Akut-Programming 5. Sep 2003 11:11

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