Zitat von
wbdelpprax:
ist nicht gerade sehr hilfreich, denn wenn ich es probiert habe und es nicht geklappt hat - was sollte mir das dann Deiner Meinung bringen?
nja, war mehr soeine Antwort ala "eigentlich sollte ein komplettes Neuladen doch funktionieren ... wie versuchst du es denn derzet?"
Wenn man jetzt nur Folgendes macht,
Delphi-Quellcode:
xml.active := false;
xml.active := true;
dann wird der Parser nur neu gestartet, aber da
MSXML-
DOM die Datei beim LoadFromFile in internen einen Puffer läd und dann hierbei praktisch immer nur diesen Puffer neu parst, können natürlich Änderungen an der eigentlichen Datei nicht im Ergebnis einfließen werden.
Zitat von
wbdelpprax:
Zwar konnte ich mit dem Fileage nichts anfangen, denn gegen welches Datum sollte ich denn eine potentielle Änderung prüfen?
Du speicherst dir einfach beim Laden über irgendeine Funktion (z.B.
FileAge) das letzte Änderungsdatum und vergleichst es dann jedes mal mit dem gespeichertem Wert.
Somitt könnte man z.B. alle ein paar Sekunden das Datum prüfen, aber mußte nicht ständig die Datei neu einlesen, welches ja aufwändiger wäre (von der CPU- und Datenträgerbelastung).
LoadFromFile sollte nach dem erfolgreichen Einlesen immer datmod.DataModule1.xmldocument1.Active auf True setzen, wenn nicht, dann ist irgendwas schiefgelaufen und es würde eigentlich eine
Exception ausgelöst.
Delphi-Quellcode:
type
TFSlideShow =
Class...
private
OldFileAge: TDateTime;
end;
function TFSlideShow.open_xml(OpenAlways: Boolean = false): Boolean;
var A: TDateTime;
begin
//if XML exist take over all the values for the pic
if fileexists(g_xmlpath)
then
begin
if OpenAlways
or not FileAge(xmlpath, A)
or (A < OldFileAge)
then
begin
OldFileAge := A;
//activate the xml file for the unit
datmod.DataModule1.XMLDocument1.LoadFromFile(g_xmlpath);
datmod.wbpickeys := Getwbpickeys(datmod.DataModule1.XMLDocument1);
end;
// datmod.wbpickeys := Getwbpickeys(datmod.DataModule1.XMLDocument1);
result:= true;
end
else
result:= false;
end;
ich weiß jetzt nicht, was Getwbpickeys macht, also gönnte es sein, daß man dieses eventuell etwas verschieben müßte.
OpenAlways auf True setzen, wenn wirklich (neu) geladen werden soll, also z.B. beim ersten Mal nach Programmstart.
Ansonsten wird die Datei nur noch bei Veränderungen (des Datums der letzen Änderung) geladen.