Всплывающие подсказки для Memo и RichEdit
СРОЧНО нужна помощь!
Есть задание с которым никак не разберусь: необходимо изобразить всплывающие подсказки для всех текстовых элементов. С ListBox и ComboBox вроде работает. Даже могу определить что мышка повисла над мемо или ричедитом, но НЕ ЗНАЮ как определить _НАД КАКОЙ СТОРОКОЙ_ висит мышка!!!
СРОЧНО нужна помощь!
Прочитай в хэлпах по Win32 о сообщениях
EM_CHARFROMPOS, EM_LINEFROMCHAR и EM_LINEINDEX.
Прочитай в хэлпах по Win32 о сообщениях
EM_CHARFROMPOS, EM_LINEFROMCHAR и EM_LINEINDEX.
Значит так для TRichEdit определять строку над которой зависла мышка научились:
var p:TPoint;
i,j: LongInt;
GetCursorPos(p);
//Получаем экранные координаты указателя мыши
p:= ScreenToClient(p);
//Переводим их в координаты ричэдита
i:=SendMessage(Handle, EM_CHARFROMPOS, 0, LongInt(@p));
//Подставляем их в lparam получаем индекс символа
j:=SendMessage(Handle, EM_LINEFROMCHAR, i, 0);
//индекс символа подставляем в wparam получаем номер строки ! :))
Panel2.Caption:=Inttostr(i) + ' : line -> ' + inttostr(j+1);
К сожалению для TMemo этот код приспособить так и не могу. Индекс символа = -1 (нет его), однако при нажатии мышки строку все таки определяет. А надо без... хех...
Значит так для TRichEdit определять строку над которой зависла мышка научились: <...>
К сожалению для TMemo этот код приспособить так и не могу. Индекс символа = -1 (нет его), однако при нажатии мышки строку все таки определяет. А надо без... хех...
Для Memo такой код и не должен работать. Я проверял, пытался исправить такую дыру в VCL. Просто Memo не использует бибилиотеку RICHEDT32.DLL, в которой как раз и обрабатываются такие сообщения.
Кстати в Delphi для передачи сообщений предпочтительнее юзать Perform заместо SendMessage
К сожалению для TMemo этот код приспособить так и не могу. Индекс символа = -1 (нет его), однако при нажатии мышки строку все таки определяет. А надо без... хех...
Тут идейка появилать: в Memo вроде работает EM_FIRSTVISIBLELINE. Что она возвращает - ясно из названия. Докучи зная высоту шрифта в Memo (можно получить через GetTextMetrix) и позицию курсора (мышки), можно узнать, над какой строкой мы зависли.