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 3333nacher:
ccc
aa
bbb 1111 2222 3333also 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 werdenif (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