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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MOUSE, translate 
:(
    Опции темы
observateur
Дата 8.1.2008, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 10.6.2006

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



Прошу помочь всем кто знает как работает принцип программы TranslateIt, кто не знает могу подсказать, что с помощью этой программы можно встретив незнакомое слово в тексте и вам не надо отвлекаться от чтения и искать перевод в словаре, просто подведите указатель мыши к незнакомому слову и тут же получите перевод. Так что если кто знает подскажите пожалуйста как начать эту программу или же какие элементы программирования я должен использовать здесь. Заранее спасибо!

PM MAIL   Вверх
NT_AUTHORITY
Дата 8.1.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 7.1.2008

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



Слушай, что я придумал. Смысл сводится к тому, чтобы преобразовать координаты мыши в индекс (ну, понимаешь - индекс символа).  Никаких стандартных функций и сообщений я для этого не нашёл поэтому для этого надо:
1. Получить индекс линии. Canvas.GetTextHeight(RichEdit1.Lines[0]) - высота одной линии, чтобы получить текущую линию, надо координату y мыши поделить на эту высоту. 
2. Получить индекс символа. Здесь ничего умнее подбора в голову не приходит - 
Код

s := RichEdit1.Lines[index];
ind := 0; w := 0;
while w < x (мышиной) do begin
   w := w + Canvas.GetTextWifth(s[ind]); 
    ind = ind + 1;
end;

3. От ind выделить слово - посмотреть, где пробелы, и всё!

Словами сказать просто, но и на деле реализовать данную вещь на мой взгляд не сложно. Решение это, может быть и грубоватое, но другого ничего нет. Да, и если у RichEdit нет канвы, можно создать свою и присвоить ей Font RichEditа.
PM MAIL   Вверх
Sunvas
Дата 8.1.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



NT_AUTHORITY, а ты уверен, что в правильном направлении идешь? Я вот, например нет. Когда-то я юзал этой программой и знаю, что она в принципе работает везде: и в браузере и в блокноте и даже на кнопке "Пуск". Напрашивается вариант, что тут идет метод распознавания слова под мышью.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
remax
Дата 8.1.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: нет
Всего: 5



В качестве уточнения вопроса. Незнакомые слова мышкой ловим в своем приложении или чужом?


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
mmvds
Дата 8.1.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 22.12.2007

Репутация: нет
Всего: 6



Цитата(Sunvas @  8.1.2008,  21:45 Найти цитируемый пост)
NT_AUTHORITY, а ты уверен, что в правильном направлении идешь? Я вот, например нет. Когда-то я юзал этой программой и знаю, что она в принципе работает везде: и в браузере и в блокноте и даже на кнопке "Пуск". Напрашивается вариант, что тут идет метод распознавания слова под мышью. 

Слово "Пуск" точно задано графически, значит требуется распознавание текста, задача прямо скажем не тривиальная.
Вот нашел исходники одной OCR на Delphi: 
http://dump.ru/files/n/n9162146133 (54 кб)
Было еще и полное описание, вот только не найду :(

Если упростить условие, например - необходимо выделять слово для перевода, то задача существенно упрощается, достаточно копировать выделенный текст в буфер обмена, а далее выводить перевод под указателем мыши.
PM MAIL ICQ   Вверх
NT_AUTHORITY
Дата 9.1.2008, 15:46 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 7.1.2008

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



Sunvas, mmvds! Вы чего-то недопонимаете. 

Цитата

Слово "Пуск" точно задано графически, значит требуется распознавание текста


Слово "Пуск" задано не графически.  При вашем желании я могу вас всех в этом убедить, но в данной теме речь идёт не об этом. 

Цитата

когда-то я юзал этой программой и знаю, что она в принципе работает везде: и в браузере и в блокноте


В своём первом посту я привёл лишь общий алгоритм, позволяющий получить слово под мышью, не углубляясь в детали. Насколько я понял, вам нужно сделать это не только в своём приложении, но и в чужом. А раз так, то нужно поставить MouseHook, который в MouseProc вернёт хэндл окна, на котором мышь, её координаты. Зная дескриптор окна, мы можем получить его текст. И дальше будем проверять, контрол мультистрочный или однострочный. Если мультистрочный, то действовать так, как описано выше (только на WinAPI - с помощью сообщений). Если однострочный, то просто переводить текст окна.

Вот, собственно, и всё!  smile 
PM MAIL   Вверх
mmvds
Дата 9.1.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 22.12.2007

Репутация: нет
Всего: 6



<оффтоп>
Цитата(NT_AUTHORITY @  9.1.2008,  15:46 Найти цитируемый пост)
Слово "Пуск" задано не графически.  При вашем желании я могу вас всех в этом убедить, но в данной теме речь идёт не об этом. 

Угу, виноват, в свое время делал замену пуска по следующей статье:
Цитата с DelphiWorld
Цитата

Для начала создайте какой-нибудь Bitmap, который вы будете натягивать на кнопку [т.к. такого понятия как "заголовок кнопки ПУСК" в действительности не существует], а та надпись, что находится на стартовой кнопке, является рисунком. Создавая рисунок, учитывайте размеры и то, что левая сторона должна быть "плоской", как у нас на рисунке слева, это связано с особенностями наложения....


Аналогичная статья есть в DRKB

Сейчас нашел в инете способ через замену строки в ресурсах explorer.exe, проверил - прокатило.
</оффтоп>

По поводу решения, NT_AUTHORITY +1
Вот только с определением нужного текста в блокноте/ворде еще более менее понятно, там можно вычислить символ, а значит и слово, к которому подведен указатель мыши, а как быть например, с браузером, на странице которого,например, куча таблиц?
Или я опять что-то не понимаю?
PM MAIL ICQ   Вверх
Yanis
Дата 9.1.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(NT_AUTHORITY @  9.1.2008,  16:46 Найти цитируемый пост)
Зная дескриптор окна, мы можем получить его текст.

Это условие и следствие никогда не будут верны на 100%.
Только 25% -- либо получишь текст либо нет, а возможно и кривой, если будет распознавание текста.

Цитата(NT_AUTHORITY @  9.1.2008,  16:46 Найти цитируемый пост)
Если однострочный, то просто переводить текст окна

В принципе можно согласиться, что у окна (рассматривается понятие «окно» с точки зрения Windows API) может быть текст, но не всегда текст окна является тем текстом, который отображается на экране.

Цитата(NT_AUTHORITY @  9.1.2008,  16:46 Найти цитируемый пост)
Слово "Пуск" задано не графически.

При большом желании можно поспорить, если бы форум позволял smile Даже при том условии, что я знаю, что текст задан в ресурсе и является текстом окна…

P. S. К спору готов, но не на форуме smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
NT_AUTHORITY
Дата 9.1.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 7.1.2008

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



Цитата

Вот только с определением нужного текста в блокноте/ворде еще более менее понятно, там можно вычислить символ, а значит и слово, к которому подведен указатель мыши, а как быть например, с браузером, на странице которого,например, куча таблиц?

Хм... Не поспоришь... К тому же, окно может иметь полосу прокрутки... Нужно переводить координаты мыши в контекст окна. Ну, а на случай таблиц тоже можно что-нито придумать. К тому же, может быть это и не стоит в условии задачи...
Цитата

у окна (рассматривается понятие «окно» с точки зрения Windows API) может быть текст, но не всегда текст окна является тем текстом, который отображается на экране.

Согласен, но об этом здесь речь не идёт. Ведь основная задача - перевод текста в мультистроковых контролах типа RichEdit'a.
PM MAIL   Вверх
Yanis
Дата 9.1.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(NT_AUTHORITY @  9.1.2008,  21:30 Найти цитируемый пост)
Ведь основная задача - перевод текста в мультистроковых контролах типа RichEdit'a.

Ну да, возможно так оно и есть. Тут уже автор должен пояснить.
К сожалению не работал с программой «TranslateIt!»…


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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