Закрыть окно при клике на экран вне определённого окна.

gbcdev96

Путник
VIP
Сообщения
58
Розыгрыши
0
Репутация
0
Реакции
1
Баллы
31
Привет, ребята, я пытаюсь написать код, чтобы закрыть окно при клике за его пределами. Не знаю, насколько это сложно, но я посмотрел события, и мне кажется, что эти подходят:

event OnLButtonDown( WindowHandle a_WindowHandle, int X, int Y );
event OnLButtonUp( WindowHandle a_WindowHandle, int X, int Y );
event OnLButtonDblClick( int X, int Y );

Так как я новичок в UC и не имею понятия, как отлаживать код, я использовал чат для вывода координат клика:


Но эти события работают только для кликов внутри окна и его дочерних элементов. А мне нужно отслеживать события вне этого окна, в любой части интерфейса. Это возможно?


 
throw the .u and lets find out
 
Это эсенс клиент или какой?
 
throw the .u and lets find out
Я не смог прикрепить, не позволяет .u. Я не знаю, разрешена ли загрузка на этом сайте, но я сделал это там. Мне нужно скрывать окно AutoPotions.configPotions, когда нажимаешь вне него.:
 
да чекай таймером фокус на этом окне и закрывай если фокус спал
 
ну я хз как там с интерлюдами, но на хф+ можно как то закостылить если уж прям оч хочется

Код:
function OnShow()
{       
    Me.SetTimer(1122, 100);
}

function OnTimer(int TimerID)
{   
    if (TimerID == 1122)
    {
        Me.KillTimer(1122);
        if (Me.IsFocused())
            Me.SetTimer(1122, 100);
        else
            Me.HideWindow();
    }
}
 

Это сработало частично, но клиент завис. Попробую увеличить задержку. Проблема в том, что у меня есть дочерние элементы в этом окне, например, sliderCtrl. Нужно ли мне добавить условие, чтобы проверять, находится ли фокус на окне или на этом слайдере? Я думал, что это уже работает для всех дочерних элементов этого окна.
 
Я попробовал, но думаю, что это не сработает таким образом, не для этого сценария.

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


Но возникнет проблема, потому что у меня есть тикер, который является дочерним элементом этого окна _configPotions, и при нажатии на него фокус будет потерян.
Вы знаете, есть ли какая-нибудь альтернатива? Я пробовал создать вспомогательную переменную в обработчике тикера, но это не сработает, потому что при нажатии на тикер окно теряет фокус.
 

Вложения

  • 1735597128125.webp
    18,4 КБ · Просмотры: 9
а зачем тебе это? бот-ферму настраиваешь?))
 
не знаю на сколько это работает на интерлюде. но на ХФ конекст меню закрывается так.
Код:
function OnMouseOut( WindowHandle a_WindowHandle )
{
  Me.SetTimer(3368, 1000);
 
}
function OnMouseOver( WindowHandle a_WindowHandle )
{

  Me.KillTimer(3368);
}
 

в IL таких подписей нет :/
 
а такое есть у вас на интерлюде?
Код:
function OnLButtonDown (WindowHandle a_WindowHandle, int X, int Y)
{    
    if (a_WindowHandle == Me) 
    {
        Me.HideWindow();
    }
}
 
C++:
function OnFocus(bool bFlag, bool bTransparency)
{
    if (!bFlag)
    {
        _configPotions.HideWindow();
    }
}
 
C++:
function OnFocus(bool bFlag, bool bTransparency)
{
}
Я не видел что бы это было реализовано в interlude
|
Я тоже пытался придумать, как отследить потерю фокуса, но у меня не получилось(
У кого-то еще есть идеи?
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…