Использование InputText для записи переменной

deltacurse

Участник
Автор темы
41
5
Версия MoonLoader
.026-beta
InputText в мимгуи использует буффер char
Мне нужно конвертировать значение из inputtext в число чтобы умножать на другую переменную
Пытался сделать так

Конверт:
text = u8:decode(ffi.string(inputField))
sp = tonumber(text)
Но при умножении в imgui.Text на переменную sp выдаёт ошибку о нулевом значении, хотя в принте всё отлично перемножается
Как бы мне лучше всего конвертировать инпуттекст в инт?
 

qdIbp

Автор темы
Проверенный
1,438
1,180
Ты так делаешь?
Lua:
imgui.Text( sp )

Хотя писало бы что не тот тип в imgui text
Просто смотрю тут все норм

Lua:
local imgui = require ('mimgui')
local ffi = require('ffi')
local vkeys = require('vkeys')

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local wm = require('windows.message')
local new, str, sizeof = imgui.new, ffi.string, ffi.sizeof

local renderWindow = new.bool()
local inputField = new.char[256]()
local sizeX, sizeY = getScreenResolution()

local xz = 23

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

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 150), imgui.Cond.FirstUseEver)
        imgui.Begin("Main Window", renderWindow)
            imgui.Text( '' ..xz )
            if imgui.InputText(u8"Привет", inputField, sizeof(inputField)) then
                xz = tonumber( str(inputField)  )
            end
        imgui.End()
    end
)

function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end
Код:
 
Последнее редактирование:

deltacurse

Участник
Автор темы
41
5
Ты так делаешь?
Lua:
imgui.Text( sp )

Хотя писало бы что не тот тип в imgui text
Просто смотрю тут все норм

Lua:
local imgui = require ('mimgui')
local ffi = require('ffi')
local vkeys = require('vkeys')

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local wm = require('windows.message')
local new, str, sizeof = imgui.new, ffi.string, ffi.sizeof

local renderWindow = new.bool()
local inputField = new.char[256]()
local sizeX, sizeY = getScreenResolution()

local xz = 23

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

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 150), imgui.Cond.FirstUseEver)
        imgui.Begin("Main Window", renderWindow)
            imgui.Text( '' ..xz )
            if imgui.InputText(u8"Привет", inputField, sizeof(inputField)) then
                xz = tonumber( str(inputField)  )
            end
        imgui.End()
    end
)

function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end
Код:
Спасибо,начало работать умножение, но можно ли установить стандартное значение инпуттекста или переменной чтобы когда у меня ничего не написано в инпуте не крашило скрипт из за умножения на nil

Я просто не могу понять где именно надо задать значение в переменной или в char

Когда устанавливаю в char само значение в инпуте есть но из-за того что я никак с ним не взаимодействую он не конвертирует это число, нужно ли tonumber кидать в беск цикл?

Всё, спасибо я додумался создать переменную до того как конвертировать 😂
 
Последнее редактирование:
  • Грустно
Реакции: qdIbp

qdIbp

Автор темы
Проверенный
1,438
1,180
так?

Lua:
local imgui = require ('mimgui')
local ffi = require('ffi')
local vkeys = require('vkeys')

local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local wm = require('windows.message')
local new, str, sizeof = imgui.new, ffi.string, ffi.sizeof

local xz = 23

local renderWindow = new.bool()
local inputField = new.char[256](''..xz)
local sizeX, sizeY = getScreenResolution()

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

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(200, 150), imgui.Cond.FirstUseEver)
        imgui.Begin("Main Window", renderWindow)
            imgui.Text( '' ..xz )
            if imgui.InputText(u8"Привет", inputField, sizeof(inputField)) then
                xz = tonumber( str(inputField)  ) or 25
            end
        imgui.End()
    end
)

function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end
 

Похожие темы

  1. Ответы
    360
    Просмотры
    257K
  2. Ответы
    2K
    Просмотры
    1M
  3. Ответы
    0
    Просмотры
    660