Suche in TMemo



  • Hi Leute!
    Ja diese Frage wurde schon mehrmals gestellt, aber ich habe da noch einer erweiterte Frage. Es geht darum, das ich eine Suchfunktion für einen Texteditor mit TMemo-Editfield implementieren will. So wie das in

    [url] Suchen-Funktion [/url]

    erklärt ist funktioniert das auch wunderbar, Problem ist hier jedoch, dass man immer nur das erste Vorkommen des Wortes prüfen kann, nachdem ich suche. Wenn ich nun weitere Ergebnisse suchen will, weis ich nicht wie das gehen soll, da Pos() ja immer nur das erste Vorkommen des Strings zurückgibt. Gibt es da eine Möglichkeit? Ich hatte da gestern mal was gebastelt, das aber irgendwie viel zu umständlich war.

    Ach noch was: Mich TRichEdit arbeite ich nicht weil mir das in manchen dingen zu Buggy ist...

    Bitte helft mir ...

    Gruss, code_pilot



  • Problem gelöst!

    Ich poste es hier mal hin damit auch andere es gebrauchen können:

    Einmal die Prozedur zum Aufrufen des (selbstgebauten) Find-Dialogs und zum finden des ersten Wortes:

    void __fastcall TMain::Find1Click(TObject *Sender)
    {
            Find->ShowModal();
            if(Find->ModalResult == mrOk)
            {
                    findtext = Find->Edit1->Text;
                    findpos = Editor->Text.Pos(findtext);
                    if(findpos != 0)
                    {
                            Editor->SelStart = findpos - 1;
                            Editor->SelLength = findtext.Length();
                    }
                    else
                    {
                            Application->MessageBox("String mnicht gefunden.", "Suche", 64);
                    }
            }
    }
    

    und die zum weitersuchen...

    findpos = Editor->Text.SubString(Editor->SelStart + Editor->SelLength + 1, Editor->GetTextLen()).Pos(findtext);
                    if(findpos != 0)
                    {
                            Editor->SelStart = Editor->SelStart + Editor->SelLength + findpos - 1;
                            Editor->SelLength = findtext.Length();
                    }
                    else
                    {
                            Application->MessageBox("No more results found.", "Find", 64);
                    }
    

    Globale Variablen:

    int findpos;
    String findtext;
    

    Gruss, code_pilot :p



  • Original erstellt von code_pilot:
    Ich poste es hier mal hin damit auch andere es gebrauchen können:

    Sehr vorbildlich. Weniger vorbildlich: Die fehlenden Kommentare (o;

    Original erstellt von code_pilot:
    Globale Variablen:

    Autsch... hmm das geht doch bestimmt auch ohne? (o;

    -junix



  • Jaa hast recht aber es runnt 😉

    Kommentare? Mein Code ist selbsterklärend 😉 😉 😉

    gruss,
    code_pilot


Anmelden zum Antworten