Гайд Mimgui для чайников. Описание, пояснения, шаблоны

AnWu

Guardian of Order
Всефорумный модератор
4,686
5,166
imgui.SetNextWindowSize(imgui.ImVec2(95, 55), imgui.Cond.Always) imgui.Begin('##secundomer', WinState, imgui.WindowFlags.NoDecoration, imgui.WindowFlags.AlwaysAutoResize, imgui.WindowFlags.NoSavedSettings, imgui.WindowFlags.NoMove, imgui.WindowFlags.NoInputs) if statussec
Флаги же плюсуются, а не перечисляются.
imgui.StrCopy(inputt, '') --
inputt[0] = ''
Должно работать
Для работы с ним достаточно к названию буфера добавить ключ [0]
Было бы круто объяснить зачем

Переместить функцию по горизонтали/вертикали можно следующими способами
Lua:
-- Первый способ
imgui.SetCursorPosX(150) -- позволяет задать положение функции по горизнотали
imgui.SetCursorPosY(140) -- позволяет задать положение функции по вертикали
imgui.Button(u8'Кнопка три')

-- Второй способ
imgui.SetCursorPos(imgui.ImVec2(50, 170)) -- 50 = по горизонтали, 170 по вертикали
imgui.Button(u8'Кнопка три')
Нужно так же уточнить как оно работает и зачем нужны сетКурсорСкринПоз
 
  • Нравится
Реакции: MLycoris

percheklii

Известный
722
265
Есть еще такой способ отрисовки окна.
Код выглядит куда лучше.
Немного поменял код, но автор ниже.
Автор @THERION
Lua:
local imgui = require("mimgui")
local window = imgui.new.bool(true)

function onWindowOpen() return window[0] end

function onDrawFrame(self)
   imgui.Begin("TEST", window)
   imgui.End()
end

function main()
   imgui.OnFrame(onWindowOpen, onDrawFrame)
end
 

Sheba

Участник
142
11
Привет можешь сделать тоже самое только не с Mimgui а с imgui так как для новичков как я mimgui слишком сложно когда imgui толком почти не знаешь
Ps буду благодарен
 

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
Привет можешь сделать тоже самое только не с Mimgui а с imgui так как для новичков как я mimgui слишком сложно когда imgui толком почти не знаешь
Ps буду благодарен
Привет, я и сам в имгуи не силён, лучше с самого начала на мимгуи сидеть, со временем интуитивно и имгуи начнёшь понимать
 

Sheba

Участник
142
11
Привет, я и сам в имгуи не силён, лучше с самого начала на мимгуи сидеть, со временем интуитивно и имгуи начнёшь понимать
Привет, хорошо,тогда можешь помочь, например я сделал кнопку как ей дать функционал например imgui.Button(u8'кнопка 1') по моим догадкам написать then и на следущей строке команду типо AddChatMessage("бла бла") Правильно?
 

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
Привет, хорошо,тогда можешь помочь, например я сделал кнопку как ей дать функционал например imgui.Button(u8'кнопка 1') по моим догадкам написать then и на следущей строке команду типо AddChatMessage("бла бла") Правильно?
Да, в гайде есть пример с кнопкой. Также можешь прописывать другие функции, как условие, чекбокс к примеру, в таком случае при клике на него будет срабатывать то, что ты там пропишешь, чаще всего такое для сохранения в конфиге используют
 
  • Нравится
Реакции: Sheba

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
Апаю в связи с обновлением темы:
1. Убраны примеры/шаблоны (будут перенесены в отдельную тему, было необходимо, чтобы добавить больше полезного в этот гайд)
2. Добавлено больше пояснений
3. Добавлено следующее:
3.1 Дополнительные непопулярные функции с кнопками / текстом
3.2 Информация про: RadioButtonBool / RadioButtonIntPtr / IsItemClicked
4. Добавлена инфа, как сделать цветной текст с использованием HEX, текст по центру, изменение шрифта (его размера)
 

ChromiusJ

x B x A x R x
Друг
4,895
3,183
Lua:
local imgui = require 'mimgui' -- подключаем библиотеку мимгуи

local encoding = require 'encoding' -- подключаем библиотеку для работы с разными кодировками
encoding.default = 'CP1251' -- задаём кодировку по умолчанию
local u8 = encoding.UTF8 -- это позволит нам писать задавать названия/текст на кириллице

local new = imgui.new -- создаём короткий псевдоним для удобства
local WinState = new.bool() -- создаём буффер для открытия окна

local SliderTwo = new.float() -- создаём буффер для SliderFloat

