[ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 09.06.05 18:17
Оценка:
Прошу выпороть программу и заодно попинать сайт.
Это первая версия в последующих будут добавлены и другие программы с
которыми TranslateIt! сможет работать. Программа будет некоторое время freeware.
А вообще она ориентированна на рынок СНГ, поэтому сайт в зоне ru.

И так описание:

TranslateIt! это уникальный и по-настоящему контекстный англо-русский переводчик.

Принцип работы программы основан на уникальной технологии "One touch capture",
смысл которой заключается в переводе слова простым наведением на него курсора мыши.
Теперь встретив в английском тексте незнакомое слово, Вам не нужно отвлекаться от
чтения и искать перевод в словаре, не надо копировать слово в буфер обмена и вставлять
в другое окно. Просто подведите указатель мыши к незнакомому слову, и Вы тут же
получите перевод.

Сайт программы http://www.translateit.ru
Re: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: byterus Россия  
Дата: 10.06.05 04:00
Оценка:
Здравствуйте, leonidus, Вы писали:

L>... и заодно попинать сайт.


1. <body bgcolor="#FFFFFF">
2. На скриншуте переводится слово "Software", можно было бы подцепить более редкое словечко, ведь именно для этого предназначена ваша программа?
MySQL stored procedure debugging
Re: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: byterus Россия  
Дата: 10.06.05 04:10
Оценка:
Здравствуйте, leonidus, Вы писали:

L>Прошу выпороть программу


Скачал запустил, все работает хорошо, жаль только что в одном IE, будет FireFox?
MySQL stored procedure debugging
Re[2]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 10.06.05 06:07
Оценка:
B>Скачал запустил, все работает хорошо, жаль только что в одном IE, будет FireFox?

Проблема в том, что для FireFox почти нет документации.
Обращаюсь ко всем. Господа программеры, подскажите где можно найти доку по программированию для FireFox?
Re: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: Sergeant Украина www.photomirror.com.ua
Дата: 10.06.05 06:59
Оценка: 1 (1)
Здравствуйте, leonidus, Вы писали:

L>Принцип работы программы основан на уникальной технологии "One touch capture",

L>смысл которой заключается в переводе слова простым наведением на него курсора мыши.
L>Теперь встретив в английском тексте незнакомое слово, Вам не нужно отвлекаться от
L>чтения и искать перевод в словаре, не надо копировать слово в буфер обмена и вставлять
L>в другое окно. Просто подведите указатель мыши к незнакомому слову, и Вы тут же
L>получите перевод.

Хмм... Давно пользуюсь бесплатным переводчиком, который работает как раз по такой технологии: подвел мышку — получил перевод.
http://www.anplex.ru/qdictionary/
Курить я буду, но пить не брошу.
Re[2]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: NightSoft Украина  
Дата: 10.06.05 07:04
Оценка:
Здравствуйте, byterus, Вы писали:

B>Здравствуйте, leonidus, Вы писали:


L>>Прошу выпороть программу


B>Скачал запустил, все работает хорошо, жаль только что в одном IE, будет FireFox?


А вот еще бы Opera Документацию поискать обещаю

А так — весьма
Re[3]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 10.06.05 07:22
Оценка:
NS>А вот еще бы Opera Документацию поискать обещаю

Отлично, если что-то найдете, пишите на kofman[собака]vlink.ru с пометкой TranslateIt!
Re[2]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 10.06.05 07:35
Оценка:
S>Хмм... Давно пользуюсь бесплатным переводчиком, который работает как раз по такой технологии: подвел мышку — S>получил перевод.
S>http://www.anplex.ru/qdictionary/

Да, есть такая программа. Но у TranslateIt! словарь больше и качественней, скоро появятся транскрипция и добавятся специализированные словари (техника, компьютеры, экономика), ничего этого в QDictionary нет. Тем более что наш проект тоже пока бесплатный, так что пользуйтесь на здоровье.

А вообще дискуссии предлагаю перенести на Форум TranslateIt!, я там чаще бываю и смогу оперативней ответить на вопросы.
Re: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: PepperLover  
Дата: 10.06.05 09:13
Оценка:
L>Сайт программы http://www.translateit.ru

ИМХО логотип какой-то невнятный.
Мужик похожий на привидение.
Страшно, аж жуть!


Re[2]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 10.06.05 09:37
Оценка:
PL>ИМХО логотип какой-то невнятный.
PL>Мужик похожий на привидение.
PL>Страшно, аж жуть!

Ну это вроде символизирует упорную работу за компом, он там за ноутом сидит и че-то лабает
Но в общем я вашу мысль понял. А что на счет программы?
Re: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: Зверёк Харьковский  
Дата: 10.06.05 22:25
Оценка:
Леонид, привет!

Нижеследующие выводы сделаты и годового опыта использования QDictionary. Ваш проект мне крайне интересен тем, что в отличие от QDictionary, обещает динамичное развитие

Итак:

Предпосылка: главное использование такого словаря — оставаться "на волне" при чтении иностранного текста.

Направления развития словаря в порядке приоритетности:
1. Поддержка основных "документочитательных" приложений: браузеров (Opera/FireFox), Acrobat'a, MS Office (Word в первую очередь)
2. Поддержка перевода интерфейсов — думаю, как минимум перевод Label'ов — уже будет большим плюсом.
3. Кустомный вид "подсказок-переводов" — оччень сильно его не хватает для отделения лингвистической информации от вариантов перевода
4. Разделение контекстов "я читаю"/"я серфю" — во втором контесте, при лазаниях по всяким меню выпрыгивающие подсказки раздражают кошмарно... Включить/отключить их должно быть можно любым способом — мышей/клавиатурой. Но существенно лучше был бы, возможно, вариант не "отключить вообще", а "увеличить задержку перед появлением". Тогда, наткнувшись при серфинге на непонятный пункт меню — стоит всего лишь задержать над ним мышу.
5. И вот только здесь, really, возникает вопрос развития словаря. Но над ним стоит думать многая думы. Например, словарь Qdictionary совершенно мерзопакостен — как правило, содержит всего 1-2 варианта перевода, зато слово "OS" переводит как "Операционная система — разновидность программ, которая отличнается тем, что..." — и далее 3 строчки словарной статьи. Короче говоря, ИМХО, для данной задачи нужен словарь а) дающий как можно больше вариантов перевода, б) дающий их кратко, в) сортирующий варианты в порядке употребимости (???)

Вот так, вкратце.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
FAQ — це мiй ай-кью!
Re[3]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: PepperLover  
Дата: 11.06.05 02:46
Оценка:
L>Но в общем я вашу мысль понял. А что на счет программы?

Замечательная программа!
А нельзя сделать так, чтобы переводился текст не только в Explorer'е?
В Word, Excel, вообще везде, где навел мышку — получил перевод.
Технически-то это возможно.


Re[4]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 11.06.05 08:31
Оценка:
Здравствуйте, PepperLover, Вы писали:


PL>Замечательная программа!

PL>А нельзя сделать так, чтобы переводился текст не только в Explorer'е?
PL>В Word, Excel, вообще везде, где навел мышку — получил перевод.
PL>Технически-то это возможно.

На счет Word точно проблем нет, на счет Excel надо посмотреть. Большие проблемы с FireFox и Oper`ой, если кто-то нароет инфу — пишите в приват, обсудим и возможно технологию выкупим.
Re[2]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 11.06.05 08:32
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Предпосылка: главное использование такого словаря — оставаться "на волне" при чтении иностранного текста.

Точно!

ЗХ>Направления развития словаря в порядке приоритетности:

ЗХ>1. Поддержка основных "документочитательных" приложений: браузеров (Opera/FireFox), Acrobat'a, MS Office (Word в ЗХ>первую очередь)
Чуть выше я писал на счет проблем с Opera/FireFox, нужна любая инфа котрая поможет делу, что-то действительно стоящее мы готовы купить. Это также касается и Acrobat'a. С Word`ом проблем никаких нет.

ЗХ>2. Поддержка перевода интерфейсов — думаю, как минимум перевод Label'ов — уже будет большим плюсом.

