Memo/RichEdit Start/Endzeile der Markierung
-
Wie lässt sich die Start und Endzeile markierten Textes auslesen ?
Bisher habe ich so auf das RicheEdit-Objekt zugegriffen.
RichEdit1->Lines->Strings[248].SubString(42,1)Oder Zeilenübergreifend:
RichEdit3->Text.SubString(RichEdit3->SelStart+1,RichEdit3->SelLength)
So genügen die Informationen der Eigenschaft SelStart und SelStart.Das hat allerdings den Nachteil,
daß die Selektion bei Änderung eines einzelnen Zeichens
schon nicht mehr stimmt.
-
Hallo
Mit den Eigenschaften TRichEdit::SelLength und TRichEdit::SelStart kannst du generell die Auswahl auslesen. Welche Zeilen das sind must du allerdings manuell bestimmen.
bis bald
akari
-
Wie währe das am elegantesten ?
Zeilenumbrüche suchen und zählen ?
-
Zeilenumbrüche suchen eher nicht; TStringList::Count liefert das gleiche Ergebnis.
Aber sonst, wie Du schon geschrieben hast, zählen mit TStringList::Count und TStringList::Lines::Length
-
Wie sieht das in Anweisungsform aus ?
-
Hi,
Wenn du keine hohen Ansprüche stellst, kannst du die Win-API aussen vorlassen.
Greife auf die Mausereignisse zurück.in den Header :
private: int bY, eY;
in cpp:
void __fastcall TForm1::RichEdit1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { bY = RichEdit1->CaretPos.y + 1; } void __fastcall TForm1::RichEdit1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { eY = RichEdit1->CaretPos.y + 1; }
mfg
Peter
-
wie ist dann die zeile ermittelbar (x ?) ?
RichEdit1->CaretPos.x hmm gut
-
Hi,
CaretPos.y ist die Zeile.
Bei MouseDown hast du die Startzeile als bY, dann markierst du Text und lässt
die Mousetaste los. Ergo MouseUp und Endzeile als eY.mfg
Peter
-
achso danke für die Info dann war es zufall das es so klappt da ich vorher ja den Text Makiere.
-
Hallo, hatte vor kurzem ein ähnliches Problem.
Habs dann so gelöst. Funktioniert super.
int GetLineNum( int *Start, int *End, int ScopeGlobal) { int SelStart, SelEnd, Start_X, Start_Y, End_X, End_Y; if (ScopeGlobal == 0){ *Start = 0; *End = Form1->RichEdit1->Lines->Count; } else{ // Selected Text Start / End SelStart = Form1->RichEdit1->SelStart; SelEnd = SelStart + Form1->RichEdit1->SelLength; Form1->RichEdit1->SelStart = SelStart; Start_X = Form1->RichEdit1->CaretPos.x; Start_Y = Form1->RichEdit1->CaretPos.y; Form1->RichEdit1->SelStart = SelEnd; End_X = Form1->RichEdit1->CaretPos.x; End_Y = Form1->RichEdit1->CaretPos.y; if ((Start_X==End_X) && (Start_Y==End_Y)){ *Start = *End = 0; return 1; } else{ *Start = Start_Y; *End = End_Y; } } return 0; }
/Edit akari : cpp-Tags hinzugefügt.
-
Hallo
Bitte beim nächsten Mal für Code die cpp-Tags benutzen. sfds
bis bald
akari