![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| observateur |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 176 Регистрация: 10.6.2006 Репутация: нет Всего: нет |
Прошу помочь всем кто знает как работает принцип программы TranslateIt, кто не знает могу подсказать, что с помощью этой программы можно встретив незнакомое слово в тексте и вам не надо отвлекаться от чтения и искать перевод в словаре, просто подведите указатель мыши к незнакомому слову и тут же получите перевод. Так что если кто знает подскажите пожалуйста как начать эту программу или же какие элементы программирования я должен использовать здесь. Заранее спасибо!
|
|||
|
||||
| NT_AUTHORITY |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Слушай, что я придумал. Смысл сводится к тому, чтобы преобразовать координаты мыши в индекс (ну, понимаешь - индекс символа). Никаких стандартных функций и сообщений я для этого не нашёл поэтому для этого надо:
1. Получить индекс линии. Canvas.GetTextHeight(RichEdit1.Lines[0]) - высота одной линии, чтобы получить текущую линию, надо координату y мыши поделить на эту высоту. 2. Получить индекс символа. Здесь ничего умнее подбора в голову не приходит -
3. От ind выделить слово - посмотреть, где пробелы, и всё! Словами сказать просто, но и на деле реализовать данную вещь на мой взгляд не сложно. Решение это, может быть и грубоватое, но другого ничего нет. Да, и если у RichEdit нет канвы, можно создать свою и присвоить ей Font RichEditа. |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
NT_AUTHORITY, а ты уверен, что в правильном направлении идешь? Я вот, например нет. Когда-то я юзал этой программой и знаю, что она в принципе работает везде: и в браузере и в блокноте и даже на кнопке "Пуск". Напрашивается вариант, что тут идет метод распознавания слова под мышью.
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
В качестве уточнения вопроса. Незнакомые слова мышкой ловим в своем приложении или чужом?
-------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: нет Всего: 6 |
Слово "Пуск" точно задано графически, значит требуется распознавание текста, задача прямо скажем не тривиальная. Вот нашел исходники одной OCR на Delphi: http://dump.ru/files/n/n9162146133 (54 кб) Было еще и полное описание, вот только не найду :( Если упростить условие, например - необходимо выделять слово для перевода, то задача существенно упрощается, достаточно копировать выделенный текст в буфер обмена, а далее выводить перевод под указателем мыши. |
|||
|
||||
| NT_AUTHORITY |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Sunvas, mmvds! Вы чего-то недопонимаете.
Слово "Пуск" задано не графически. При вашем желании я могу вас всех в этом убедить, но в данной теме речь идёт не об этом.
В своём первом посту я привёл лишь общий алгоритм, позволяющий получить слово под мышью, не углубляясь в детали. Насколько я понял, вам нужно сделать это не только в своём приложении, но и в чужом. А раз так, то нужно поставить MouseHook, который в MouseProc вернёт хэндл окна, на котором мышь, её координаты. Зная дескриптор окна, мы можем получить его текст. И дальше будем проверять, контрол мультистрочный или однострочный. Если мультистрочный, то действовать так, как описано выше (только на WinAPI - с помощью сообщений). Если однострочный, то просто переводить текст окна. Вот, собственно, и всё! |
||||
|
|||||
| mmvds |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: нет Всего: 6 |
<оффтоп>
Угу, виноват, в свое время делал замену пуска по следующей статье: Цитата с DelphiWorld
Аналогичная статья есть в DRKB Сейчас нашел в инете способ через замену строки в ресурсах explorer.exe, проверил - прокатило. </оффтоп> По поводу решения, NT_AUTHORITY +1 Вот только с определением нужного текста в блокноте/ворде еще более менее понятно, там можно вычислить символ, а значит и слово, к которому подведен указатель мыши, а как быть например, с браузером, на странице которого,например, куча таблиц? Или я опять что-то не понимаю? |
||||
|
|||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 13 Всего: 111 |
Это условие и следствие никогда не будут верны на 100%. Только 25% -- либо получишь текст либо нет, а возможно и кривой, если будет распознавание текста. В принципе можно согласиться, что у окна (рассматривается понятие «окно» с точки зрения Windows API) может быть текст, но не всегда текст окна является тем текстом, который отображается на экране. При большом желании можно поспорить, если бы форум позволял P. S. К спору готов, но не на форуме |
|||
|
||||
| NT_AUTHORITY |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 7.1.2008 Репутация: нет Всего: нет |
Хм... Не поспоришь... К тому же, окно может иметь полосу прокрутки... Нужно переводить координаты мыши в контекст окна. Ну, а на случай таблиц тоже можно что-нито придумать. К тому же, может быть это и не стоит в условии задачи...
Согласен, но об этом здесь речь не идёт. Ведь основная задача - перевод текста в мультистроковых контролах типа RichEdit'a. |
||||
|
|||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 13 Всего: 111 |
||||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |