Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 06.06.12 19:42 
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?

ausblenden 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!
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!
Hochhaus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: 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. www.delphi-forum.de/...=0&postorder=asc
und www.delphi-forum.de/...=0&postorder=asc

Gruss, Hochhaus
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 07.06.12 17:24 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Lies mal meine Beiträge, z.Bsp. www.delphi-forum.de/...=0&postorder=asc
und www.delphi-forum.de/...=0&postorder=asc
Ja, da wurde vieles umgestellt, und Code, der bisher funktionierte, ist nun wertlos...
Ok, RichEdit war schon früher anders: www.delphi-forum.de/...rreicht_73175,0.html
... aber jetzt ist da ja offenbar nochmal etwas geändert worden.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!