&Zeichen im AnsiString geht Flöten
-
Hallo
Aus dem Web (TCppWebBrowser) zieh ich von einer Seite den Quellcode speicher ihn in eine TMemo um ihn danach mit einer StringList zu durchforsten. in der TMemo zeigt er mir die & Zeichen korrekt an. in dem File was ich speicher auch.
Im Überwachten Ausdruck ist er auch korrekt.
In der TStringlist kommt scheisse an
Überwachter Ausdruck:
current->Strings[265]: { "\t\t\t\t\t<a href=\"showalbum.php?id=46e26c1c74e8672c&pid=b8a9d3d27820eec2\"><img src=\"http://img-p4.ak.imagevz.net/photo2/81/09/a7a3bbc9cce341d080884fe3610a/1-b8a9d3d27820eec2-m.jpg\" border=\"0\" ></a>" }
Ausgabe der Stringlist:
http://img503.imageshack.us/img503/2504/beweisgm4.jpgwo ist der fehler?
mein code
void TForm1::getCode(AnsiString id, int seite) { ShowMessage(seite); CppWebBrowser1->Navigate(WideString("*************************=" + id +"&pg="+seite)); for(int i=0 ; i<200 ; i++) { for(int a=0 ; a<10 ; a++) { Application->ProcessMessages(); codeMemo->Lines->Add(i); } } ExtractHtmlCodeOfCurrentPage(CppWebBrowser1, codeMemo->Lines, true); codeMemo->Lines->SaveToFile("test"); TStringList* current; current = new TStringList; current->LoadFromFile("test"); for(int a= 0 ; a < current->Count; a++){ code->Append (current->Strings[a]); } ShowMessage( current->Strings[265] ); for(int a= 0 ; a< current->Count; a++){ AnsiString zeile = current->Strings[a]; if( zeile.Pos( id + "&pg=" + seite + 1 ) ){ ShowMessage( a ); //wir haben eine weitere seite im code entdeckt, daher der aufruf von einer weiteren getCode(id, ++seite); break; } } }besten dank, falls ihr einen fehler finert
-
probier mal \& statt & bei dir im Programm zu schreiben. Ich weiß nicht genau, ob C++ das & interpretiert innerhalb eines Strings.
greetz KN4CK3R
-
huhu;
damit gings auch nicht, aaaaaaaaaaaaaaaaaaaaaber ich habs mal in einen extra string gepackt.for(int a= 0 ; a< current->Count; a++){
AnsiString zeile = current->Strings[a];
AnsiString str = id + "\&pg=" + (seite+1);
if( zeile.Pos( str ) ){
Edit1->Text = zeile;
getCode(id, ++seite);
break;
}
}es geht

-
for(int a= 0 ; a< current->Count; a++){ AnsiString zeile = current->Strings[a]; AnsiString str = id + "\&pg=" + (seite+1); if( zeile.Pos( str ) ){ Edit1->Text = zeile; getCode(id, ++seite); break; } }
-
Auf dem Bild ist das & doch klar und deutlich zu sehen. Allerdings als Unterstrich unter dem p. Wenn du dir im Debugger die ShowMessage-Zeile Anschaust, wirst du sehen, das auch da das & im String drin ist. Bei der Ausgabe wird es allerdings als Steuerzeichen interpretiert um den nächsten Buchstaben als ShortCut zu markieren.
Gleiches wird dir auch passieren, wenn du den String in einem TLabel (und nix anderes ist ja der String in der MessageBox) ausgeben willst.Das ganze ist übrigens ein Feature and not a Bug

mfg
xXx
-
-=]xXx[=- schrieb:
Gleiches wird dir auch passieren, wenn du den String in einem TLabel (und nix anderes ist ja der String in der MessageBox) ausgeben willst.
Das ganze ist übrigens ein Feature and not a Bug

genau dieses Feature geht mir mal gerade uffn sack :>
wie kann ichs umgehen? \ hilft net
-
Hallo
genau genommen ist es ein Feature von Windows, nicht von der VCL. Es dient dazu den nächsten Buchstaben zu markieren der als Hotkey angezeigt werden soll.
Bei TLabel gab es eine Eigenschaft das Verhalten auszuschalten (hab grad keinen Builder hier). Es sollte also auch (WinAPI-) Möglichkeiten geben das für andere Controls auszuschalten.bis bald
akari
-
Hallo,
Bei TLabel ShowAccelChar auf false setzen oder zwei & hintereinander nehmen.
-
Braunstein schrieb:
Hallo,
Bei TLabel ShowAccelChar auf false setzen oder zwei & hintereinander nehmen.
Danke!
und bei TGroupBox :> ?
-
hab der groupbox jetzt " " als caption gegeben und ein label drübergelegt mti dem & zeichen :> danke nochmal für den tipp!