RichEdit <edit>Text an bestimmter Position einfügen</edit>



  • Hallo zusammen,
    kann mir jemad sagen wie man einen Text an einer bestimmten Position in RE einfügen kann?

    ich habe es so probiert aber es hat nicht geklappt:

    Form1->RichEdit1->CaretPos.x=50;
    Form1->RichEdit1->CaretPos.y=10;
    Form1->RichEdit1->Lines->Append(Zeile1);

    Ich bedanke mich im vorraus

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Hallo

    int line = RichEdit1->CaretPos.y;
    int col = RichEdit1->CaretPos.x;
    RichEdit1->Lines->Strings[line] = RichEdit1->Lines->Strings[line].Insert("Das ist ein Text", row +1);
    

    Dieses Beispiel geht davon aus das der Cursor und damit die Einfügestelle sich innerhalb bereits vorhandenem Text bzw. einem Zeilenende steht. Das heißt solange line und col aus dem immer gultigem Cursorwert kommen, ist auch das Einfügen gültig.

    Wenn du komplett neue Zeilen unterhalb bereits vorhandenem Textes einfügen willst, must du natürlich noch zusätzlich mit Add arbeiten.

    bis bald
    akari



  • hallo akari

    danke für die schnelle Antwort
    Ich möchte versuchen mein Problem genauer zu beschreiben:

    Ich habe einen Text in ein RE-Feld geladen.
    Ich möchte jetzt in dem Text ein bestimtes Wort suchen,kopieren, löschen
    und eine zeile davor wieder einfügen.

    Bsp:

    vorher:

    ccc
    bbb aa 1111 2222 3333

    nacher:

    ccc
    aa
    bbb 1111 2222 3333

    also die zwei a's ausschneiden und eine zeile nach oben verschieben.

    Gibt es denn keine möglichkeit den curser in x u. y koordinaten zu positionieren und dann ein wort einzufügen??

    ich bin dankbar für jede hilfe

    MfG
    Tommy



  • Hallo

    dein Problem läßt sich in drei Teile aufteilen :
    - den Text " aa " finden (mit Zeilenangabe)

    int row = -1;
    int col = -1;
    for (int currow = 0; currow < RichEdit->Lines->Count; currow++)
      if ((col = RichEdit->Lines->Strings[currow].Pos(" aa ")) > 0)
        row = currow;
    

    Jetzt stehen in row und col die Koordinaten des gesuchten Textes, wenn vorhanden. Wenn nichts gefunden wurde, abbrechen.
    Ansonsten soll jetzt der Suchtext aus der alten Stelle gelöscht werden

    if (row == -1) return;
    RichEdit->Lines->Strings[row] = RichEdit->Lines->Strings[row].Delete(col, 4);
    

    Zum Schluß muß jetzt nur noch der Suchtext als neue Zeile vor der alten eingefügt werden

    RichEdit->Lines->Insert(row -1, " aa ");
    

    bis bald
    akari



  • ich danke dir
    ich werde jetzt versuchen die informationen umzusetzen.

    wenn es probleme gibt melde ich mich.

    tommy



  • hallo akari

    ich habe den ersten Teil ausprobiert, das suchen, und es hat nicht geklappt 😞

    int row = -1;
    int col = -1;
    for (int currow = 0; currow < Form1->RichEdit2->Lines->Count; currow++)
    if ((col=Form1->RichEdit2->Lines->Strings[currow].Pos("L70")) >= 0)
    row = currow;
    Form1->Edit2->Text=IntToStr(row);
    Form1->Edit3->Text=IntToStr(col);
    Form1->Edit1->Text=IntToStr(Form1->RichEdit2->Lines->Count);

    er findet den string nicht col bleibt immer 0 in row steht eine Zahl die nicht stimmt.

    Kannst du mir bitte sagen wo ich ein Fehler gemacht habe 😕

    tommy



  • da AnsiString immer bei 1 beginnt muß die Abfrage auf "> 0" gemacht werden, da Pos == 0 bedeutet, dass der String nicht gefunden wurde

    if ((col=Form1->RichEdit2->Lines->Strings[currow].Pos("L70")) > 0)
    

    die For-Schleife hat außerdem in deinem Beispiel noch den Effekt, dass dir nur die letzte Position deines Suchstrings ausgegeben wird



  • Ich muss leider sagen das ich es immer noch nicht gelöst habe.
    Ich weiss nicht wie ich das gefundene wort aus dem text löschen, und die
    lücke mit dem nachfolgendem text schliessen soll. 😞

    ich bitte um hilfe.

    MfG

    Tommy



  • Hi,

    versuch's mal folgendermaßen:

    int col, row; 
    
    for(row = 0; row < Form1->RichEdit2->Lines->Count; row++) 
        if ((col=Form1->RichEdit2->Lines->Strings[row].Pos("L70")) > 0) 
            break;
    // Jetzt steht in row die aktuelle Zeile und in col die gefundene Spalte.
    
    if(col)
    {
        Form1->RichEdit2->Lines->Strings[row] = Form1->RichEdit2->Lines->Strings[row].Delete(col, 4);
        Form1->RichEdit2->Lines->Insert(row, "L70");
    }
    

    Viel Spaß,
    Christian



  • ... oder besser noch:

    int col, row; 
    
    for(row = 0; row < Form1->RichEdit2->Lines->Count; row++) 
        if ((col=Form1->RichEdit2->Lines->Strings[row].Pos("L70")) > 0) 
        { 
            Form1->RichEdit2->Lines->Strings[row] = Form1->RichEdit2->Lines->Strings[row].Delete(col, 4); 
            Form1->RichEdit2->Lines->Insert(row, "L70"); 
        }
    

    Funktioniert für jedes "L70" im RE, die erste Lösung hätte nur beim ersten Auftauchen was gebracht ...



  • Ich danke dir Christian

    ES KLAPPPPPPT 😃

    TOMMY


Anmelden zum Antworten