Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Всплывающие подсказки для Memo и RichEdit

14K
26 декабря 2005 года
olexis
4 / / 20.12.2005
Есть задание с которым никак не разберусь: необходимо изобразить всплывающие подсказки для всех текстовых элементов. С ListBox и ComboBox вроде работает. Даже могу определить что мышка повисла над мемо или ричедитом, но НЕ ЗНАЮ как определить _НАД КАКОЙ СТОРОКОЙ_ висит мышка!!!

СРОЧНО нужна помощь!
5
03 января 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by olexis
Есть задание с которым никак не разберусь: необходимо изобразить всплывающие подсказки для всех текстовых элементов. С ListBox и ComboBox вроде работает. Даже могу определить что мышка повисла над мемо или ричедитом, но НЕ ЗНАЮ как определить _НАД КАКОЙ СТОРОКОЙ_ висит мышка!!!

СРОЧНО нужна помощь!


Прочитай в хэлпах по Win32 о сообщениях
EM_CHARFROMPOS, EM_LINEFROMCHAR и EM_LINEINDEX.

14K
05 января 2006 года
olexis
4 / / 20.12.2005
Цитата:
Originally posted by hardcase
Прочитай в хэлпах по 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 (нет его), однако при нажатии мышки строку все таки определяет. А надо без... хех...

5
05 января 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by olexis
Значит так для TRichEdit определять строку над которой зависла мышка научились: <...>

К сожалению для TMemo этот код приспособить так и не могу. Индекс символа = -1 (нет его), однако при нажатии мышки строку все таки определяет. А надо без... хех...


Для Memo такой код и не должен работать. Я проверял, пытался исправить такую дыру в VCL. Просто Memo не использует бибилиотеку RICHEDT32.DLL, в которой как раз и обрабатываются такие сообщения.

Кстати в Delphi для передачи сообщений предпочтительнее юзать Perform заместо SendMessage

5
05 января 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by olexis
К сожалению для TMemo этот код приспособить так и не могу. Индекс символа = -1 (нет его), однако при нажатии мышки строку все таки определяет. А надо без... хех...


Тут идейка появилать: в Memo вроде работает EM_FIRSTVISIBLELINE. Что она возвращает - ясно из названия. Докучи зная высоту шрифта в Memo (можно получить через GetTextMetrix) и позицию курсора (мышки), можно узнать, над какой строкой мы зависли.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог