AnsiString Zuweisung
-
Hi,
ich steh hier irgendwie auf den Schlauch.
Ich habe 2 Ansi Strings. In den einem speichere ich ein alten Wert
und vergleiche ihn mit einem anderem Wert.
Wenn beide gleich sind soll nix passieren, bei ungleich
soll der alte auf den neuen Wert gesetzt werden.dachte das wär mal schnell gemacht und habe das hier ausprobiert:
FensterTitel und Titel alt sind beide AnsiStrings.if(FensterTitel != TitelAlt) { TitelAlt = FensterTitel; }das hat aber mal gar nicht funktioniert, weil immer in die schleife
gelaufen wird.nach vielen rumprobieren bin ich jetzt auf das gekommen, was auch funktioniert:
if (TitelAlt.AnsiCompare(FensterTitel.c_str())!=0) { TitelAlt.Delete(1,TitelAlt.Length()); TitelAlt.Insert(FensterTitel.c_str(),1); }Finde ich allerdings ganz schön umständlich.
Wäre nett wenn mir irgendwer Tipps zur Optimierung geben könnte.Danke
Cool Hand
-
Dein erster Code sollte sehr gut funktionieren. Entweder liegt dein Fehler in dem umgebenden Code darum oder du hast uns nicht alle Informationen gegeben um das Problem zu lösen.
-
Tja ich war auch der Meinung das das geht.
ich habe TitelAlt als globale Variable und hole mir
FensterTitel jedesmal bei OnTimervoid __fastcall TForm1::Timer1Timer(TObject *Sender) { AnsiString FensterTitel; hwnd = FindWindow("Winamp v1.x",NULL); GetWindowText(hwnd, FensterTitel.c_str(), 100); if(FensterTitel != TitelAlt) { TitelAlt = FensterTitel; } Label7->Caption = TitelAlt.c_str(); Label8->Caption = FensterTitel.c_str(); }In die if Abfrage läuft er einmal am Anfang rein. Danach nicht mehr.
Wenn sich jetzt der FensterTitel ändert hat TitelAlt auch sofort den neuen
Wert, ohne das die if Abfrage durchlaufen wird.Muss ich die Zuweisung TitelAlt = FensterTitel anders machen?
confused..
-
Cool Hand schrieb:
Tja ich war auch der Meinung das das geht.
Ich bin auch nach dem Überfliegen Deines Codes der Meinung, dass das geht - wenn man nicht sonst
irgendwelchen Unsinn einbaut.Die Zeile
GetWindowText(hwnd, FensterTitel.c_str(), 100);kann doch gar nicht funktionieren. Schau doch dazu mal in der Hilfe nach c_str().
Vermutlich musst Du Dir eine (temporäre) char*-Variable erstellen und dies der Funktion
GetWindowText() übergeben. Diese kannst Du dann auch Deiner AnsiString-Variable FensterTitel
zuweisen.Nebenbei: Für was ist die if-Bedingung überhaupt gut? Es gibt nur zwei Fälle:
1. Die beiden Strings sind gleich, dann bleiben sie gleich.
2. Die beiden Strings sind unterschiedlich, dann werden sie gleich gemacht.
In beiden Fällen hast Du hinterher den gleichen Zustand. Da würde ich mir die if-Bedingung
sparen und einfach nur die Zuweisung reinschreiben.Wofür brauchst Du das c_str() bei der Zuweisung zu den Label-Captions?
Hast Du eigentlich mal im Debugger nachgeprüft, was in FensterTitel nach dem Aufruf von GetWindowText()
steht? Ich vermute mal: Nichts.Gruß,
Alexander