Innerhalb von Memo suchen - C++



  • Mit F9 startest du das Programm im Debuggermodus, das weist du ?

    Falls du keine FindDialog-Komponente auf dem Formular hast, zieh eine drauf.
    In der Hilfe des BCB ist auch ein kleines Beispiel zu diesem Dialog.

    mfg
    kpeter



  • jo, dad weiß ich, das ich anch drücken der F9-Taste im Debuggermodus bin

    ich habe auch den FindDialog schon in meinem Bearbeutungsfenster (in C++ standardmäßig TForm1)

    also die hilfedatei hab ich auch schon durchgestöbert, aber nichts gefunden



  • Tip,

    nimm anstatt des Memo eine TRichEdit-Kompo. Die ist von TCustomMemo abgeleitet, hat mehr
    Eigenschaften und direkt eine Methode FindText.

    Hier das Listing aus meiner F1:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    
    {
      FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top);
      FindDialog1->Execute();
    
    }
    
    void __fastcall TForm1::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();
      }
    }
    

    Müsste auf Anhieb gehen 😃



  • danke dir

    es funktioniert alles einwandfrei

    super, danke



  • bin stolz auf dich 👍 👍 👍

    darfst dir auf die schultern klopfen 😃 😃 😃 😃



  • Danke für die Blumen.

    Hier wird immer gerne geholfen.
    😉

    mfg
    kpeter



  • is das bei dir auch, das das RichEdit nicht automatisch zum angezeigten Wort/Text scrollt?



  • Das Fenster muss noch gescrollt werden.
    Wenn eine Position im Text gefunden wurde, die ober- oder unterhalb des sichtbaren Bereiches liegt,
    schickt man ein Message an die TRichEdit:

    RichEdit1->Perform(EM_SCROLLCARET, 0, 0);
    

    Diese Zeile hängst du ganz unten als letze ein.

    Das funktioniert aber nur solange, wie Text markiert (selektiert) ist.



  • jo, thx

    das läuft wie ne sahne^^

    dankeschön



  • ich denke mal, das kann zu den FAQ`s

    von meiner seite ist es geschlossen


Anmelden zum Antworten