Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Коодинаты курсора в координаты каретки 
:(
    Опции темы
Delphist
  Дата 23.3.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Возникла следующ. проблема: хочу сделать чтобы при наведении курсора мыши на слово текста хранимого в редакторе подобного TMemo над ним выскакивал hint.
Умеется есть мой класс по отображению hint'a с заданной позицией и сообщением, но сообщение hint'a формируется относительно того на какое слово мы поставили курсор, поэтому я должен узнать строку и столбец в котором находится слово. Но как Перевести коодинаты курсора в координаты каретки (т.е. в строку и столбец).


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
_hunter
Дата 23.3.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



TCustomMemo.CaretPos


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Delphist
  Дата 23.3.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(_hunter @ 23.3.2006, 14:10)
TCustomMemo.CaretPos

CaretPos возращает позицию каретки(курсора клавиатуры), а что мне нужно объясню напримере:
Есть процедура:
Код

  procedure
    TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
  begin
    
    {сюда поступают координаты мыши, например, 133x34}
    {т.е. курсор мыши стоит над словом "редакторе", что
      соотвествует позиции: 3-ья строка 25 - символ вот именно эти данные мне нужно вернуть,
      а лучше всего вернуть слово над котором стоит курсор мыши т.е. слово "редакторе" }
  end;

см. рис. который прикреплен.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  Cursor.JPG 22,71 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
_hunter
Дата 23.3.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



оно и для записи доступно. а потом SelStart -- получиш часть своего слова.потом пробежаться влево/вправо, до разделителя -- получим слово...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Delphist
Дата 23.3.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(_hunter @ 23.3.2006, 15:50)
оно и для записи доступно. а потом SelStart -- получиш часть своего слова.потом пробежаться влево/вправо, до разделителя -- получим слово...

Т.к. я из координат 133x34 получу 3:25?
Может чего я не понимаю - примерчик не мог бы набрасать?!


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Alexeis
Дата 23.3.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Что-то похожее уже обсуждали.

Сошлюсь на справку
Цитата

The EM_CHARFROMPOS message retrieves information about the character closest to a specified point in the client area of an edit control. You can send this message to either an edit control or a rich edit control.


как будто бы оно, но сам не проверял


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Delphist
  Дата 23.3.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(alexeis1 @ 23.3.2006, 16:41)
Что-то похожее уже обсуждали.

Сошлюсь на справку
Цитата

The EM_CHARFROMPOS message retrieves information about the character closest to a specified point in the client area of an edit control. You can send this message to either an edit control or a rich edit control.


как будто бы оно, но сам не проверял

1) Как будет выглядеть SendMessage с этим сообщением?
2) Что непосредственно возвращает это собщение: слово над курсором или координаты курсора в координатах каретки?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Delphist
Дата 23.3.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(alexeis1 @ 23.3.2006, 16:41)

Сошлюсь на справку
The EM_CHARFROMPOS message retrieves information about the character closest to a specified point in the client area of an edit control. You can send this message to either an edit control or a rich edit control.

Проверил я это сообщение - в итоге оно возвращает позицию символа. т.е: в редакторе memo
написал текст:
строка1
строка2 {на данной строке на букву р навёл курсор в итоге должен был получить строка: 2 столбец 3,
а получил строка 12, столбец 0.
Я даже понял как получилось 12: строка1+#13#10+строка2 и р как раз будет 12 символ}

?
Так как же пользоваться этим сообщением?

Код который я использовал для проверки:

Код

procedure
  TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  lResult: integer;
begin

  form1.Caption := 'Координаты курсора в редакторе Memo X: ' + IntToStr(X) +
    '  Y: ' + IntToStr(Y);
  lResult := SendMessage(Memo1.Handle, EM_CHARFROMPOS,
    0, MAKELPARAM(x, y));
  label1.Caption := 'строка: ' + IntToStr(Lo(lResult)) +
    ('  столбец: ') + IntToStr(Hi(lResult));
end;



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
_hunter
Дата 23.3.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Цитата(Delphist @ 23.3.2006, 15:18 Найти цитируемый пост)
Т.к. я из координат 133x34 получу 3:25?
Может чего я не понимаю - примерчик не мог бы набрасать?!

запиши туда 133x34
потом
возьми SelStart.
что будет? ( только текст попроще впиши )

Цитата(Delphist @ 23.3.2006, 16:11 Найти цитируемый пост)
1) Как будет выглядеть SendMessage с этим сообщением?
2) Что непосредственно возвращает это собщение: слово над курсором или координаты курсора в координатах каретки?

так и будет выглядеть:
Код

lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) EM_CHARFROMPOS,      // message ID     (WPARAM) wParam,      // = 0; not used, must be zero    (LPARAM) lParam      // = (LPARAM) () lParam; );  

и возвращает координаты коретки
Добавлено @ 17:34
ты его неправильно использовал.
его на HI и LO - word' ы бить нужно.
можно в отладчике посмотреть


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Delphist
  Дата 23.3.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Всё _hunter проблема решена надо вместо Lo и Hi использовать LoWord и HiWord

Это сообщение отредактировал(а) Delphist - 23.3.2006, 18:07


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Delphist
Дата 24.3.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(_hunter @ 23.3.2006, 17:32)
Код

lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) EM_CHARFROMPOS,      // message ID     (WPARAM) wParam,      // = 0; not used, must be zero    (LPARAM) lParam      // = (LPARAM) () lParam; );  

и возвращает координаты коретки ты его неправильно использовал. его на HI и LO - word' ы бить нужно.
можно в отладчике посмотреть

_hunter возникла новая проблема.
Я прикрепляю исходник, в котором реализовано возращения слова под курсором мыши, в качестве редактора, в котором хранится текст, берется TRichEdit, если я пытаюсь взять вместо TRichEdit'a — TMemo или TfsSyntaxMemo(TfsSyntaxMemo -наследник от TCustomControl), то слово не возвращается. Помоги исправить этот недастаток.

P.S. Если нужен TfsSyntaxMemo — это компонент библиотеки FastReport, то я выложу.


Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  WordInCursor.rar 7,09 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
_hunter
Дата 24.3.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



справка гласит, что это сообщение работает только на виндовых контролах ( edit, RichEdit ). на самоклепах нужно по моей стратегии работать ( если есть поддержка аналогов CaretPos )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alexeis
Дата 24.3.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



_hunter, если в самоклепах это сообщение не перехватывать, а их строить на базе стандартных, то все должно работать аналогично.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
_hunter
Дата 24.3.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



дык и я о том же. но TMemo по иерархии лежит дальше чем TCustomControl. поэтому ( с большой долей вероятности ) можно утверждать что самоклеп склепан на самоклепном рисовальщике [ о как завернул... ]


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Delphist
Дата 24.3.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(_hunter @ 24.3.2006, 13:08)
справка гласит, что это сообщение работает только на виндовых контролах ( edit, RichEdit ). на самоклепах нужно по моей стратегии работать ( если есть поддержка аналогов CaretPos )

Обзор слов я хочу заточить под TfsSyntaxMemo - компонент библиотеки FastReport. Если она(там есть исходники TfsSyntaxMemo) нужна я могу выложить.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.