Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить слово под курсором в RichEdit

Delphi , Компоненты и Классы , TMemo и TRichEdit

Получить слово под курсором в RichEdit


uses 
 RichEdit; 
  
procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; 
  X, Y: Integer); 
var 
  iCharIndex, iLineIndex, iCharOffset, i, j: Integer; 
  Pt: TPoint; 
  s: string; 
begin 
  with TRichEdit(Sender) do 
  begin 
    Pt := Point(X, Y); 
    // Get Character Index from word under the cursor 
    iCharIndex := Perform(Messages.EM_CHARFROMPOS, 0, Integer(@Pt)); 
    if iCharIndex < 0 then Exit; 
    // Get line Index 
    iLineIndex  := Perform(EM_EXLINEFROMCHAR, 0, iCharIndex); 
    iCharOffset := iCharIndex - Perform(EM_LINEINDEX, iLineIndex, 0); 
    if Lines.Count - 1 < iLineIndex then Exit; 
    // store the current line in a variable 
    s := Lines[iLineIndex]; 
    // Search the beginning of the word 
    i := iCharOffset + 1; 
    while (i > 0) and (s[i] <> ' ') do Dec(i); 
    // Search the end of the word 
    j := iCharOffset + 1; 
    while (j <= Length(s)) and (s[j] <> ' ') do Inc(j); 
    // Display Text under Cursor 
    Caption := Copy(s, i, j - i); 
  end; 
end;  

Перевод контента на русский язык:

Это фрагмент кода Delphi, который предназначен для извлечения слова под курсором в RichEdit-контроле. Вот подробное описание того, что код делает:

  1. Процедура RichEdit1MouseMove вызывается при перемещении мыши над RichEdit-контролем.
  2. Она использует различные методы и сообщения RichEdit для определения индекса символа, индекса строки и смещения символа слова под курсором.
  3. Затем код извлекает текст текущей строки из коллекции строк RichEdit с помощью Lines[iLineIndex].
  4. Код ищет начало и конец слова, перебирая символы в тексте строки. Начало находит, уменьшая счетчик (i), пока не найдет пробельный символ, а конец находит, увеличивая другой счетчик (j), пока не найдет пробельный символ.
  5. В конце код отображает извлеченное слово как заголовок формы с помощью Caption := Copy(s, i, j - i).

Вот некоторые предложения по улучшению:

  1. Вместо хранения текста строки в переменной s рассмотрите использование временного буфера строк для избежания ненужного выделения и освобождения памяти.
  2. Алгоритмы поиска начала и конца слова можно оптимизировать, используя более эффективные методы, такие как поиск не пробельных символов вместо перебора всех символов.
  3. Рассмотрите добавление обработки ошибок для случаев, когда курсор находится вне RichEdit-контроля или при получении индекса символа, индекса строки или текста строки fails.

Вот альтернативное решение, использующее регулярное выражение для извлечения слова под курсором:

uses
  RegExpr;

procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  Re: TRegExpr;
  Match: TMatch;
begin
  Re := TRegExpr.Create('\w+'); // match one or more word characters
  try
    Re.CaseSensitive := False;
    if Re.IsMatch(RichEdit1.Text, Point(X, Y)) then
      Caption := Re.Match[0].Value; // retrieve the matched text (i.e., the word)
  finally
    Re.Free;
  end;
end;

В этом коде используется компонент TRegExpr для создания регулярного выражения, которое.match one or more word characters (\w+). Затем код проверяет, есть ли совпадение в позиции курсора с помощью Re.IsMatch. Если есть, то он извлекает совпавший текст и отображает его как заголовок. Пожалуйста, обратите внимание, что это решение предполагает, что RichEdit-контрол имеет фокус при вызове события перемещения мыши.

Статья описывает алгоритм для получения слова, которое находится под курсором в RichEdit-компоненте при помощи методов EM_CHARFROMPOS и EM_EXLINEFROMCHAR.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TMemo и TRichEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-13 11:02:31/0.006371021270752/0