imgui.OnFrame(function() return WinState[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) -- отвечает за положение окна на экране
        imgui.SetNextWindowSize(imgui.ImVec2(245, 280), imgui.Cond.Always) -- отвечает за размер окна
        imgui.OnInitialize(function()
        theme()
        end)

        imgui.Begin(u8'ebatel228', WinState, imgui.WindowFlags.NoResize) -- отвечает за отображение окна, его заголовок и флаги
        imgui.SliderFloat(u8'Скорость', SliderTwo, 1, 100) -- 3 аргументом является минимальное значение, а 4 аргумент задаёт максимальное значение
        imgui.End()
    end
)

function main()
    sampRegisterChatCommand('ebatel', function() WinState[0] = not WinState[0] end) -- команда по которой будет вызываться наше окно
    wait(-1)
end

function imgui.DarkTheme()
    imgui.SwitchContext()
    --==[ STYLE ]==--
    imgui.GetStyle().WindowPadding = imgui.ImVec2(5, 5)
    imgui.GetStyle().FramePadding = imgui.ImVec2(5, 5)
    imgui.GetStyle().ItemSpacing = imgui.ImVec2(5, 5)
    imgui.GetStyle().ItemInnerSpacing = imgui.ImVec2(2, 2)
    imgui.GetStyle().TouchExtraPadding = imgui.ImVec2(0, 0)
    imgui.GetStyle().IndentSpacing = 0
    imgui.GetStyle().ScrollbarSize = 10
    imgui.GetStyle().GrabMinSize = 10

    --==[ BORDER ]==--
    imgui.GetStyle().WindowBorderSize = 1
    imgui.GetStyle().ChildBorderSize = 1
    imgui.GetStyle().PopupBorderSize = 1
    imgui.GetStyle().FrameBorderSize = 1
    imgui.GetStyle().TabBorderSize = 1

    --==[ ROUNDING ]==--
    imgui.GetStyle().WindowRounding = 5
    imgui.GetStyle().ChildRounding = 5
    imgui.GetStyle().FrameRounding = 5
    imgui.GetStyle().PopupRounding = 5
    imgui.GetStyle().ScrollbarRounding = 5
    imgui.GetStyle().GrabRounding = 5
    imgui.GetStyle().TabRounding = 5

    --==[ ALIGN ]==--
    imgui.GetStyle().WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    imgui.GetStyle().ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
    imgui.GetStyle().SelectableTextAlign = imgui.ImVec2(0.5, 0.5)
 
    --==[ COLORS ]==--
    imgui.GetStyle().Colors[imgui.Col.Text]                   = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TextDisabled]           = imgui.ImVec4(0.50, 0.50, 0.50, 1.00)
    imgui.GetStyle().Colors[imgui.Col.WindowBg]               = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ChildBg]                = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PopupBg]                = imgui.ImVec4(0.07, 0.07, 0.07, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Border]                 = imgui.ImVec4(0.25, 0.25, 0.26, 0.54)
    imgui.GetStyle().Colors[imgui.Col.BorderShadow]           = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBg]                = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBgHovered]         = imgui.ImVec4(0.25, 0.25, 0.26, 1.00)
    imgui.GetStyle().Colors[imgui.Col.FrameBgActive]          = imgui.ImVec4(0.25, 0.25, 0.26, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TitleBg]                = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TitleBgActive]          = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TitleBgCollapsed]       = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.MenuBarBg]              = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarBg]            = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrab]          = imgui.ImVec4(0.00, 0.00, 0.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabHovered]   = imgui.ImVec4(0.41, 0.41, 0.41, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ScrollbarGrabActive]    = imgui.ImVec4(0.51, 0.51, 0.51, 1.00)
    imgui.GetStyle().Colors[imgui.Col.CheckMark]              = imgui.ImVec4(1.00, 1.00, 1.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.SliderGrab]             = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
    imgui.GetStyle().Colors[imgui.Col.SliderGrabActive]       = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Button]                 = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ButtonHovered]          = imgui.ImVec4(0.21, 0.20, 0.20, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ButtonActive]           = imgui.ImVec4(0.41, 0.41, 0.41, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Header]                 = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.HeaderHovered]          = imgui.ImVec4(0.20, 0.20, 0.20, 1.00)
    imgui.GetStyle().Colors[imgui.Col.HeaderActive]           = imgui.ImVec4(0.47, 0.47, 0.47, 1.00)
    imgui.GetStyle().Colors[imgui.Col.Separator]              = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.SeparatorHovered]       = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.SeparatorActive]        = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.ResizeGrip]             = imgui.ImVec4(1.00, 1.00, 1.00, 0.25)
    imgui.GetStyle().Colors[imgui.Col.ResizeGripHovered]      = imgui.ImVec4(1.00, 1.00, 1.00, 0.67)
    imgui.GetStyle().Colors[imgui.Col.ResizeGripActive]       = imgui.ImVec4(1.00, 1.00, 1.00, 0.95)
    imgui.GetStyle().Colors[imgui.Col.Tab]                    = imgui.ImVec4(0.12, 0.12, 0.12, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TabHovered]             = imgui.ImVec4(0.28, 0.28, 0.28, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TabActive]              = imgui.ImVec4(0.30, 0.30, 0.30, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TabUnfocused]           = imgui.ImVec4(0.07, 0.10, 0.15, 0.97)
    imgui.GetStyle().Colors[imgui.Col.TabUnfocusedActive]     = imgui.ImVec4(0.14, 0.26, 0.42, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotLines]              = imgui.ImVec4(0.61, 0.61, 0.61, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotLinesHovered]       = imgui.ImVec4(1.00, 0.43, 0.35, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotHistogram]          = imgui.ImVec4(0.90, 0.70, 0.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.PlotHistogramHovered]   = imgui.ImVec4(1.00, 0.60, 0.00, 1.00)
    imgui.GetStyle().Colors[imgui.Col.TextSelectedBg]         = imgui.ImVec4(1.00, 0.00, 0.00, 0.35)
    imgui.GetStyle().Colors[imgui.Col.DragDropTarget]         = imgui.ImVec4(1.00, 1.00, 0.00, 0.90)
    imgui.GetStyle().Colors[imgui.Col.NavHighlight]           = imgui.ImVec4(0.26, 0.59, 0.98, 1.00)
    imgui.GetStyle().Colors[imgui.Col.NavWindowingHighlight]  = imgui.ImVec4(1.00, 1.00, 1.00, 0.70)
    imgui.GetStyle().Colors[imgui.Col.NavWindowingDimBg]      = imgui.ImVec4(0.80, 0.80, 0.80, 0.20)
    imgui.GetStyle().Colors[imgui.Col.ModalWindowDimBg]       = imgui.ImVec4(0.00, 0.00, 0.00, 0.70)
