RichEdit Zeile Makieren Zeilennummer finden



  • Hallo habe im FAQ und im Forum noch nichts deartiges gefeunden und in der BCB Hilfe leider auch nicht.

    Mit
    RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, 1, 0);
    kann ich zur meinergewünschten Zeiel springen und mit
    RichEdit1->Perform(EM_SCROLLCARET, 0, 0);
    kann ich auch direkt da hin scrollen doch wie kann ich nun diese komplette Zeile malkieren ?

    Habe schon was probiert aber irgenwie mache ich was falsch.

    FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top);
    
    int FoundAt, StartPos, ToEnd;
    StartPos = 0;
    ToEnd = RichEdit1->Text.Length();
    
      FoundAt = RichEdit1->FindText("Test", StartPos, ToEnd, TSearchTypes()<< stMatchCase);
      if (FoundAt != -1)
      {
        RichEdit1->SetFocus();
        RichEdit1->SelStart = FoundAt;
        RichEdit1->SelLength = FindDialog1->FindText.Length();
        }
    

    Die andere Frage stellt sich in welcher Zeile ich im Augenblick überhauptbin programmiertechnich.

    die ich gerade am bearbeiten bin wenn ich z.B. mit folgendem Quelltext den Textdruchsuche:

    Len = RichEdit1->Text.Length();
    pTemp = (char *) calloc(Len, sizeof(char));
    strcpy(pTemp,RichEdit1->Text.c_str());
    Pos1 = strstr(Pos2, "&F");
    Pos2 = strstr(Pos1, "=");
    strncpy(str, Pos2 - 3 , 3);
    

    danke





  • Also irgendiwie hilft mir der Link gerade nicht wirklich weiter. 😕 für keins der Beiden Probleme..



  • hmm sehr eigenartig nachdem ich durhc den link nicht shclau wurde habe ich weiter rumprobiert und es geht jetzt aber ich stelle kein unterschied fest. seht ihr irgendtwas ?

    FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top);
    
    int FoundAt, StartPos, ToEnd;
    StartPos = 0;
    ToEnd = RichEdit1->Text.Length();
    
      FoundAt = RichEdit1->FindText("Test", StartPos, ToEnd, TSearchTypes()<< stMatchCase);
      if (FoundAt != -1)
      {
        RichEdit1->SetFocus();
        RichEdit1->SelStart = FoundAt;
        RichEdit1->SelLength = FindDialog1->FindText.Length();
    
        }
    


  • Auf jedenfall funktioniert das warum auch immer.

    Jetzt fehlt mir nur noch die wie ich die Zeile des Cursors finde.

    Die genaue Position Selbst ist nicht so schwer aber ich möchte nicht wo wissenw o genau sondern welche Zeile.



  • So jetzt hat der Link ja doch noch was gebracht 🙂

    Anzeige in welcher Zeile sich gerade der Cursor befindet

    RichEdit1->CaretPos.y
    


  • RichEdit1->SelStart;
    

    gibt dir ja schon die Cursor-Position im Text wieder.
    Mit CaretPos könntest du dessen x- und y-Position im Edit ermitteln, allerdings nur die optische
    Um eine ganze Zeile zu markieren (also SelStart auf den Anfang und SelLength auf die Länge der Zeile zu setzen), könntest du einfach alle '\n' zählen, bis du bei dem ersten \n bist, dessen Position größer ist als die der Cursorposition im Text -> das wäre dann das Ende der Zeile, der Beginn der Zeile wäre dann einfach das erste Zeichen nach dem vorigen \n.



  • oder so:

    int Zeile = RichEdit1->Perform(EM_LINEFROMCHAR,RichEdit1->SelStart,0)+1;
    

Log in to reply