TSynEdit Как узнать слово под курсором мыши?

Модератор: Модераторы

TSynEdit Как узнать слово под курсором мыши?

Сообщение DropSoft » 17.10.2018 17:13:43

Собственно сабж.
Мне в событии SynEdit1MouseMove надо вывести хинт, относящийся к текущему слову под курсором мыши.
Есть для этого стандартные средства?
Пока приходит в голову только
Код: Выделить всё
procedure TForm1.SynEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
var
  s : string;
begin
  s := SynEdit1.Lines.Strings[Y div SynEdit1.LineHeight];
  // затем как-то найти слово, содержащее символ на позиции (X div SynEdit1.CharWidth) + 1)
  // и вывести по нему справку.
  SynEdit1.Hint := GetMyHelp(GetMyWord(s, (X div SynEdit1.CharWidth) + 1));
  Application.ActivateHint(Mouse.CursorPos);
end;

Но как-то это очень сложно.
DropSoft
новенький
 
Сообщения: 31
Зарегистрирован: 31.03.2013 13:47:40

Re: TSynEdit Как узнать слово под курсором мыши?

Сообщение Awkward » 17.10.2018 17:55:36

Сложно? я у себя вообще делал так:
Код: Выделить всё
function GetPickedText(mi:TObject=nil; anEdit:TSynEdit=nil):String;
var
  pt:TPoint;
begin
  if anEdit=nil then
    anEdit:=ActiveEditor;

  result:=anEdit.SelText;
  if result='' then
  begin
    if mi<>nil then
    begin
      pt:=anEdit.PixelsToLogicalPos(
          anEdit.ScreenToClient(
          ((mi as TMenuItem).GetParentMenu as TPopupMenu).PopupPoint));
    end
    else
    begin
      pt:=anEdit.LogicalCaretXY;
    end;
    result:=anEdit.GetWordAtRowCol(pt);
  end;
end;
Awkward
новенький
 
Сообщения: 48
Зарегистрирован: 19.01.2017 00:06:47

Re: TSynEdit Как узнать слово под курсором мыши?

Сообщение DropSoft » 17.10.2018 18:37:42

О, похоже GetWordAtRowCol именно то, что надо!

Добавлено спустя 16 часов 10 минут 58 секунд:
Получилось! Может кому пригодится.

Код: Выделить всё
procedure TForm1.SynEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
var
  ln  : integer;
  wrd : string;
begin
  ln := Y div SynEdit1.LineHeight;  // номер строки, если нужен для синтаксического разбора
  // находим слово под курсором
  wrd := SynEdit1.GetWordAtRowCol( Point((X - SynEdit1.Gutter.Width) div SynEdit1.CharWidth + 1, ln + 1));
  SynEdit1.Hint := GetMyHelp(wrd {, ln});        // и выводим по нему свою справку.
  Application.ActivateHint(Mouse.CursorPos);
end;
DropSoft
новенький
 
Сообщения: 31
Зарегистрирован: 31.03.2013 13:47:40

Re: TSynEdit Как узнать слово под курсором мыши?

Сообщение alexs » 01.12.2018 15:28:40

DropSoft
Событие SynEdit.OnShowHint возникает именно перед показом хинта.
вот кусок кода из FBManager-а
Код: Выделить всё
procedure Tfdbm_SynEditorFrame.TextEditorShowHint(Sender: TObject;
  HintInfo: PHintInfo);
var
  S ... : String;
  ...
  CP: TPoint;
begin
  ....
  CP:=TextEditor.PixelsToRowColumn(HintInfo^.CursorPos);
  S:=TextEditor.GetWordAtRowCol(CP);
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TSynEdit Как узнать слово под курсором мыши?

Сообщение Tango » 29.06.2024 11:47:55

Зачем так сложно?

Код: Выделить всё
FindWord:=Syn.GetWordAtRowCol(Syn.CaretXY);
Аватара пользователя
Tango
постоялец
 
Сообщения: 161
Зарегистрирован: 31.05.2012 17:07:30


Вернуться в SynEdit и UniHighlighter

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru