Wieso wird das Ereignis nicht ausgeführt
-
{ alt = (TStringList *)Memo1->Lines; countzdown=60; String dl1=pfad.SubString(1,2)+"\\Ordner\\Datei.txt"; URLDownloadToFile(0, "http://server.de/ordner/Datei.txt", dl1.c_str(), 0, 0); Memo1->Lines->LoadFromFile(dl1); neu = (TStringList *)Memo1->Lines; if(alt != neu) { Application->MessageBox("111", "222", 0+64); alt=neu; } else { alt=neu; } }also das ist mein code und das was nicht funktioniert ist
if(alt != neu) { Application->MessageBox("111", "222", 0+64); alt=neu; }Denn wenn "alt" auch nicht gleich "neu" ist wird da snicht ausgeführt
-
alt und neu sind Zeiger auf eine TStringList-Instanz, und in deinem Fall zeigen beide auf Memo1->Lines.
Deshalb sind sie immer gleich.Ggf. solltest du dich erst nochmal mit den Grundlagen von C/C++ beschäftigen, dazu gehört u.a. eben auch der Umgang mit Zeigern.
-
Jansen schrieb:
alt und neu sind Zeiger auf eine TStringList-Instanz, und in deinem Fall zeigen beide auf Memo1->Lines.
Deshalb sind sie immer gleich.Ggf. solltest du dich erst nochmal mit den Grundlagen von C/C++ beschäftigen, dazu gehört u.a. eben auch der Umgang mit Zeigern.
Aber "alt" ist doch Memo1->Lines bevor die neu gedownloadete datei geladen wird die nicht die selben strings beinhaltet oder?
-
Hallo
alt und neu sind nur Pointer auf StringListen.
Das bedeutet es ist egal obsich das Objekt selber ändert, die Pointer beeinflußt das nicht, Das ist ja auch ein wichtiges Grundkonzept von Pointern. Du soltest dir da unbedingt noch ein Tutorial zum Thema durchlesen.Fakt ist, du kannst die eigentlichen Daten einer StringList nicht einfach kopieren (und das müßest du bei dieser Art der Überprüfung), indem du den Pointer kopierts.
Du könntest die Eigentschaft Text, einen AnsiString, kopieren und vergleichen.bis bald
akari
-
Hallo,
hab das mal ganz anders gemacht:Memo2->Visible=false; ... String dl1=pfad.SubString(1,2)+"\\Ordner\\Datei.txt"; URLDownloadToFile(0, "http://server.de/Ordner/Datei.txt", dl1.c_str(), 0, 0); Memo1->Lines->LoadFromFile(dl1); if(Memo1->Lines != Memo2->Lines) { Application->MessageBox("111", "222", 0+64); Memo2->Lines = Memo1->Lines; } else { Memo2->Lines = Memo1->Lines; }
-
Ups^^
fortsetzung: Wieso funktioniert das auch nicht? Jedesmal ist die if-bedingung true auch wenns net sein darf
-
Weil lines genauso zeiger auf eine Struktur sind wie alt und neu.
-
Kann mir vielleicht einer ein Beispiel schreiben? Habe leider grade wenig Zeit am PC um mich anders zu informieren. Danke!
-
Bitte? ^^
-
Hallo,
Es ist dir doch eigentlich alles gesagt worden. Hast du dich über Zeiger in einem Tutorial belesen?
http://tutorial.schornboeck.net/zeiger.htm
http://www.volkard.de/vcppkold/zeiger.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html
Desweiteren wäre es gut, wenn du dich in der BCB-Hilfe mit TStringList bzw. TMemo beschäftigst.
Hier nur mal der Vergleich von zwei TStringList-Objektenif(Memo1->Lines->Equals(Memo2->Lines))oder
if(Memo1->Lines->Text != Memo2->Lines->Text)
-
Hamburger...lecker schrieb:
Kann mir vielleicht einer ein Beispiel schreiben? Habe leider grade wenig Zeit am PC um mich anders zu informieren. Danke!
Aber für Copy&Paste reichts?

mfg cb