end
Lua:
imgui.OnInitialize(function()
  imgui.GetIO().IniFilename = nil
  red_theme()
end)
Отдельно это запихай
 
  • Нравится
Реакции: MLycoris и minxty

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
Друг, а можно как-то перенести значение из Input в переменную?
да
Lua:
if imgui.InputText('Example',exampleBuf,256) then
    peremenaya = u8:decode(ffi.string(exampleBuf))
end
-- пример ипсользования
if imgui.Button('send') then
    sampAddChatMessage(peremenaya,-1)
end
 

Tony Spatulata

Новичок
6
1
да
Lua:
if imgui.InputText('Example',exampleBuf,256) then
    peremenaya = u8:decode(ffi.string(exampleBuf))
end
-- пример ипсользования
if imgui.Button('send') then
    sampAddChatMessage(peremenaya,-1)
end
У меня скрипт крашит когда я пытаюсь что-то в поле внести, щас скину консоль
1698589864828.png
1698589885930.png
 

MLycoris

Режим чтения
Автор темы
Проверенный
1,808
1,853
@Tony Spatulata ты не подключил ffi, а ещё в начале куча лишнего
Lua:
require 'lib.moonloader'
local imgui = require 'mimgui'
local ffi = require 'ffi'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8

local new = imgui.new
local WinState = new.bool() -- создаём буффер для открытия окна
local exampleBuf = new.char[256]()

imgui.OnFrame(function() return WinState[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(500,500), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5)) -- отвечает за положение окна на экране
        imgui.SetNextWindowSize(imgui.ImVec2(900, 680), imgui.Cond.Always) -- отвечает за размер окна
        imgui.Begin(u8'Основное', WinState, imgui.WindowFlags.NoResize) -- отвечает за отображение окна, его заголовок и флаги
        if imgui.CollapsingHeader(u8'Гайд по использованию') then
            imgui.TextWrapped(u8'Гайд потом')
            imgui.Separator()
            
        end
        local w = {
            first = 120,
            second = 120,
        }
        -- == Первая строка
        imgui.Columns(3) -- 3 количество столбцов
        imgui.Text(u8'Семья') imgui.SetColumnWidth(1, w.first) -- первый столбик
        imgui.NextColumn()
        imgui.Text(u8'Номер бизнеса') imgui.SetColumnWidth(-1, 100) -- второй столбик
        imgui.NextColumn()
        imgui.Text(u8'Выдача') imgui.SetColumnWidth(-1, 110)
        imgui.Columns(1)
        imgui.Separator()
        -- == Вторая строка
        imgui.Columns(3)
        imgui.Text (u8'Континенталь') imgui.SetColumnWidth(-1, w.first)
        imgui.NextColumn()
        if imgui.InputText('Example',exampleBuf,256) then
            peremenaya = u8:decode(ffi.string(exampleBuf))
        end
        imgui.NextColumn()
        if imgui.Button('send') then
            sampAddChatMessage(peremenaya,-1)
        end
        end
)
function main()
    sampRegisterChatCommand('cmid', function() WinState[0] = not WinState[0] end)
    wait(-1)
end