Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#3

AW: TMemo; Wort an aktueller Cursorposition auslesen

  Alt 31. Jan 2015, 14:04
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat