Hallo!
Könnt ihr mir sagen, warum diese Funktion unter Delphi XE2 zwar mit einem Memo, aber nicht mit einem RichEdit das richtige Wort selektiert?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function SelectWordatCaret(const CustomMemo: TCustomMemo; iCaretPos: Integer): String; var iStartPos, iEndPos: Integer; sText: String; begin sText := CustomMemo.Text;
for iStartPos := iCaretPos downto 0 do if (sText[iStartPos] in [' ', #10]) then break;
for iEndPos := iStartPos+1 to Length(sText) do if (sText[iEndPos] in [' ', #13]) then break;
with CustomMemo do begin SelStart := iStartPos; SelLength := iEndPos-iStartPos; Result := SelText; end; end; |
Unter D6 lief das noch, jetzt wird das Wort, auf dem das Caret liegt, nur noch in der 1. Zeile, also Lines[0], korrekt selektiert, in allen anderen Zeilen werden Leerzeichen und #13#10 ignoriert und es wird teils über das Zeilenende hinaus selektiert, aber immer in der richtigen SelLength.
Ich schätze, das hat etwas mit #13#10 zu tun?
Was muss ich am Code ändern? Es reicht nicht, TCustomMemo auf TRichEdit usw. zu ändern oder die if-Abfrage auf Leerzeichen und #10 bzw. #13 anders zu gestalten.
Auch AnsiString oder WideString statt String ist Fehlanzeige.
Ich bin ratlos und finde auch mit Google nichts entsprechendes.
Ach ja: Ich rufe das so auf:
SelectWordatCaret(RichEdit1, RichEdit1.SelStart);
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 07.06.2012 um 10:34
//Edit: Google hatte wieder einmal die Lösung, und mit TCustomMemo statt TMemo arbeitet es auch mit TRichEdit!
stackoverflow.com/qu...e-caret-is-in-a-memo
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!