Уже думали. Уже сейчас мы можем реализовать "захват" всего текста скажем из TMenu или messagabox но никак не получается получить именно то слово над которым курсор завис. Так что пока это может работать только для элементов интерфейса с надписыми в одно слово.

ЗХ>3. Кустомный вид "подсказок-переводов" — оччень сильно его не хватает для отделения лингвистической информации от ЗХ>вариантов перевода

Уже работаем. Кстати никто не знает хороших компонентиков для Delphi реализующих подобные "всплывающие окна" ?


ЗХ>4. Разделение контекстов "я читаю"/"я серфю" — во втором контесте, при лазаниях по всяким меню выпрыгивающие ЗХ>подсказки раздражают кошмарно... Включить/отключить их должно быть можно любым способом — мышей/клавиатурой. Но ЗХ>существенно лучше был бы, возможно, вариант не "отключить вообще", а "увеличить задержку перед появлением". ЗХ>Тогда, наткнувшись при серфинге на непонятный пункт меню — стоит всего лишь задержать над ним мышу.

Ну пока можно одним кликом включить/выключить программу (в трее просто щелкните по лампочке), либо в настройках включите перевод по Ctrl, и тогда сможете получить перевод только тогда когда он действительно нужен. А регулируемую временную задержку мы сделаем, спасибо за мысль.



ЭХ>5. И вот только здесь, really, возникает вопрос развития словаря. Но над ним стоит думать многая думы. Например, ЭХ>словарь Qdictionary совершенно мерзопакостен — как правило, содержит всего 1-2 варианта перевода, зато слово "OS" ЭХ>переводит как "Операционная система — разновидность программ, которая отличнается тем, что..." — и далее 3 ЭХ>строчки словарной статьи. Короче говоря, ИМХО, для данной задачи нужен словарь а) дающий как можно больше ЭХ>вариантов перевода, б) дающий их кратко, в) сортирующий варианты в порядке употребимости (???)

Вот вот, мы еще на начальном этапе разработки, понимая что нас скорее всего будут с QDictionary сравнивать, подробно изучили их словарь и пришли к выводу что это полное фуфло, тем более меня удивил тот факт, что после годового! затишья выпустив новую версию 1.2 они ни на байт не изменили словарь. Мы уделяем словарю очень большое внимание и со времением будем уделять все больше и больше.
Re[3]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: Зверёк Харьковский  
Дата: 12.06.05 02:43
Оценка:
Здравствуйте, leonidus, Вы писали:

L>Это также касается и Acrobat'a.

а тут этого нету?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
FAQ — це мiй ай-кью!
Re[3]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: zloiy www.nmzlabs.com
Дата: 12.06.05 08:02
Оценка:
Здравствуйте, leonidus, Вы писали:

L>Уже думали. Уже сейчас мы можем реализовать "захват" всего текста скажем из TMenu или messagabox но никак не получается получить именно то слово над которым курсор завис. Так что пока это может работать только для элементов интерфейса с надписыми в одно слово.


Может я чего не понял, но вот код для TLabel:


procedure MyGetTextExtentPoint32(DC: THandle; Str: PChar; nCount: integer; var Size: TSize);
var
  res  : DWORD;
  Rect : TRect;
begin
  ZeroMemory(@Rect, SizeOf(Rect));
  res := DrawText(DC, Str, nCount, Rect, DT_CALCRECT or DT_EXPANDTABS);
  Size.cy := res;
  Size.cx := Rect.Right;
end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  InitialText : string;
  CurText     : string;
  Size        : TSize;
  i,l,r : integer;
  LeftG, RightG:integer;
begin
  LeftG := 0;
  RightG := 0;
  InitialText := Label1.Caption;
  for i := 1 to Length(InitialText) do begin
    CurText := Copy(InitialText,1,i);
    MyGetTextExtentPoint32(Label1.Canvas.Handle, PChar(CurText), Length(CurText), Size);
    if Size.cx > X then begin // нашли то, что нужно.
      for l := i downto 1 do begin
        if InitialText[l] = ' ' then begin // проверяем только пробелы, добавить по вкусу.
          LeftG := l;
          Break;
        end;
      end;
      for r := i to Length(InitialText) do begin
        if InitialText[r] = ' ' then begin // проверяем только пробелы, добавить по вкусу.
          RightG := r;
          Break;
        end;
      end;
      Break;
    end;
  end;
  Caption := Copy(InitialText, LeftG, RightG-LeftG);
end;


элементарно расширяется для многострочного текста.
Код не проверяет граничные условия и не учитывает некоторые тонкости(вот это — &).
Для других элементов прийдётся немного повозиться.
Re[4]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 12.06.05 10:23
Оценка:
Здравствуйте, zloiy,

Код приведенный вами работает только для своего приложения, нам же нужно находить Label в чужом окне и получать слово над которым в этом Labl`е завис курсор. А вообще лучше пишите в приват, поговорим: kofman[сабака]vlink.ru
Re[5]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: zloiy www.nmzlabs.com
Дата: 13.06.05 01:24
Оценка:
Здравствуйте, leonidus, Вы писали:

L>Здравствуйте, zloiy,


L>Код приведенный вами работает только для своего приложения, нам же нужно находить Label в чужом окне и получать слово над которым в этом Labl`е завис курсор. А вообще лучше пишите в приват, поговорим: kofman[сабака]vlink.ru


Глобально, так глобально:

// Комментарии см. внизу.
//------DLL библиотека с хуком---------
library DllProject;

uses
SysUtils,
Classes,
windows,
Messages;

const
MMFName : PChar = 'MyMMF';
type

PGlobalHookData = ^TGlobalHookData;
TGlobalHookData = packed record
CbtH : HWND;
MyAppWnd : HWND;
end;

var
GlobalHookData : PGlobalHookData;
MMFHandle : THandle;
WM_CBTHook : Cardinal;

procedure MyGetTextExtentPoint32(DC: THandle; Str: PChar; nCount: integer; var Size: TSize);
var
res : DWORD;
Rect : TRect;
begin
ZeroMemory(@Rect, SizeOf(Rect));
res := DrawText(DC, Str, nCount, Rect, DT_CALCRECT or DT_EXPANDTABS);
Size.cy := res;
Size.cx := Rect.Right;
end;

function CBTProc(code : integer; wPara : WPARAM; lPara : LPARAM ) : LRESULT; stdcall;
var
a : array [0..2000] of char;
mhs : PMOUSEHOOKSTRUCT;
p : tpoint;
InitialText : string;
CurText : string;
Size : TSize;
i,l,r : integer;
LeftG,
RightG :integer;
DC,
wnd : THandle;
begin
if code < 0 then begin
Result := CallNextHookEx(GlobalHookData^.CbtH, code, wpara, lpara);
Exit;
end;
if wPara = WM_LBUTTONDOWN then begin
mhs := PMOUSEHOOKSTRUCT(lPara);
p := mhs.pt;
ScreenToClient(mhs.hwnd, p);
wnd := ChildWindowFromPoint(mhs.hwnd, p);
GetWindowText(wnd, a, 2000);
LeftG := 0;
RightG := 0;
InitialText := a;
dc:=GetDC(wnd);
p := mhs.pt;
ScreenToClient(wnd, p);
for i := 1 to Length(InitialText) do begin
CurText := Copy(InitialText,1,i);
MyGetTextExtentPoint32(dc, PChar(CurText), Length(CurText), Size);
if Size.cx > p.X then begin
for l := i downto 1 do begin
if InitialText[l] = ' ' then begin
LeftG := l;
Break;
end;
end;
RightG := Length(InitialText);
for r := i to Length(InitialText) do begin
if InitialText[r] = ' ' then begin
RightG := r;
Break;
end;
end;
Break;
end;
end;
SetWindowText(GlobalHookData.MyAppWnd, PChar(Copy(InitialText, LeftG, RightG-LeftG)));
end;
CallNextHookEx(GlobalHookData^.CbtH, code, wpara, lpara);
Result := 0;
end;

