1 (изменено: hrnvam, 2011-03-28 14:46:16)

Тема: AHK: Переводчик онлайн

Здравствуйте.
Здесь интересный скрипт (переводчик) http://forum.script-coding.com/viewtopic.php?id=4492
Подскажите как сделать текст белым и фон синим + горячею клавишу поменять на "T" вместо "CTRL+C+C" (если это возможно)

Пример (прога Client for Google Translate - переводит только текст в браузере)
http://s43.radikal.ru/i101/1103/ff/6f12a339d211.png

2 (изменено: Grey, 2011-05-16 22:11:07)

Re: AHK: Переводчик онлайн

hrnvam пишет:

...горячею клавишу поменять на "T" вместо "CTRL+C+C" (если это возможно)

Действительно, пробовал изменить на любое другое сочетание - не работает.

hrnvam пишет:

...как сделать текст белым и фон синим

Где-то я видел пример оформления цвета фона и текста тултипа в не зависимости от установленных цветов операционки, только после чистки форума не могу найти (искомое - AHK: изменение цвета фона ToolTip).

3 (изменено: hrnvam, 2011-05-17 14:36:28)

Re: AHK: Переводчик онлайн

Есть кто в этом шарит?

4

Re: AHK: Переводчик онлайн

Напишу, как будет время.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5

Re: AHK: Переводчик онлайн

Жду

6

Re: AHK: Переводчик онлайн

В таком виде можно выбрать горячую клавишу, цвет текста и фона:

;#NoTrayIcon    ; не отображать иконку скрипта в трее
;--------------------------------------------------
; Translate text using translate.google.com
; by Mikhail Kuropyatnikov (micdelt@mail.ru)
;
; доработано teadrinker (dfiveg@mail.ru):
; выбор горячей клавиши
; выбор цвета фона и текста в ToolTip'е
;--------------------------------------------------

#NoEnv
SetBatchLines, -1

lang1 = en
lang2 = ru

ColorBack = 0x313A47   ; цвет фона в RGB
ColorText = 0xFFFFFF   ; цвет текста в RGB

HotKey = vk54   ; T, но лучше изменить на ^!vk54 (Ctrl+Alt+T),
                ; чтобы можно было пользоваться Т как обычно

HotKey, %HotKey%, Translate, On
Return

Translate:
   Clipboard = 
   SendInput, ^{vk43}
   ClipWait, 2
   if ErrorLevel
   {
      MsgBox, Буфер обмена пуст!
      Return
   }
   Translate(lang1, lang2)
   Return

Translate(to,anti)
{
   global hTT, ColorBack, ColorText
   use_anti = 0
   translate_to := to
   if clipboard =
       return

   Transform, unicodeClipboard, Unicode
anti_translate:
   url := "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="
            . uriEncode(unicodeClipboard) . "&langpair=%7C" . translate_to

   ; simulate UrlDownloadToVAR
   UrlDownloadToFile, %url%, %A_ScriptDir%\translate.html
   FileRead, json_trans, %A_ScriptDir%\translate.html
   json_trans := UTF82Ansi(json_trans)

   rgxText = \Q{"translatedText":"\E(?P<Text>.*)\"\,
   rgxDetectedLanguage = \Q"detectedSourceLanguage":"\E(?P<DetectedLanguage>.*)\"\}
   rgxDetails = \Q"responseDetails": "\E(?P<Details>.*)\"\,
   rgxStatus = \Q"responseStatus": \E(?P<Status>\d*)

   RegExMatch(json_trans,rgxText,trans)
   RegExMatch(json_trans,rgxDetails,trans)
   RegExMatch(json_trans,rgxStatus,trans)
   RegExMatch(json_trans,rgxDetectedLanguage,trans)

   if transStatus = 200
   {
      if (transDetectedLanguage = to and translate_to <> anti)
      {
         translate_to := anti
         goto anti_translate
      }

      t := UnHTM(UnSlashUnicode(transText))
      ; split long line to smaller lines about 40-50 symbols length
      t := RegExReplace(t,".{40,50}(\s)","$0`n")
      if transDetectedLanguage =
      {
         WinClose, ahk_id %hTT%
         hTT := TrackToolTip(t, "", 0, ColorBack, ColorText)
      }
      else
      {
         WinClose, ahk_id %hTT%
         hTT := TrackToolTip(transDetectedLanguage ">" translate_to ":" t, "", 0, ColorBack, ColorText)
      }

      ; copy result to clipboard
      Clipboard := t
   }
   else
   {
      WinClose, ahk_id %hTT%
      hTT := TrackToolTip(transDetails, "", 0, ColorBack, ColorText)
   }
}

~LButton:: ; Remove tooltip left click
WinClose, ahk_id %hTT%
return

;---------------------------------------
; Convert strings
;---------------------------------------

/*
CP_ACP   = 0
CP_OEMCP = 1
CP_MACCP = 2
CP_UTF7  = 65000
CP_UTF8  = 65001
*/

UTF82Ansi(zString)
{
   Ansi2Unicode(zString, wString, 65001)
   Unicode2Ansi(wString, sString, 0)
   Return sString
}

Ansi2Unicode(ByRef sString, ByRef wString, CP = 0)
{
     nSize := DllCall("MultiByteToWideChar"
      , "Uint", CP
      , "Uint", 0
      , "Uint", &sString
      , "int",  -1
      , "Uint", 0
      , "int",  0)

   VarSetCapacity(wString, nSize * 2)

   DllCall("MultiByteToWideChar"
      , "Uint", CP
      , "Uint", 0
      , "Uint", &sString
      , "int",  -1
      , "Uint", &wString
      , "int",  nSize)
}

Unicode2Ansi(ByRef wString, ByRef sString, CP = 0)
{
     nSize := DllCall("WideCharToMultiByte"
      , "Uint", CP
      , "Uint", 0
      , "Uint", &wString
      , "int",  -1
      , "Uint", 0
      , "int",  0
      , "Uint", 0
      , "Uint", 0)

   VarSetCapacity(sString, nSize)

   DllCall("WideCharToMultiByte"
      , "Uint", CP
      , "Uint", 0
      , "Uint", &wString
      , "int",  -1
      , "str",  sString
      , "int",  nSize
      , "Uint", 0
      , "Uint", 0)
}

;-------------------------------------------------
; HTML encode/decode
;------------------------------------------------

UriEncode(str)
{ ; v 0.3 / (w) 24.06.2008 by derRaphael / zLib-Style release
   b_Format := A_FormatInteger
   data := ""
   SetFormat,Integer,H
   Loop,Parse,str
      if ((Asc(A_LoopField)>0x7f) || (Asc(A_LoopField)<0x30) || (asc(A_LoopField)=0x3d))
         data .= "%" . ((StrLen(c:=SubStr(ASC(A_LoopField),3))<2) ? "0" . c : c)
      Else
         data .= A_LoopField
   SetFormat,Integer,%b_format%
   return data
}

UriDecode(str)
{ ; v 0.1 / (w) 28.06.2008 by derRaphael / zLib-Style release
   Loop,Parse,str,`%
      txt := (A_Index=1) ? A_LoopField : txt chr("0x" substr(A_LoopField,1,2)) SubStr(A_LoopField,3)
   return txt
}

UnHTM( HTM ) { ; Remove HTML formatting / Convert to ordinary text     by SKAN 19-Nov-2009
 Static HT     ; Forum Topic: www.autohotkey.com/forum/topic51342.html
 IfEqual,HT,,   SetEnv,HT, % "&aacutea&acirca&acute?&aelig?&agravea&amp&aringa&atildea&au"
 . "mla&bdquo„&brvbar¦&bull•&ccedilc&cedil?&cent?&circ?&copy©&curren¤&dagger†&dagger‡&deg"
 . "°&divide?&eacutee&ecirce&egravee&eth?&eumle&euro?&fnof?&frac12?&frac14?&frac34?&gt>&h"
 . "ellip…&iacutei&icirci&iexcl?&igravei&iquest?&iumli&laquo«&ldquo“&lsaquo‹&lsquo‘&lt<&m"
 . "acr?&mdash—&microµ&middot·&nbsp &ndash–&not¬&ntilden&oacuteo&ocirco&oelig?&ograveo&or"
 . "df?&ordm?&oslasho&otildeo&oumlo&para¶&permil‰&plusmn±&pound?&quot""&raquo»&rdquo”&reg"
 . "®&rsaquo›&rsquo’&sbquo‚&scarons&sect§&shy&sup1?&sup2?&sup3?&szlig?&thorn?&tilde?&tim"
 . "es?&trade™&uacuteu&ucircu&ugraveu&uml?&uumlu&yacutey&yen?&yumly"
 TXT := RegExReplace( HTM,"<[^>]+>" )               ; Remove all tags between  "<" and ">"
 Loop, Parse, TXT, &`;                              ; Create a list of special characters
   L := "&" A_LoopField ";", R .= (!(A_Index&1)) ? ( (!InStr(R,L,1)) ? L:"" ) : ""
 StringTrimRight, R, R, 1
 Loop, Parse, R , `;                                ; Parse Special Characters
  If F := InStr( HT, A_LoopField )                  ; Lookup HT Data
    StringReplace, TXT,TXT, %A_LoopField%`;, % SubStr( HT,F+StrLen(A_LoopField), 1 ), All
  Else If ( SubStr( A_LoopField,2,1)="#" )
    StringReplace, TXT, TXT, %A_LoopField%`;, % Chr(SubStr(A_LoopField,3)), All
Return RegExReplace( TXT, "(^\s*|\s*$)")            ; Remove leading/trailing white spaces
}

UnSlashUnicode(s)
{
  ; unslash unicode sequences like \u0026
  ; by Mikhail Kuropyatnikov 2009 (micdelt@mail.ru)
   rx = \\u([0-9a-fA-F]{4})
   pos = 0

   loop
   {
   pos := RegExMatch(s,rx,m,pos+1)
   if (pos = 0)
      break
   StringReplace, s, s, %m%, % Chr("0x" . SubStr(m,3,4))
   }

   return s
}

TrackToolTip( sText
            , sTitle = ""
            , h_icon = 0
            , nColorBack = 0xFFFFE1
            , nColorText = 0
            , BallonTip = 0
            , x = ""   ; координаты, если не указаны, то вблизи курсора
            , y = "" )
{
   ; BalloonTip — это ToolTip с хвостиком
   ; h_icon — 0: None, 1:Info, 2: Warning, 3: Error, n > 3: предполагается hIcon.

   TTS_NOPREFIX := 2, TTS_ALWAYSTIP := 1, TTS_BALLOON := 0x40, TTS_CLOSE := 0x80

   hWnd := DllCall("CreateWindowEx", UInt, WS_EX_TOPMOST := 8
                                   , Str, "tooltips_class32", Str, ""
                                   , UInt, TTS_NOPREFIX|TTS_ALWAYSTIP|TTS_CLOSE|(BallonTip ? TTS_BALLOON : 0)
                                   , Int, 0, Int, 0, Int, 0, Int, 0
                                   , UInt, 0, UInt, 0, UInt, 0, UInt, 0)
   if (xtt = "" || ytt = "")
   {
      CoordMode, Mouse
      MouseGetPos, xtt, ytt
      xtt := x = "" ? xtt + 10 : x
      yyy := y = "" ? ytt + 10 : y
   }

   NumPut(VarSetCapacity(TOOLINFO, 40), TOOLINFO)
   NumPut(0x20, TOOLINFO, 4)      ; TTF_TRACK = 0x20
   NumPut(&sText, TOOLINFO, 36)

   DHW := A_DetectHiddenWindows
   DetectHiddenWindows, On
   WinWait, ahk_id %hWnd%

   SendMessage, 1048,, 500         ; TTM_SETMAXTIPWIDTH
   SendMessage, 1028,, &TOOLINFO   ; TTM_ADDTOOL
   SendMessage, 1043, RGB_to_BGR(nColorBack)   ; TTM_SETTIPBKCOLOR
   SendMessage, 1044, RGB_to_BGR(nColorText)   ; TTM_SETTIPTEXTCOLOR
   SendMessage, 1056 + (A_IsUnicode ? 1 : 0), h_icon, &sTitle      ; TTM_SETTITLEA и TTM_SETTITLEW
   SendMessage, 1036 + (A_IsUnicode ? 45 : 0),, &TOOLINFO     ; TTM_UPDATETIPTEXTA и TTM_UPDATETIPTEXTW
   SendMessage, 1042,, xtt|(ytt<<16)   ; TTM_TRACKPOSITION
   SendMessage, 1041, 1, &TOOLINFO ; TTM_TRACKACTIVATE

   WinGetPos,,, W, H
   if (xtt + W + 10 > A_ScreenWidth || ytt + H + 10 > A_ScreenHeight)
   {
      WinHide
      xtt := xtt + W + 10 > A_ScreenWidth ? A_ScreenWidth - W - 10 : xtt
      ytt := ytt + H + 10 > A_ScreenHeight ? A_ScreenHeight - H - 10 : ytt
      SendMessage, 1042,, xtt|(ytt<<16)   ; TTM_TRACKPOSITION
      WinShow
   }

   DetectHiddenWindows, % DHW
   Return hWnd
}

RGB_to_BGR(RGB)
{
   CurrentFormat := A_FormatInteger
   SetFormat, IntegerFast, H
   C := SubStr("0x000000", 1, -(StrLen(RGB+0) - 2)) . SubStr(RGB+0, 3)
   BGR := RegExReplace(C, "0x(..)(..)(..)", "0x$3$2$1")
   SetFormat, IntegerFast, %CurrentFormat%
   Return BGR
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7 (изменено: Grey, 2011-05-21 13:50:46)

Re: AHK: Переводчик онлайн

ColorBack = 0x313A47   ; цвет фона в RGB
ColorText = 0xFFFFFF   ; цвет текста в RGB

Очень удобный переводчик, пользуюсь им ещё взяв с той темы, а тут апдэйт - спасибо! Правда заданные в скрипте цвет фона и цвет текста для тултипа у меня системные (W7).

8

Re: AHK: Переводчик онлайн

Так ты можешь другие задать! Или ты в том смысле, что цвета не меняются?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

9

Re: AHK: Переводчик онлайн

teadrinker пишет:

Или ты в том смысле, что цвета не меняются?

Я про то, что какой не задай цвет, а всё равно будет отображаться как задано в теме операционки.

10

Re: AHK: Переводчик онлайн

Ремарка к сообщениям TTM_SETTIPBKCOLOR и TTM_SETTIPTEXTCOLOR:

When visual styles are enabled, this message has no effect.

Возможно, в этом проблема.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

11

Re: AHK: Переводчик онлайн

Вы правы, в упрощенной теме (не прозрачные окантовки окон) тултип имеет цвета отличные от системных.

12

Re: AHK: Переводчик онлайн

ребят я просто в шоке, очень удобная штука! спасибо тому кто придумал!

13 (изменено: Grey, 2012-01-09 02:54:41)

Re: AHK: Переводчик онлайн

Досадная строка раздражает, когда пытаешься воспользоваться переводчиком:

Suspected Terms of Service Abuse. Please see http://code.google.com/apis/errors

Гуголь поставил на коммерческие рельсы свой переводчик, и теперь 1000000 символов стоит 20$. В общем, предлагаю альтернативу, отписывайте свои багрепорты :

#NoEnv
#SingleInstance, Force
DetectHiddenWindows, On
CoordMode, Mouse
SetBatchLines, -1
VarSetCapacity(TRACKMOUSEEVENT, 16, 0)
NumPut(16, TRACKMOUSEEVENT, 0) ; cbSize
NumPut(3, TRACKMOUSEEVENT, 4) ; dwFlags
NumPut(1, TRACKMOUSEEVENT, 12) ; dwHoverTime
Tracking:=False, TextColor:="cBlue"
TipText:=XPos:=YPos:=0, OffXPos:=OffYPos:=35
TipBackColor:=0x808080, TipForeColor:=0xC0C0C0
VarSetCapacity(TOOLINFO, 44, 0), NumPut(44, TOOLINFO, 0)
NumPut(0xA0, TOOLINFO, 4) ; TTF_TRACK+TTF_ABSOLUTE
NumPut(hToolTip, TOOLINFO, 12), NumPut(&TipText, TOOLINFO, 36)
TipWidth:=A_ScreenWidth/3, hToolTip:=CreateToolTip()
DirectLang1:="auto", DirectLang2:="en", DirectLang3:="ru"
PostMessage, 0x411,, &TOOLINFO,, % "ahk_id"hToolTip ; TTM_TRACKACTIVATE
Menu, Tray, NoStandard
Menu, Tray, Icon, shell32.dll, 14
Menu, Tray, Tip, Online translator
Menu, Tray, Add, &About, About
Menu, Tray, Add
Menu, Tray, Add, &Exit (Tilde+Esc), ExitScript
OnMessage(0x404, "WM_LBUTTONUP") ; WM_USER+4
Return

~vkA3:: ; rctrl
   If IsPaused Or IsAbout
      Return
   Else If (!GetKeyState("vk04", "P") ; mmb
   And A_TimeSincePriorHotkey<=500
   And A_PriorHotkey="~vkA3")
      Translate(DirectLang1, DirectLang3)
   Else If (GetKeyState("vk04", "P")
   And A_TimeSincePriorHotkey<=500
   And A_PriorHotkey="~vkA3")
      Translate(DirectLang3, DirectLang2)
   KeyWait, vkA3
   Return

~LButton::
   If IsPaused Or IsAbout
      Return
   Else If !GetKeyState("vkA3", "P")
      StopTimer(), OnWork:=False
   Return

TrackingCursor:
   MouseGetPos, XPosAbs, YPosAbs
   If (XPos!=XPosAbs Or YPos!=YPosAbs)
   {
      XPos:=XPosAbs, YPos:=YPosAbs
      SendMessage, 0x41E,, &TOOLINFO,, % "ahk_id"hToolTip ; TTM_GETBUBBLESIZE
      Width:=ErrorLevel&0xFFFF, Height:=ErrorLevel>>16
      CurXPos:=XPosAbs, CurYPos:=YPosAbs
      If (CurXPos+OffXPos+Width>A_ScreenWidth)
         CurXPos-=(Width+OffXPos)
      Else
         CurXPos+=OffXPos
      If (CurYPos+OffYPos+Height>A_ScreenHeight)
         CurYPos-=(Height+OffYPos)
      Else
         CurYPos+=OffYPos
      PostMessage, 0x412,, (CurXPos|CurYPos<<16),
                 , % "ahk_id"hToolTip ; TTM_TRACKPOSITION
   }
   SendMessage, 0x413, TipBackColor,,
              , % "ahk_id"hTooltip ; TTM_SETTIPBKCOLOR
   SendMessage, 0x414, TipForeColor^0xFFFFFF,,
              , % "ahk_id"hTooltip ; TTM_SETTipForeColor
   Return

About:
   IsAbout:=True
   If !Paused
   {
      Menu, Tray, Icon, shell32.dll, 28
      StopTimer()
   }
   Gui, GUI1: Font, Bold
   Gui, GUI1: Add, Text
      , x32 y30 w140 h20 Center
      , Online translator
   Gui, GUI1: Font
   Gui, GUI1: Add, Text
      , x32 y50 w140 h20 Center
      , Made using AutoHotkey
   Gui, GUI1: Font, Underline cBlue
   Gui, GUI1: Add, Text
      , x24 y90 w156 h20 gAHKHome HwndGUIhWnd Center
      , www.autohotkey.com
   Gui, GUI1: Font
   Gui, GUI1: Add, GroupBox, x22 y10 w160 h110
   Gui, GUI1: -MinimizeBox -Resize HwndGUINamehWnd
   Gui, GUI1: Show, Center h135 w205, About
   hHandCursor:=DllCall("LoadCursor", "UInt", 0, "Int", 32649) ; IDC_HAND
   DllCall("SetClassLong", "UInt", GUIhWnd, "Int", -12, "UInt", hHandCursor)
   NumPut(GUINamehWnd, TRACKMOUSEEVENT, 8) ; hwndTrack
   OnMessage(0x200, "WM_MOUSEMOVE"), OnMessage(0x2A1, "WM_MOUSEHOVER")
   OnMessage(0x2A3, "WM_MOUSELEAVE")
   Return

AHKHome:
   Run, http://www.autohotkey.com,, UseErrorLevel
   Return

Gui1GuiClose:
   Gui, GUI1: Destroy
   IsAbout:=False
   If !IsPaused
      Menu, Tray, Icon, shell32.dll, 14
   Return

~vkC0 & Esc::
ExitScript:
   PostMessage, 0x405,, &TOOLINFO,
              , % "ahk_id"hToolTip ; TTM_DELTOOLA
   DllCall("DestroyWindow", "UInt", hToolTip)
   ExitApp

Translate(From, To)
{
   global
   Clipboard:=TransText:=""
   Send, ^{Insert} ; ctrl+ins
   ClipWait, 2
   If ErrorLevel
   {
      MsgBox, 786448, Error, Clipboard is empty!, 1
      Return
   }
   Transform, UnicodeClipboard, Unicode
   URL:="http://translate.google.com/translate_a/t?client=a&text="
      . UriEncode(UnicodeClipboard) . "&sl=" . From . "&tl=" . To
   URLDownloadToFile, % URL, % A_ScriptDir "\translate.html"
   FileRead, JSON_Trans, % A_ScriptDir "\translate.html"
   StringReplace, JSON_Trans, JSON_Trans, \r\n,`r`n, All
   StringReplace, JSON_Trans, JSON_Trans, \", ", All
   RetrievedDirectLang:=JSON(JSON_Trans, "src")
   ElapsedTime:=JSON(JSON_Trans, "server_time")
   Loop
   {
      Sentence:=JSON(JSON_Trans, "sentences["(A_Index-1)"].trans")
      If Sentence
         TransText.=Sentence
      Else
         Break
   }
   TipText:=Chr(0x95)" "RetrievedDirectLang ">"To
                              . " (elapsed time: "ElapsedTime "ms) "Chr(0x95)
                              . "`n"TransText
   OnWork:=True, SetToolTipText(&TipText), ResumeTimer()
}

JSON(ByRef js, s, v="")
{
   j=% js
   Loop, Parse, s, .
   {
      p=2
      RegExMatch(A_LoopField, "([+\-]?)([^[]+)((?:\[\d+\])*)", q)
      Loop
      {
         If (!p:=RegExMatch(j, "(?<!\\)(""|')([^\1]+?)(?<!\\)(?-1)\s*:\s*"
            . "((\{(?:[^{}]++|(?-1))*\})|(\[(?:[^[\]]++|(?-1))*\])|"
            . "(?<!\\)(""|')[^\7]*?(?<!\\)(?-1)|[+\-]?\d+(?:\.\d*)"
            . "?|true|false|null?)\s*(?:,|$|\})", x, p))
            Return
         Else If (x2==q2 Or q2=="*")
         {
            j=% x3
            z+=p+StrLen(x2)-2
            If (q3!="" And InStr(j, "[")==1)
            {
               StringTrimRight, q3, q3, 1
               Loop, Parse, q3, ], [
               {
                  z+=1+RegExMatch(SubStr(j, 2, -1), "^(?:\s*((\[(?:[^[\]]++|"
                  . "(?-1))*\])|(\{(?:[^{\}]++|(?-1))*\})|[^,]*?)\s*(?:,|$)){"
                  . SubStr(A_LoopField, 1)+1 . "}", x)
                  j=% x1
               }
            }
            Break
         }
         Else p+=StrLen(x)
      }
   }
   If v!=
   {
      vs="
      If (RegExMatch(v, "^\s*(?:""|')*\s*([+\-]?\d+(?:\.\d*)"
         . "?|true|false|null?)\s*(?:""|')*\s*$", vx)
      And (vx1+0 Or vx1==0 Or vx1=="true"
                           Or vx1=="false" Or vx1=="null" Or vx1=="nul"))
         vs:="", v:=vx1
      StringReplace, v, v, ", \", All
      js:=SubStr(js, 1, z:=RegExMatch(js, ":\s*", zx, z)+StrLen(zx)-1)
                          . vs . v . vs . SubStr(js, z + StrLen(x3)+1)
   }
   Return, j=="false" ? 0:j=="true" ? 1:j=="null" Or j=="nul"
           ? "":SubStr(j, 1, 1)=="""" ? SubStr(j, 2, -1):j
}

UriEncode(Str)
{
   b_Format:=A_FormatInteger
   Data:=""
   SetFormat, Integer, Hex
   Loop, Parse, Str
      If ((Asc(A_LoopField)>0x7f) Or (Asc(A_LoopField)<0x30)
                                  Or (Asc(A_LoopField)=0x3d))
         Data.="%" . ((StrLen(c:=SubStr(Asc(A_LoopField), 3))<2) ? "0" . c:c)
      Else
         Data.=A_LoopField
   SetFormat, Integer, % b_Format
   Return, Data
}

Ansi2Unicode(ByRef sString, ByRef wString, CP=0)
{
   nSize:=DllCall("MultiByteToWideChar", "UInt", CP
                                       , "UInt", 0
                                       , "UInt", &sString
                                       , "Int", -1
                                       , "UInt", 0
                                       , "Int", 0)
   VarSetCapacity(wString, nSize*2)
   DllCall("MultiByteToWideChar", "UInt", CP
                                , "UInt", 0
                                , "UInt", &sString
                                , "Int", -1
                                , "UInt", &wString
                                , "Int", nSize)
}

Unicode2Ansi(ByRef wString, ByRef sString, CP=0)
{
   nSize:=DllCall("WideCharToMultiByte", "UInt", CP
                                       , "UInt", 0
                                       , "UInt", &wString
                                       , "Int", -1
                                       , "UInt", 0
                                       , "Int", 0
                                       , "UInt", 0
                                       , "UInt", 0)
   VarSetCapacity(sString, nSize)
   DllCall("WideCharToMultiByte", "UInt", CP
                                , "UInt", 0
                                , "UInt", &wString
                                , "Int", -1
                                , "Str", sString
                                , "Int", nSize
                                , "UInt", 0
                                , "UInt", 0)
}

CreateToolTip()
{
   global
   hToolTip:=DllCall("CreateWindowEx", "UInt", 8 ; WS_EX_TOPMOST
                                     , "Str", "tooltips_class32" ; TOOLTIP_CLASS
                                     , "Str", ""
                                     , "UInt", 3 ; TTS_NOPREFIX+TTS_ALWAYSTIP
                                     , "UInt", 0x80000000 ; CW_USEDEFAULT
                                     , "UInt", 0x80000000
                                     , "UInt", 0x80000000
                                     , "UInt", 0x80000000
                                     , "UInt", 0
                                     , "UInt", 0
                                     , "UInt", 0
                                     , "UInt", 0)
   PostMessage, 0x404,, &TOOLINFO,
              , % "ahk_id"hToolTip ; TTM_ADDTOOLA
   PostMessage, 0x411, 1, &TOOLINFO,, % "ahk_id"hToolTip ; TTM_TRACKACTIVATE
   PostMessage, 0x418,, TipWidth,, % "ahk_id"hToolTip ; TTM_SETMAXTIPWIDTH
   Dllcall("UxTheme\SetWindowTheme", "Int", hToolTip, "Str", "", "Str", "")
   Return, hToolTip
}

SetToolTipText(TText)
{
   global
   NumPut(TText, TOOLINFO, 36)
   PostMessage, 0x40C,, &TOOLINFO,
              , % "ahk_id"hToolTip ; TTM_UPDATETIPTEXTA
}

SetTextColor(DefinedColor)
{
   global
   TextColor:=DefinedColor
   Gui, GUI1: Font, % "Underline" DefinedColor
   GuiControl, GUI1: Font, Static3
}

WM_MOUSEMOVE()
{
   global
   If !Tracking
      DllCall("TrackMouseEvent", "Int", &TRACKMOUSEEVENT)
   Else
   {
      MouseGetPos,,,, WinControl
      If WinControl=Static3
         SetTextColor("cRed")
      Else If TextColor!=cBlue
         SetTextColor("cBlue")
   }
}

WM_MOUSEHOVER()
{
   global
   Tracking:=True
}

WM_MOUSELEAVE()
{
   global
   MouseGetPos,,,, WinControl2
   If (WinControl2="Static3")
      Return
   SetTextColor("cBlue"), Tracking:=False
}

WM_LBUTTONUP(wParam, lParam, Msg, hWnd)
{
   global
   If lParam=0x202 ; WM_LBUTTONUP
   {
      If IsAbout
         Return
      Menu, Tray, Icon, shell32.dll, % (IsPaused:=!IsPaused) ? 28:14
      IsPaused ? StopTimer():ResumeTimer()
   }
}

StopTimer()
{
   global
   SetTimer, TrackingCursor, Off
   PostMessage, 0x411,, &TOOLINFO,, % "ahk_id"hToolTip
}

ResumeTimer()
{
   global
   If OnWork
   {
      PostMessage, 0x411, 1, &TOOLINFO,, % "ahk_id"hToolTip
      SetTimer, TrackingCursor, 100
   }
}

14

Re: AHK: Переводчик онлайн

И как же сим пользоваться? И чем отличается от предыдущего?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15 (изменено: Grey, 2012-01-09 02:20:59)

Re: AHK: Переводчик онлайн

Двойное нажатие после выделения RCtrl - перевод на русский, если перед тем же двойным нажатием RCtrl была нажата MButton - перевод с русского на английский. Только по последнему переводу я оговорюсь, что кодировка перевода не корректно отображается, м.б. поможете разобраться почему?

P.S.: В сыром виде: пользоваться ANSI интерпретатором, если компилировать, то опять-таки выбрать в Optional Parametrs: Base File (.bin) v1.1.5.1 ANSI 32-bit

16

Re: AHK: Переводчик онлайн

На английский вообще не получается. Где это в коде отражено (про MButton) ?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

17 (изменено: Grey, 2012-01-09 02:33:09)

Re: AHK: Переводчик онлайн

...
~vkA3:: ; rctrl
   If IsPaused Or IsAbout
      Return
   Else If (!GetKeyState("vk04" "P")
   And A_TimeSincePriorHotkey<=500
   And A_PriorHotkey="~vkA3")
      Translate(DirectLang1, DirectLang3)
   Else If (GetKeyState("vk04" "P")
   And A_TimeSincePriorHotkey<=500
   And A_PriorHotkey="~vkA3")
      Translate(DirectLang3, DirectLang2)
   KeyWait, vkA3
   Return
...

Хах!, ну да, там в комменте чуть не так написчано, но сути не меняет.

18

Re: AHK: Переводчик онлайн

Ещё такие баги: перестала клавиша "Ё" работать в любой раскладке, при переходе по ссылкам после перевода на короткое время появляется такое окно:

http://s018.radikal.ru/i503/1201/55/c18fcd5f2ad9.jpg

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

19

Re: AHK: Переводчик онлайн

Grey пишет:
...
~vkA3:: ; rctrl
   If IsPaused Or IsAbout
      Return
   Else If (!GetKeyState("vk04" "P") ; rmb
   And A_TimeSincePriorHotkey<=500
   And A_PriorHotkey="~vkA3")
      Translate(DirectLang1, DirectLang3)
   Else If (GetKeyState("vk04" "P")
   And A_TimeSincePriorHotkey<=500
   And A_PriorHotkey="~vkA3")
      Translate(DirectLang3, DirectLang2)
   KeyWait, vkA3
   Return
...

Так здесь

GetKeyState("vk04" "P")

между параметрами функции запятая должна быть!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

20 (изменено: Grey, 2012-01-09 02:47:57)

Re: AHK: Переводчик онлайн

...
~vkC0 & Esc::
...

Это можно поправить.

GetKeyState("vk04" "P")

У меня и так работает , суть не в этом, а в:

Grey пишет:

...кодировка перевода не корректно отображается, м.б. поможете разобраться почему?

21

Re: AHK: Переводчик онлайн

Grey пишет:

У меня и так работает

Так в принципе работать не может, поскольку это

(GetKeyState("vk04" "P")

равно этому:

(GetKeyState("vk04P")

Приведи исправленный код, посмотрю уже завтра, мне на лыжи с утра

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

22 (изменено: Grey, 2012-01-09 03:50:32)

Re: AHK: Переводчик онлайн

Исправил, не вопрос.

23

Re: AHK: Переводчик онлайн

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

24

Re: AHK: Переводчик онлайн

Решения так и нет?

25

Re: AHK: Переводчик онлайн

Решение есть, автор идеи обновил свой код.