26

Re: AHK: Изменить цвет текста в Gui под курсором мыши

Malcev пишет:

Чтобы его адаптировать для графики нужно вначале понять как скрипт работает.
Для этого нужно почитать команды которые там используются, попытаться понять для чего они там нужны и если есть какие-то по ним вопросы задать их на форуме.

Именно в данном контексте вопрос и был задан:

… если не затруднит дать небольшое пояснение как задействовать действие при наведении курсора правильно?
Данный пример отлично работает с подсветкой текста, но нестабилен с графикой.


GUI, Add, Text, vMainText hwndMyText, Main text
GUI, Add, Picture, x20 y20 vMAIN1, C: \OFF.BMP
GUI, Add, Picture, x20 y20 vMAIN2, C:\ON.BMP
GUI, Show
SetTimer, Text_check , 100
SetTimer, Pic_check , 100
Return
Text_check:
MouseGetPos, , , , TABLA, 2
IF TABLA = %MyText%
{
Gui, Font, cRed
GuiControl, Font, MainText
}
Else
{
Gui, Font, cDefault
GuiControl, Font, MainText
}
Pic_check:
MouseGetPos, , , , TABLB, 2
If TABLB = %MAIN1%
{
GuiControl, Hide, MAIN1
GuiControl, Show, MAIN2
}
Else
{
GuiControl, Hide, MAIN2
GuiControl, Show, MAIN1
}

Почему в данной конструкции есть зависимость между


MouseGetPos, , , , TABLA, 2
///
MouseGetPos, , , , TABLB, 2

И почему она пропадает при смене 2 на 1 в TABLB?
Возможно, я изначально использую не подходящие методы?
Cуществует более простой способ изменить картинку при наведении на нее курсора?

27 (изменено: teadrinker, 2018-02-12 20:03:03)

Re: AHK: Изменить цвет текста в Gui под курсором мыши

Gui, Add, Text, vText gDummy, Main text
Gui, Add, Pic, w32 h-1 vPic1 gDummy Icon28, shell32
Gui, Add, Pic, wp hp xp yp Hidden vPic2 gDummy Icon110, shell32
Gui, Show, w200 h100
OnMessage(0x200, "WM_MOUSEMOVE")
Dummy:
Return

GuiClose:
   ExitApp

WM_MOUSEMOVE(wp, lp, msg, hwnd)  {
   static hover := {}
   if (wp = "timer")  {
      MouseGetPos,,,, hControl, 2
      if (hControl != hwnd)  {
         SetTimer,, Delete
         hover[hwnd] := false
         
         if (msg = "text")  {
            Gui, %lp%:Font, cDefault
            GuiControl, %lp%:Font, % hwnd
         }
         else  {
            GuiControl, %lp%:Hide, Pic2
            GuiControl, %lp%:Show, Pic1
         }
      }
   }
   else  {
      if ( A_GuiControl = "Text" && !hover[hwnd] )  {
         hover[hwnd] := true
         Gui, Font, cRed
         GuiControl, Font, Text
         timer := Func(A_ThisFunc).Bind("timer", A_Gui, "text", hwnd)
         SetTimer, % timer, 100
      }
      else if (A_GuiControl = "Pic1")  {
         GuiControl, Hide, Pic1
         GuiControl, Show, Pic2
      }
      else if ( A_GuiControl = "Pic2" && !hover[hwnd] )  {
         hover[hwnd] := true
         timer := Func(A_ThisFunc).Bind("timer", A_Gui, "pic", hwnd)
         SetTimer, % timer, 100
      }
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

28

Re: AHK: Изменить цвет текста в Gui под курсором мыши

gosha.pudin, вашем коде первый таймер проверяет, тоже самое, что и второй, так как перед Pic_check: не стоит return.
MouseGetPos, , , , TABLB, 2 сохраняет в переменную TABLB хендл контрола, а вы эту переменную сравниваете не с хендлом, а с содержимым контрола с картинкой (пустым значением).