procedure hook(switch : boolean; MainProg : HWND) export; stdcall;
begin
GlobalHookData^.MyAppWnd := MainProg;
if switch then begin
GlobalHookData^.CbtH := SetWindowsHookEx(WH_MOUSE, @CBTProc, HInstance, 0);
end else begin
UnHookWindowsHookEx(GlobalHookData^.CbtH);
end;
end;

procedure OpenGlobalData;
begin
WM_CBTHOOK := RegisterWindowMessage(Pchar('WM_CBTHOOK'));
MMFHandle := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE,
0, SizeOf(TGlobalHookData),MMFName);
GlobalHookData := MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0,
SizeOf(TGlobalHookData));
end;

procedure CloseGlobalData;
begin
UnmapViewOfFile(GlobalHookData);
CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason : DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;

exports hook;

begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
//----Конец DLL библиотеки




//----Основное приложение-----
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

PGlobalHookData = ^TGlobalHookData;
TGlobalHookData = packed record
CbtH : HWND;
MyAppWnd : HWND;
end;

const
MMFName : PChar = 'MyMMF';

var
Form1: TForm1;
MMFHandle : THandle;
WM_CBTHook : Cardinal;
GlobalHookData : PGlobalHookData;
dllhandle : THandle;
hook : procedure (switch : boolean; hMainProg : HWND) stdcall;

procedure LoadHooks;
procedure FreeHooks;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
MMFHandle := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE,
0, SizeOf(TGlobalHookData),MMFName);
GlobalHookData := MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0,
SizeOf(TGlobalHookData));
WM_CBTHOOK := RegisterWindowMessage('WM_CBTHOOK');
LoadHooks;
end;

procedure LoadHooks;
begin
@hook := nil;
dllHandle := LoadLibrary('dllproject.dll');
if dllHandle > HINSTANCE_ERROR then begin
@hook := GetProcAddress(dllHandle, 'hook');
if @hook <> nil then begin
hook(True, form1.handle);
end else begin
ShowMessage(SysErrorMessage(GetLastError));
end;
end;
end;

procedure FreeHooks;
begin
@hook := nil;
@hook := GetProcAddress(dllHandle, 'hook');
hook(False, form1.handle);
FreeLibrary(dllHandle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeHooks;
end;

end.
//-----Конец основного приложения------

Для того, что бы заработало:
1) Создать проект пустой dll библиотеки
2) Заменить её текст текстом прив. выше библиотеки
3) сохранить под именем DllProject.dpr
4) Скомпилировать
5) Создать пустое приложение
6) Заменить код модуля форму кодом прив. выше
7) Скомпилировать
8) Положить DLL библиотеку в папку приложения
9) Запустить приложение
10) Подвести мышку к лабле и нажать левую кнопку. Лабла может быть в любом приложении.
11) на форме основного приложения появиться слово под мышкой

Теперь небольшое отступление:
Это всё не работает для TLabel от Борланда, потому как TLabel это не окно, а нечто эфемерное,
для Windows TLabel не существует.
Для static будет работать отлично. А также частично для GroupBox, CheckBox и т.д..
В коде могут быть ошибки, всмысле не доработки, но всё компилируется.

Подводя итог:
Вам не удастся добиться приемлемого результата таким или подобным способом.
Но есть у меня идея, как Вам помочь.

Можно будет забы(и)ть о(на) Explorer, Fire---кактамего и прочем.
Правда прийдётся поработать, провести пару сотен эксперементов...
Ещё не догадались?
Re[6]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: leonidus  
Дата: 13.06.05 10:26
Оценка:
Здравствуйте, zloiy,

Z>Можно будет забы(и)ть о(на) Explorer, Fire---кактамего и прочем.

Z>Правда прийдётся поработать, провести пару сотен эксперементов...
Z>Ещё не догадались?

Так уж и пару сотен?

Пишите в личку, все решим.
Re[7]: [ПОРКА] TranslateIt! 1.0 for Internet Explorer
От: Igor Sukhov  
Дата: 13.06.05 11:05
Оценка:
Здравствуйте, leonidus, Вы писали:

Не заработало под w2k3 — в трее сидит, но не переводит. Если это by design — то надо его выправлять, так как QDictionary работает без проблем.
* thriving in a production environment *
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.