1

Тема: AHK: A_GuiControlEvent

Есть аналоги A_GuiControlEvent?
Хочу для gui controla действия при наведении мыши , клике правой ,двойной левой и т.д.
А еще хорошо было бы узнать как картинки в gui передвигать на передний/задний план...
И какую-нибудь проверку организовать на пересечения контролов (у меня картинка за мышью двигается и неприятно затрагивает другие картинки) .

2 (изменено: MandarinKa02, 2017-09-08 22:23:07)

Re: AHK: A_GuiControlEvent

Есть такая особенность: если два раза левой кликнуть, то сработают 2 события "одно_нажатие" и 1 событие "двойное_нажатие".
Так что тут сложно.

И какую-нибудь проверку организовать на пересечения контролов (у меня картинка за мышью двигается и неприятно затрагивает другие картинки) .

Надо на передний план как-то вывести.

Покинул форум

3

Re: AHK: A_GuiControlEvent

shahlik002, расскажите подробнее, что Вы делаете, нужна конкретика.

4

Re: AHK: A_GuiControlEvent

Вот простой пример отслеживания наведения, двойного клика и клика правой кнопкой:

global WM_MOUSEMOVE := 0x200
     , WM_LBUTTONDBLCLK := 0x203
     , WM_RBUTTONDOWN := 0x204

Gui, Add, Text, w100 h100 border hwndhControl1
Gui, Add, Text, yp x+5 w100 h100 border hwndhControl2
Gui, Show

controls := [ {hwnd: hControl1, func: Func("Control1")}, {hwnd: hControl2, func: Func("Control2")} ]

OnMessage( WM_MOUSEMOVE, Func("MsgHandling").Bind(controls) )
OnMessage( WM_LBUTTONDBLCLK, Func("MsgHandling").Bind(controls) )
OnMessage( WM_RBUTTONDOWN, Func("MsgHandling").Bind(controls) )

Control1(msg)  {
   if (msg = WM_MOUSEMOVE) {
      TrayTip,, Курсор над контролом 1
   }
   if (msg = WM_LBUTTONDBLCLK)  {
      TrayTip,, Двойной клик по контролу 1
   }
   if (msg = WM_RBUTTONDOWN)  {
      TrayTip,, Правая кнопка нажата над контролом 1
   }
}

Control2(msg)  {
   if (msg = WM_MOUSEMOVE) {
      TrayTip,, Курсор над контролом 2
   }
   if (msg = WM_LBUTTONDBLCLK)  {
      TrayTip,, Двойной клик по контролу 2
   }
   if (msg = WM_RBUTTONDOWN)  {
      TrayTip,, Правая кнопка нажата над контролом 2
   }
}

MsgHandling(controls, wp, lp, msg)  {
   MouseGetPos,,,, hControl, 2
   if (msg = WM_MOUSEMOVE)  {
      for k, v in controls  {
         if (hControl = v.hwnd && !v.hover)  {
            v.hover := true
            v.func.Call(msg)
            timer := Func("CheckHover").Bind(v)
            SetTimer, % timer, 50
         }
      }
   }
   if (msg = WM_LBUTTONDBLCLK || msg = WM_RBUTTONDOWN)  {
      for k, v in controls  {
         if (hControl = v.hwnd)
            v.func.Call(msg)
      }
   }
}

CheckHover(obj)  {
   MouseGetPos,,,, hControl, 2
   if (hControl != obj.hwnd)  {
      SetTimer,, Delete
      obj.hover := false
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder