ReplaceDialog --> wie lösen??
-
[cpp]
void __fastcall TFlex_DB::ReplaceDialog1Replace(TObject *Sender)
{
if (ReplaceDialog1 -> Options.Contains(frReplaceAll));
static int Count;
TSearchTypes Options;
if (ReplaceDialog1 -> Options.Contains(frWholeWord))
Options << stWholeWord;
if (ReplaceDialog1 -> Options.Contains(frMatchCase))
Options << stMatchCase;int Pos = RichEdit1 -> FindText(ReplaceDialog1 -> FindText, RichEdit1 -> SelStart,
RichEdit1 -> GetTextLen(), Options);while (Pos != -1)
{
RichEdit1 -> SelStart = Pos;
RichEdit1 -> SelLength =
ReplaceDialog1 -> FindText.Length();RichEdit1 -> SetSelTextBuf(
ReplaceDialog1 -> ReplaceText.c_str());
RichEdit1 -> Perform(EM_SCROLLCARET, 0, 0);Count;
Pos = RichEdit1 -> FindText(
ReplaceDialog1 -> FindText, RichEdit1 -> SelStart,
RichEdit1 -> GetTextLen(), Options);
}ReplaceDialog1 -> CloseDialog();
char buff[40];
sprintf (buff, "Textsuche beendet.\r\n%d replacements made.", Count);
MessageBox(Application -> Handle, buff, "Text ersetzen", MB_OK);Count = 0;
}else {
if (RichEdit1 -> SelLength == 0) return;
RichEdit1 -> SetSelTextBuf(ReplaceDialog1 -> ReplaceText.c_str());
RichEdit1 -> SelLength = 0;
}
RichEdit1 -> SetFocus();[/cpp]an den beiden schwarz markierten zeilen, bekomme ich folgende Fehler:
1.) [C++ Fehler] Flexiva.cpp(239): E2268 Aufruf der undefinierten Funktion 'sprintf'2.) [C++ Fehler] Flexiva.cpp(245): E2040 Deklaration nicht ordnungsgemäß abgeschlossen
-
void __fastcall TFlex_DB::ReplaceDialog1Replace(TObject *Sender) { if (ReplaceDialog1 -> Options.Contains(frReplaceAll)); static int Count; TSearchTypes Options; if (ReplaceDialog1 -> Options.Contains(frWholeWord)) Options << stWholeWord; if (ReplaceDialog1 -> Options.Contains(frMatchCase)) Options << stMatchCase; int Pos = RichEdit1 -> FindText(ReplaceDialog1 -> FindText, RichEdit1 -> SelStart, RichEdit1 -> GetTextLen(), Options); while (Pos != -1) { RichEdit1 -> SelStart = Pos; RichEdit1 -> SelLength = ReplaceDialog1 -> FindText.Length(); RichEdit1 -> SetSelTextBuf( ReplaceDialog1 -> ReplaceText.c_str()); RichEdit1 -> Perform(EM_SCROLLCARET, 0, 0); Count; Pos = RichEdit1 -> FindText( ReplaceDialog1 -> FindText, RichEdit1 -> SelStart, RichEdit1 -> GetTextLen(), Options); } ReplaceDialog1 -> CloseDialog(); char buff[40]; [b]sprintf[/b] (buff, "Textsuche beendet.\r\n%d replacements made.", Count); MessageBox(Application -> Handle, buff, "Text ersetzen", MB_OK); Count = 0; } [b]else {[/b] if (RichEdit1 -> SelLength == 0) return; RichEdit1 -> SetSelTextBuf(ReplaceDialog1 -> ReplaceText.c_str()); RichEdit1 -> SelLength = 0; } RichEdit1 -> SetFocus();
-
Hallo
Vermutlich fehlt dir einfach nur der include auf den Header wo sprintf deklariert ist. Aber warum solltest du eine alte C-Funktion samt C-Array benutzen, was einerseits veraltet und anderseits fehleranfällig ist? Benutzt AnsiString!
int Count; ... AnsiString buff = "Textsuche beendet.\r\n" + IntToStr(Count) + " replacements made."; Application->MessageBox(buff.c_str(), "Text ersetzen", MB_OK);
bis bald
akari
-
Du hast in Zeile 3 ein Semikolon zu viel
-
wenn ich deinen code eingebe, kommen folgende fehlermeldungen:
[C++ Fehler] Flexiva.cpp(239): E2238 Bezeichner 'buff' mehrfach deklariert
[C++ Fehler] Flexiva.cpp(238): E2344 'buff' bereits deklariert
-
hab noch ein bisschen rumgeschraubt, aber ich glaub, der quellcode stimmt gar net so richtig
hat jemand vlt. nen fetzen?
oder sogar vlt. die lösung?
-
ok, es funktioniert
{ if (ReplaceDialog1 -> Options.Contains(frReplaceAll)); static int Count; TSearchTypes Options; if (ReplaceDialog1 -> Options.Contains(frWholeWord)) Options << stWholeWord; if (ReplaceDialog1 -> Options.Contains(frMatchCase)) Options << stMatchCase; int Pos = RichEdit1 -> FindText(ReplaceDialog1 -> FindText, RichEdit1 -> SelStart, RichEdit1 -> GetTextLen(), Options); while (Pos != -1) { RichEdit1 -> SelStart = Pos; RichEdit1 -> SelLength = ReplaceDialog1 -> FindText.Length(); RichEdit1 -> SetSelTextBuf( ReplaceDialog1 -> ReplaceText.c_str()); RichEdit1 -> Perform(EM_SCROLLCARET, 0, 0); int Count; Pos = RichEdit1 -> FindText( ReplaceDialog1 -> FindText, RichEdit1 -> SelStart, RichEdit1 -> GetTextLen(), Options); } ReplaceDialog1 -> CloseDialog(); AnsiString buff = "Textsuche beendet.\r\n" + IntToStr(Count) + " replacements made."; Application->MessageBox(buff.c_str(), "Text ersetzen", MB_OK); Count = 0; if (RichEdit1 -> SelLength == 0) return; RichEdit1 -> SetSelTextBuf(ReplaceDialog1 -> ReplaceText.c_str()); RichEdit1 -> SelLength = 0; RichEdit1 -> SetFocus(); }
habe noch in einem button folgenden code eingefügt, denn dann wird FindDialog und ReplaceDialog in einem fenster angezeigt:
void __fastcall TFlex_DB::Button1Click(TObject *Sender) { FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top); FindDialog1->Execute(); ReplaceDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top); ReplaceDialog1->Execute(); }
-
un für die, die sich fragen, wie ich den FindDialog deklariert habe
hier iss der Quellcode:
void __fastcall TFlex_DB::FindDialog1Find(TObject *Sender) { int FoundAt, StartPos, ToEnd; // Suchbeginn nach der aktuellen Markierung // (falls vorhanden) // andernfalls beim Textanfang starten if (RichEdit1->SelLength) StartPos = RichEdit1->SelStart + RichEdit1->SelLength; else StartPos = 0; // ToEnd ist die Länge von StartPos bis zum Ende des Textes // im RTF-Eingabefeld ToEnd = RichEdit1->Text.Length() - StartPos; FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase); if (FoundAt != -1) { RichEdit1->SetFocus(); RichEdit1->SelStart = FoundAt; RichEdit1->SelLength = FindDialog1->FindText.Length(); RichEdit1->Perform(EM_SCROLLCARET, 0, 0); //Such-Funktion scrollt //automatisch nach unten / oben } }
den rest müsstet ihr selber schaffen
-
Du bist mein Doppelposter des Jahres :p
-
wieso bin ich das? xD