Закрытия mimgui окна клавишей, без бага InputText

Rezbirp

Известный
Автор темы
72
69
Версия MoonLoader
.026-beta
После закрытия окна mimgui нестандартным методом (Клавишей ESC), с активным InputText'ом (во время ввода в него), он багаеться и в последующем, я не могу ввести текст.

Это возможно пофиксить?

Lua:
require 'lib.moonloader'
local imgui = require 'mimgui'
local ffi = require 'ffi'
local renderWindow = imgui.new.bool()
local text = imgui.new.char[128]('')

function main()
    sampRegisterChatCommand("inpt", function() renderWindow[0] = true end)
   
    while true do
        wait(0)
        if isKeyDown(VK_ESCAPE) and renderWindow[0] then
            renderWindow[0] = false
        end
    end
end

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.InputText("##text", text, ffi.sizeof(text))
    end
)

 
Решение
Нужно менять статус окна не в момент нажатия а в момент отжатия клавиши. Так не будет багов с инпут.
Вот код, переменные окон на свои заменишь.
Lua:
addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if wparam == 27 then
            if renderWindow[0] or renderWindowTWS[0] then
                if msg == wm.WM_KEYDOWN then
                    consumeWindowMessage(true, false)
                end
                if msg == wm.WM_KEYUP then
                    renderWindow[0] = false
                    renderWindowTWS[0] = false
                end
            end
        end
    end)

Sadow

Известный
1,439
588
После закрытия окна mimgui нестандартным методом (Клавишей ESC), с активным InputText'ом (во время ввода в него), он багаеться и в последующем, я не могу ввести текст.

Это возможно пофиксить?

Lua:
require 'lib.moonloader'
local imgui = require 'mimgui'
local ffi = require 'ffi'
local renderWindow = imgui.new.bool()
local text = imgui.new.char[128]('')

function main()
    sampRegisterChatCommand("inpt", function() renderWindow[0] = true end)
  
    while true do
        wait(0)
        if isKeyDown(VK_ESCAPE) and renderWindow[0] then
            renderWindow[0] = false
        end
    end
end

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.InputText("##text", text, ffi.sizeof(text))
    end
)

Сделай проверку. Пишешь ли ты в буффер или же нет. Если пишешь то не давай закрыть окно
 

Vespan

loneliness
Проверенный
2,104
1,635
Юзаю этот чат уже 2+ года,такая проблема и тут есть,когда такое у меня происходит то я несколько раз захожу в ESC и выхожу(зажимаю ESCAPE на пять секунд),и все,баг пропадает.Попробуй фокус инпута менять
IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
(в этом чате тож юзаеться SetKeyboardFocusHere,попробуй и ты)
 

Gorskin

{Reverse Developer} ✓
Проверенный
1,251
1,054
Нужно менять статус окна не в момент нажатия а в момент отжатия клавиши. Так не будет багов с инпут.
Вот код, переменные окон на свои заменишь.
Lua:
addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if wparam == 27 then
            if renderWindow[0] or renderWindowTWS[0] then
                if msg == wm.WM_KEYDOWN then
                    consumeWindowMessage(true, false)
                end
                if msg == wm.WM_KEYUP then
                    renderWindow[0] = false
                    renderWindowTWS[0] = false
                end
            end
        end
    end)
 
  • Нравится
Реакции: Rezbirp и Vespan