Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In XML schreiben, nachdem Meldung angezeigt! (https://www.delphipraxis.net/8645-xml-schreiben-nachdem-meldung-angezeigt.html)

Akut-Programming 9. Sep 2003 14:25


In XML schreiben, nachdem Meldung angezeigt!
 
Hi Leudz!!

Ich will nach dem anzeigen einer Message in ne XML Datei schreiben, nur schreibt er immer in den Eintrag vor dem Eintrag in dem ich eigentlich schreiben will. :? Kann sich das ma jemand angucken...

Delphi-Quellcode:
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var
  i: integer;
  node: IXMLDOMNode;
  newTermin, newSub: IXMLDOMNode;
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)
      and (xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i)+'"]/AlertShowed').Text='_')
      then begin
        ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].SubItems[0]+') beginnt!');
        node := xmlDoc.documentElement.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i)+'"]');
        node.selectSingleNode('AlertShowed').text:='x';
        xmlDoc.save(frm_terminplaner_main.instpath + xmlfilename);
      end;
    end;
end;
Das Programm sollte mit dem schreiben in die XML nicht warten, bis in der Meldung auf OK geklickt wurde, sondern wenn sie angezeigt wird.

Tpercon 9. Sep 2003 14:33

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Zitat:

Zitat von Akut-Programming
Hi Leudz!!

Ich will nach dem anzeigen einer Message in ne XML Datei schreiben, nur schreibt er immer in den Eintrag vor dem Eintrag in dem ich eigentlich schreiben will. :? Kann sich das ma jemand angucken...

Delphi-Quellcode:
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var
  i: integer;
  node: IXMLDOMNode;
  newTermin, newSub: IXMLDOMNode;
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)
      and (xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i)+'"]/AlertShowed').Text='_')
      then begin
        ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].SubItems[0]+') beginnt!');
        node := xmlDoc.documentElement.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i)+'"]');
        node.selectSingleNode('AlertShowed').text:='x';
        xmlDoc.save(frm_terminplaner_main.instpath + xmlfilename);
      end;
    end;
end;
Das Programm sollte mit dem schreiben in die XML nicht warten, bis in der Meldung auf OK geklickt wurde, sondern wenn sie angezeigt wird.

Dann schreibe doch die ShowMessage Zeile mal hinter dem .save! Dann wird es auch zuerst gespeichert.
Geht das speichern nicht mit:
Delphi-Quellcode:
xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i)+'"]/AlertShowed').Text:='x';
xmlDoc.save(frm_terminplaner_main.instpath + xmlfilename);

Akut-Programming 9. Sep 2003 14:54

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Jud, jetzt wird es zwar zuerst gespeichert, und ich bekomm die Message auch nur noch einmal angezeigt. Nur schreibt er das 'x' in den Vorgänger Eintrag.

Bsp: Ich hab den Termin "TestTermin1" der beginnt am 08.09.2003 um 12:00 in der XML. Dann trage ich den Termin "TestTermin2" ein der am 09.09.2003 um 16:00 beginnt ein. :| Da bekomme ich sofort nach dem speichern die Message angezeigt mit dem Hinweis, das "TestTermin2" beginnt (obwohl es nich noch nicht 16:00 ist) und schreibt das 'x', das der Termin eigentlich schon angezeigt wurde, zu "TestTermin1". Sollte aber eigentlich zu "TestTermin2". :roll:

Tpercon 9. Sep 2003 15:03

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Hast du beachtest, dass dei ID, die du übergibst 0 basiert ist und deine ID im XML auf 1 basiert?! Könnte es daran liegen?

Akut-Programming 9. Sep 2003 15:20

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Ne damit scheints nichts zu tun zu hamm, da er´s jetzt immer noch in den Vorgänger - Termin speichert.

Weißt du vielleicht auch, wie ich die Message minuten genau anzeigen kann, da ich sie durch
Delphi-Quellcode:
...
and (StrtoTime(lv_eintraege.Items[i].SubItems[2])>=time)
...
dann angezeigt kriege, wenn die eingegebene Zeit größer als die jetzige ist. Das sollte aber nicht so sein. Mit
Delphi-Quellcode:
...
and (StrtoTime(lv_eintraege.Items[i].SubItems[2])=time)
...
Hat ers auch nich gemacht. Hab die ganze Sache in n Timer, damit es auch immer überprüft wird.

Tpercon 9. Sep 2003 15:24

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Dann schau nochmal nach wer dich auf die Idee mit dem >= gebracht hat. :mrgreen:
Das mußt du auch so machen, da der Timer wie damals gesagt und erklärt "Aussetzer" haben kann.

Die erste TerminID hat doch in der XML Datei den Wert 1 (ausgehend von dem ScreenShot aus einem deiner anderen Postings), oder doch den Wert 0?

CalganX 9. Sep 2003 15:25

Re: In XML schreiben, nachdem Meldung angezeigt!
 
@Tpercon: das kann man beliebig festlegen, dann es bei XML (AFAIK wohl gemerkt ;)) keine Art Index mit auto increment gibt (schön wär's).

Chris

Akut-Programming 9. Sep 2003 15:27

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Ja, von dir habsch den!! :oops:

Na der erste Termin beginnt mit ID 1!! hab i jetzt auch auf 1 gesetzt ---> Kein Erfolg :roll:

Tpercon 9. Sep 2003 15:28

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Dann ändere deinen Code mal folgendermaßen:
Delphi-Quellcode:
procedure Tfrm_terminplaner_main.Timer2Timer(Sender: TObject);
var
  i: integer;
  node: IXMLDOMNode;
  newTermin, newSub: IXMLDOMNode;
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)
      and (xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i+1)+'"]/AlertShowed').Text='_')
      then begin
                     xmlDoc.selectSingleNode('/PlanView/termin[terminid="'+IntToStr(i+1)+'"]/AlertShowed').Text:='x';
        xmlDoc.save(frm_terminplaner_main.instpath + xmlfilename);
        ShowMessage('Ihr Termin ('+lv_eintraege.Items[i].SubItems[0]+') beginnt!');
      end;
    end;
end;

Akut-Programming 9. Sep 2003 17:35

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Leider passiert nichts! :cry:

Akut-Programming 9. Sep 2003 17:41

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Hey, es klappt, zumindest das er zum passenden Termin das x setzt! :mrgreen: Aber ich kriegs nich hin, das die Meldung erst zum Terminbegin kommt!? :oops:

Tpercon 9. Sep 2003 18:35

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Funktionierte meine (ungetesteter) Code nicht?
Wann kommt den jetzt die Meldung?

Akut-Programming 9. Sep 2003 19:05

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Yo dein Code funzte!! :dancer: Die Meldung kommt jetzt sofort nach speichern des Termins (zumindest wenn der Termin für aktuellen Tag ist), da ja
Delphi-Quellcode:
... >=Time)
die eingegebene Zeit gößer als die aktuelle ist. Nur das müsste ja eigentlich
Delphi-Quellcode:
... =Time)
sein, nur dat funzt nich!

Tpercon 9. Sep 2003 19:23

Re: In XML schreiben, nachdem Meldung angezeigt!
 
= geht nicht!!!!

Das habe ich dir doch schon erklärt warum das eh nicht gut ist.
Der Timer läuft "unregelmäßig". Und so kommt auf jeden Fall 'ne Meldung! Auch wenn der Timer die Minute mal "überspringen" sollte. Das die Meldung nur einmal kommt, hast du doch jetzt durch die Variable in der XML Datei rausbekommen.

Wo liegt also dein Problem?

Akut-Programming 9. Sep 2003 19:29

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Yo klar, die Meldung kommt nur noch einmal!! Un nu ne eigentlich easy Lösung meines Vaters... ich soll doch einfach mal
Delphi-Quellcode:
>=Time)
durch
Delphi-Quellcode:
<=Time)
ersetzen. Den Timerinterval auf 10 gestellt und schon funzt es als sei´s
Delphi-Quellcode:
=Time)
:mrgreen:

Tpercon 10. Sep 2003 10:06

Re: In XML schreiben, nachdem Meldung angezeigt!
 
<=?

Dann würde das doch bedeuten, dass, wenn der Termin am 10.9.03 16:00 Uhr ist, der schon am 10.9.03 0:01 Uhr die Meldung bringt!!!

Mit dem Interval, das halte ich auch für ne schlechte Lösung, da so der Code viel öfter ausgeführt wird, als notwendig!!

Akut-Programming 10. Sep 2003 11:31

Re: In XML schreiben, nachdem Meldung angezeigt!
 
Frag mich nich :mrgreen: ich habs n bissl getestet, bis jetzt is nüx unvorhergesehenes passiert. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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