Wenn ich es nicht zufällig gerade schon fertig vorliegen hätte...
Das müsste auch noch mit älteren Delphi-Versionen laufen. Die Delimiter sind sicher überarbeitungsbedürftig. Bei einem aktuellen Delphi käme hier vielleicht eher System.Character zur Anwendung.
Delphi-Quellcode:
function TForm1.GetWordAtCursor(Memo: TMemo):
string;
var
curLine:
string;
row: Integer;
col: Integer;
wordLength: Integer;
wordStart: Integer;
function IsDelimiter(
const Line:
string;
Index: Integer): Boolean;
const
cWordDelimiters = '
,./?;:`"<>[]{}-=\+|()%@&^$#!~*';
begin
result := (
Index < 1)
or (
Index > Length(Line))
or (Pos(Line[
Index], cWordDelimiters) > 0);
end;
begin
row := Memo.CaretPos.Y;
col := Memo.CaretPos.X;
curLine := Memo.Lines[row];
wordStart := col;
{ falls der Cursor auf einem Delimiter steht, wollen wir das Wort vorher }
if IsDelimiter(curLine, wordStart)
and (wordStart > 1)
then begin
Dec(wordStart);
end;
{ Suche Anfang des Wortes }
wordLength := 0;
while not IsDelimiter(curLine, wordStart)
do begin
Dec(wordStart);
Inc(wordLength);
end;
{ Suche Ende des Wortes }
col := wordStart + wordLength + 1;
while not IsDelimiter(curLine, col)
do begin
Inc(col);
Inc(wordLength);
end;
if wordLength > 0
then begin
result := Copy(curLine, wordStart + 1, wordLength);
end;
end;