Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Delphi XE2 - RichEdit - SelectWordatCaret funktioniert nicht


galagher - Mi 06.06.12 19:42
Titel: Delphi XE2 - RichEdit - SelectWordatCaret funktioniert nicht
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;

 {Wortanfang suchen}
 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? :nixweiss:

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 user profile iconNarses: 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!
http://stackoverflow.com/questions/6339446/delphi-get-the-whole-word-where-the-caret-is-in-a-memo


Hochhaus - Do 07.06.12 12:58

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
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?
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? :nixweiss:



Lies mal meine Beiträge, z.Bsp. http://www.delphi-forum.de/viewtopic.php?t=109515&start=0&postorder=asc
und http://www.delphi-forum.de/viewtopic.php?t=109450&start=0&postorder=asc

Gruss, Hochhaus


galagher - Do 07.06.12 17:24

user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Lies mal meine Beiträge, z.Bsp. http://www.delphi-forum.de/viewtopic.php?t=109515&start=0&postorder=asc
und http://www.delphi-forum.de/viewtopic.php?t=109450&start=0&postorder=asc
Ja, da wurde vieles umgestellt, und Code, der bisher funktionierte, ist nun wertlos...
Ok, RichEdit war schon früher anders: http://www.delphi-forum.de/topic_Automatisch+1310+wenn+die+Zeile+ClientWidth+erreicht_73175,0.html
... aber jetzt ist da ja offenbar nochmal etwas geändert worden.