| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > MOUSE |
| Автор: observateur 8.1.2008, 08:21 |
| Прошу помочь всем кто знает как работает принцип программы TranslateIt, кто не знает могу подсказать, что с помощью этой программы можно встретив незнакомое слово в тексте и вам не надо отвлекаться от чтения и искать перевод в словаре, просто подведите указатель мыши к незнакомому слову и тут же получите перевод. Так что если кто знает подскажите пожалуйста как начать эту программу или же какие элементы программирования я должен использовать здесь. Заранее спасибо! |
| Автор: NT_AUTHORITY 8.1.2008, 21:31 | ||
| Слушай, что я придумал. Смысл сводится к тому, чтобы преобразовать координаты мыши в индекс (ну, понимаешь - индекс символа). Никаких стандартных функций и сообщений я для этого не нашёл поэтому для этого надо: 1. Получить индекс линии. Canvas.GetTextHeight(RichEdit1.Lines[0]) - высота одной линии, чтобы получить текущую линию, надо координату y мыши поделить на эту высоту. 2. Получить индекс символа. Здесь ничего умнее подбора в голову не приходит -
3. От ind выделить слово - посмотреть, где пробелы, и всё! Словами сказать просто, но и на деле реализовать данную вещь на мой взгляд не сложно. Решение это, может быть и грубоватое, но другого ничего нет. Да, и если у RichEdit нет канвы, можно создать свою и присвоить ей Font RichEditа. |
| Автор: Sunvas 8.1.2008, 21:45 |
| NT_AUTHORITY, а ты уверен, что в правильном направлении идешь? Я вот, например нет. Когда-то я юзал этой программой и знаю, что она в принципе работает везде: и в браузере и в блокноте и даже на кнопке "Пуск". Напрашивается вариант, что тут идет метод распознавания слова под мышью. |
| Автор: remax 8.1.2008, 21:46 |
| В качестве уточнения вопроса. Незнакомые слова мышкой ловим в своем приложении или чужом? |
| Автор: NT_AUTHORITY 9.1.2008, 15:46 | ||||
Sunvas, mmvds! Вы чего-то недопонимаете.
Слово "Пуск" задано не графически. При вашем желании я могу вас всех в этом убедить, но в данной теме речь идёт не об этом.
В своём первом посту я привёл лишь общий алгоритм, позволяющий получить слово под мышью, не углубляясь в детали. Насколько я понял, вам нужно сделать это не только в своём приложении, но и в чужом. А раз так, то нужно поставить MouseHook, который в MouseProc вернёт хэндл окна, на котором мышь, её координаты. Зная дескриптор окна, мы можем получить его текст. И дальше будем проверять, контрол мультистрочный или однострочный. Если мультистрочный, то действовать так, как описано выше (только на WinAPI - с помощью сообщений). Если однострочный, то просто переводить текст окна. Вот, собственно, и всё! |
| Автор: mmvds 9.1.2008, 16:54 | ||||
<оффтоп>
Угу, виноват, в свое время делал замену пуска по следующей статье: http://www.delphiworld.narod.ru/base/change_start_button_caption.html
Аналогичная статья есть в http://www.drkb.ru/ Сейчас нашел в инете способ через замену строки в ресурсах explorer.exe, проверил - прокатило. </оффтоп> По поводу решения, NT_AUTHORITY +1 Вот только с определением нужного текста в блокноте/ворде еще более менее понятно, там можно вычислить символ, а значит и слово, к которому подведен указатель мыши, а как быть например, с браузером, на странице которого,например, куча таблиц? Или я опять что-то не понимаю? |
| Автор: Yanis 9.1.2008, 20:15 |
Это условие и следствие никогда не будут верны на 100%. Только 25% -- либо получишь текст либо нет, а возможно и кривой, если будет распознавание текста. В принципе можно согласиться, что у окна (рассматривается понятие «окно» с точки зрения Windows API) может быть текст, но не всегда текст окна является тем текстом, который отображается на экране. При большом желании можно поспорить, если бы форум позволял P. S. К спору готов, но не на форуме |
| Автор: NT_AUTHORITY 9.1.2008, 20:30 | ||||
Хм... Не поспоришь... К тому же, окно может иметь полосу прокрутки... Нужно переводить координаты мыши в контекст окна. Ну, а на случай таблиц тоже можно что-нито придумать. К тому же, может быть это и не стоит в условии задачи...
Согласен, но об этом здесь речь не идёт. Ведь основная задача - перевод текста в мультистроковых контролах типа RichEdit'a. |
| Автор: Yanis 9.1.2008, 20:58 | ||
Ну да, возможно так оно и есть. Тут уже автор должен пояснить. К сожалению не работал с программой «TranslateIt!»… |