Закрытие Mimgui окна на клавишку Escape

boy next door

Участник
Автор темы
219
18
Версия MoonLoader
.026-beta
Всем хай.
Как сделать закрытие mimgui окна через escape?
И почему я не могу писать буквы в inputtext? Выставил же new.chat[128]()

Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local input = imgui.new.char[128]()
local set = new.bool(false)

local vacancy_list = {u8'Не выбрано',u8'Администратор',u8'Лидер',u8'Хелпер'}
local Imvacancy = imgui.new['const char*'][#vacancy_list](vacancy_list)
local input_vacancy = imgui.new.char[128]()
local ComboVacancy = new.int()

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
end)

local newFrame = imgui.OnFrame(
    function() return set[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(400, 105), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Выдача/снятие должности', term, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove)
        imgui.InputTextWithHint(u8'Введите ник##1', u8'', input_vacancy, sizeof(input_vacancy), imgui.InputTextFlags.CharsDecimal)
        imgui.Combo(u8'Выберите действие',ComboVacancy,Imvacancy, #vacancy_list)    
        if imgui.Button(u8"Назначить на должность##1") then
            local vac = str(input_vacancy)
            if ComboVacancy[0] ~= 0 and vac ~= '' and tonumber(vac) > 0 then
                sampAddChatMessage('/set '..vac..' '..ComboVacancy[0]..'',-1)
            else
                sampAddChatMessage('[Ошибка]: {ffffff}Выберите все данные для выдачи должности.', 0xFF6600)
            end
        end
        imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('srok', function()
        set[0] = not set[0]
    end)
    while true do
        wait(0)
        --
    end
end

sa-mp-484.png


sa-mp-485.png
 
Последнее редактирование:

chromiusj

Известный
Модератор
5,653
3,955
И почему я не могу писать буквы в inputtext? Выставил же new.chat[128]()
1714594554951.png

сам же на ловушку нарвался...
 
  • Ха-ха
Реакции: Fott

boy next door

Участник
Автор темы
219
18
Посмотреть вложение 238995
сам же на ловушку нарвался...
Увы, но не понял. У меня есть уже это, но оно вставляет только цифры.

Убрал imgui.InputTextFlags.CharsDecimal, так оно крашит скрипт.
 

chromiusj

Известный
Модератор
5,653
3,955
Увы, но не понял. У меня есть уже это, но оно вставляет только цифры.

Убрал imgui.InputTextFlags.CharsDecimal, так оно крашит скрипт.
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local new = imgui.new
local ffi = require 'ffi'
local str, sizeof = ffi.string, ffi.sizeof
local set = new.bool(false)

local vacancy_list = {u8'Не выбрано',u8'Администратор',u8'Лидер',u8'Хелпер'}
local Imvacancy = imgui.new['const char*'][#vacancy_list](vacancy_list)
local input_vacancy = imgui.new.char[128]()
local ComboVacancy = new.int()


local newFrame = imgui.OnFrame(
    function() return set[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(400, 105), imgui.Cond.FirstUseEver)
        imgui.Begin(u8'Выдача/снятие должности', set, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove)
        imgui.InputTextWithHint(u8'Введите ник##1', u8'', input_vacancy, sizeof(input_vacancy))
        imgui.Combo(u8'Выберите действие',ComboVacancy,Imvacancy, #vacancy_list)
        if imgui.Button(u8"Назначить на должность##1") then
            local vac = str(input_vacancy)
            if ComboVacancy[0] ~= 0 and vac ~= '' and #(vac) > 0 then
                sampAddChatMessage('/set '..vac..' '..ComboVacancy[0]..'',-1)
            else
                sampAddChatMessage('[Ошибка]: {ffffff}Выберите все данные для выдачи должности.', 0xFF6600)
            end
        end
        imgui.End()
    end
)

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('srok', function()
        set[0] = not set[0]
    end)
    wait(-1)
end
во первых, у тебя в бегине была одна переменная для окна, а использовалсь другая
 
Последнее редактирование:

boy next door

Участник
Автор темы
219
18
Посмотреть вложение 238995
сам же на ловушку нарвался...
Закрытие на escpe крашит скрипт.
 

chromiusj

Известный
Модератор
5,653
3,955
Закрытие на escpe крашит скрипт.
Lua:
addEventHandler('onWindowMessage', function(msg, wparam, lparam) -- local wm = require('window.message')?
    if wparam == 27 then
        if set[0]  then -- почему бы не копировать код, не смотря в код сниппета/функции?
            if msg == wm.WM_KEYDOWN then
                consumeWindowMessage(true, false)
            end
            if msg == wm.WM_KEYUP then
                set[0] = false
            end
        end
    end
end)