Исходник Tutorial ImGui Lua BR

Haru Urara

Участник
Автор темы
27
13

Tutorial feito para quem é Brasileiro

Uns tempos atrás,a moderação chutou minha bunda quando fiz um tutorial que particulamente era péssimo,
agora que me aprofundei em Moon Imgui,posso fazer o tutorial sem ter uma crise existencial novamente...

Dependências :

Lua para windows
SA-MP 0.3.7
Asi Loader
Moonloader

ImGui Lua

Aviso :

A IDE é seu critério,gosto de Notepad ++ e Sublime Text com Auto Complete de ImGui ou Moonloader para menu grande

Não precisa ter um computador incrível para progamar Lua,apenas tenha força de vontade,eu mesmo uso um notebook de 1.0 GHz e estou vivo 💀
Não tenha pressa para aprender. Programação é treino,persistência e ,corrigir erros

Inicio :​

Oque saber no inicio?
obviamente saber o básico de Lua, você pode ver cursos no youtube(recomendo CFB Cursos), ou ler(nerd)
não achar que vai fazer um menu complexo em 2 segundos
saber lidar com erros
Nâo vou ensinar Lua aqui,crie vergonha na cara e vá estudar!
---------------------------------------------------------------------------------------------------------------------------------------------------

Básico :

Lua:
local imgui = require "imgui"  --precisa do arquivo imgui em sua lib

function imgui.OnDrawFrame() -- OnDrawFrame é um nome obrigatório pois contém o conteúdo do menu
  imgui.Begin('Janela ImGui') --Nome da Janela
  imgui.Text('Texto da janela') --Texto dentro da janela
  imgui.End() --Finaliza o codigo do menu
end

function main() -- Obrigatório,sem function main,seu menu nao vai abrir
  imgui.Process = true -- O Menu será processado enquanto imgui.Process for verdadeiro
end -- Finaliza o main

Isso Vira um menu redimensionável e não fechável
1757207674804.png

Ainda Básico :

Checkbox :
Lua:
local checkbox = imgui.ImBool(false) -- Variável da checkbox,pode ter qualquer nome,false para começar desmarcado

imgui.Checkbox("Checkbox",checkbox)  -- Você pode acessar o valor da checkbox se ativado ou não com '.v' Como : checkbox.v

1757377135283.png


Slider Int Slider Float
Lua:
local sliderint = imgui.ImInt(0) -- Valor inteiro,começa em zero
 
imgui.SliderInt("Slider Inteiro",sliderint,0,10) -- Vai de 0 a 10

--Você pode pegar os valores do slider com '.v' Exemplo : sliderint.v

1757376765189.png


Lua:
local sliderfloat = imgui.ImFloat(0.0) -- Valor Decimal,começa em 0.0

imgui.SliderFloat("Slider Decimal ",sliderfloat,0.0,100.0) -- Vai de 0.0 a 100.0

--Você pode pegar os valores do slider com '.v' Exemplo : sliderfloat.v

1757376849841.png

Input Text (Caixinhas de texto)
Lua:
local text = imgui.ImBuffer(256) -- Variável do Input Text,Vai até 256 letras(máximo)

imgui.InputText("Adicione um texto",text)

--Você pode pegar os valores dos Input's com '.v' Exemplo : text.v

1757376884387.png


Juntando Tudo :

Lua:
local imgui = require "imgui" --precisa do arquivo imgui

local key = require "vkeys" -- precisa do arquivo vkeys

local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada

local sliderinteiro = imgui.ImInt(0) --Slider começa em zero

local sliderdecimal = imgui.ImFloat(0.0) --Começa em 0.0

local texto = imgui.ImBuffer(256) -- Vai até 256 letras (Máximo)

local checkbox = imgui.ImBool(false) --Começa desmarcado o checkbox

function imgui.OnDrawFrame() -- OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
if menu.v then --sem isso,o botao de fechar nao funciona
imgui.SetNextWindowSize(imgui.ImVec2(350, 200), imgui.Cond.FirstUseEver) --Seta a posição inicial do menu com largura e altura,Cond.FirstUseEver permite fechar a janela com um X no canto superior direito
  imgui.Begin('Janela ImGui',menu) --usado para controlar o abre e fecha
 
  imgui.Text('Texto da janela') --Texto dentro da janela
 
  imgui.Button("Clique me") --Botao basico sem nada de especial,faz nada
 
  imgui.SliderInt("Slider Inteiro",sliderinteiro,0 ,10) -- vai de zero a 10
 
  imgui.SliderFloat("Slider Decimal",sliderdecimal,0.0,10.0) --Vai de 0.0 até 10.0
 
  imgui.Checkbox("Checkbox",checkbox) --Checkbox
 
  imgui.InputText("Adicione um texto",texto) --Caixa de texto compatível com letras latinas
 
  imgui.End() --Finaliza o codigo do menu
  end
end


function main()
  while true do --enquanto verdadeiro vai esperar 0 segundos e etc.
    wait(0) -- espera 0 segundos
    if wasKeyPressed(key.VK_F2) then --Se F2 for apertado,Menu abre ou fecha
        menu.v = not menu.v -- .v pega o valor booleano da variavel menu
    end
    imgui.Process = menu.v -- O Menu será processado enquanto menu for verdadeiro
  end
end



Como ficou :
1757210338004.png


InputInt e InputFloat :

Lua:
           local input1 = imgui.ImInt(0) -- Valor inteiro,começa em zero
            local input2 = imgui.ImFloat(0.0) -- Valor decimal,começa em zero

            imgui.InputInt("Input1", input1) -- Caixa de texto so que de numeros inteiros e com botão + e -
            imgui.InputFloat("Input2", input2) -- Caixa de texto de valor decimal

Como fica :
Untitled4.png


Como definir o tamanho de um botão e sua cor?​

Usando ImVec2 e ImVec4 isso é possivel.
Como definir o tamanho :

Lua:
imgui.Button("Meu Botão", imgui.ImVec2(200, 40))
                             Explicação
imgui.Button(texto, imgui.ImVec2(largura, altura))

Aqui vão exemplos de botões :
Lua:
-- Botão quadrado

imgui.Button("Quadrado", imgui.ImVec2(50, 50))


-- Botão largo

imgui.Button("Largo", imgui.ImVec2(300, 30))


-- Botão fino

imgui.Button("Fino", imgui.ImVec2(100, 20))

Como fica :
1758383144245.png

Claro que não fica tão legal,recomendo usar as 'flags windows' para deixar sem as bordas.
Você também pode usar imgui.PushItemWidth()

Exemplo Real :

Lua:
imgui.PushItemWidth(20)
imgui.Button("Botão")


imgui.PushItemWidth(50)
imgui.SliderInt("Slider", sliderint, 0, 10)

imgui.PushItemWidth(50)
imgui.Checkbox("Checkbox",checkbox)

1758384674125.png





Como escolher cor do botão com ImVec4? :

Lua:
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(r,g,b,a))

-- Seu botão

imgui.PopStyleColor() -- termina a aplicação das cores(Obrigatório)

📌 Exemplo básico:

Lua:
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.2, 0.6, 1.0, 1.0)) -- Azul claro

if imgui.Button("Clique Aqui", imgui.ImVec2(200, 40)) then
    sampAddChatMessage("Você clicou no botão!", 0xFFAA00)
end

imgui.PopStyleColor()


Notas:
• Os valores do ImVec4 vão de 0.0 a 1.0 (não use 255!).
• Ordem: vermelho, verde, azul, alpha (transparência).
• Sempre use PopStyleColor() depois para resetar o estilo.



Exemplos de cores:

Lua:
imgui.ImVec4(1.0, 0.0, 0.0, 1.0) -- vermelho
imgui.ImVec4(0.0, 1.0, 0.0, 1.0) -- verde
imgui.ImVec4(0.2, 0.6, 1.0, 1.0) -- azul claro
imgui.ImVec4(0.7, 0.7, 0.7, 1.0) -- cinza claro

Exemplo Real :

Lua:
local vermelho = imgui.ImVec4(1.0, 0.0, 0.0, 1.0) -- vermelho
local verde = imgui.ImVec4(0.0, 1.0, 0.0, 1.0) -- verde
local azul = imgui.ImVec4(0.2, 0.6, 1.0, 1.0) -- azul claro
local cinza = imgui.ImVec4(0.7, 0.7, 0.7, 1.0) -- cinza claro

                    --Vermelho
        imgui.PushStyleColor(imgui.Col.Button,vermelho)
        imgui.Button("Vermelho")
        imgui.PopStyleColor()
 
                      --Verde
        imgui.PushStyleColor(imgui.Col.Button,verde)
        imgui.Button("Verde")
        imgui.PopStyleColor()
 
                       --Azul
        imgui.PushStyleColor(imgui.Col.Button,azul)
        imgui.Button("Azul ")
        imgui.PopStyleColor()
 
                      --Cinza
        imgui.PushStyleColor(imgui.Col.Button,cinza)
        imgui.Button("Cinza")
        imgui.PopStyleColor()
E ele fica assim :

1758382325395.png






Imgui Addons :

Radio Button :
Lua:
 local checked_radio = imgui.ImInt(1) --Radio button começa na opção 1
 
        imgui.RadioButton("Radio 1",checked_radio,1) --Radio button opção 1

        imgui.SameLine() --Próximo elemento na mesma linha

        imgui.RadioButton("Radio 2",checked_radio,2) --Radio button opção 2

        imgui.SameLine() --Próximo elemento na mesma linha

        imgui.RadioButton("Radio 3",checked_radio,3) --Radio button opção 3

-- Você pode criar condições como
if imgui.RadioButton("Radio 1 ", checked_radio, 1) then
        -- Seu código
    end

1757379674988.png


Combo :
Lua:
local combo = {"test","test2","test3"} -- Array de strings para o combo

 imgui.Combo("Combo 1",combo_select,combo) -- Lista com opções do combo
-- Você pode pegar valores assim

local select_combo = 1 --- Armazena o índice do item que foi selecionado

local combo_itens = {"teste","test2","test3"} -- Array dos itens

if imgui.Combo("Combo 1",select_combo,combo_itens) then

 if select_combo == 1 then Se colocar teste no Combo então ...
-- Seu código

elseif select_combo == 2 then Se colocar test2 no Combo então ...
-- Seu código

elseif select_combo == 3 then -- Se colocar test3 no Combo então ...
-- Seu código
end

1757379941887.png


ToggleButton :
Lua:
imgui.ToggleButton = require('imgui_addons').ToggleButton --Importa toggle button (Obrigatório)

toggle_status = imgui.ImBool(false) --Toggle 3 começa desligado

imgui.ToggleButton("Toggle que faz nada",toggle_status) -- ToggleButton com texto

-- Você pode pegar valores com '.v' Exemplo : toggle_status.v

1757381059390.png

Lua:
script_name("Botoes teste") -- Nome do script (Aparece no console SampFuncs)

local imgui = require "imgui" --precisa do arquivo imgui
local key = require "vkeys" -- precisa do arquivo vkeys

local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada
local arr_str = {"test","test2","test3"} --Array de strings para o combo

local checked_test = imgui.ImBool(false) --Checkbox 1 começa desmarcado
local checked_test_2 = imgui.ImBool(false) --Checkbox 2 começa desmarcado
local checked_radio = imgui.ImInt(1) --Radio button começa na opção 1
local combo_select = imgui.ImInt(0) --Combo começa no primeiro item (índice 0)

--Configuração dos addons
imgui.ToggleButton = require('imgui_addons').ToggleButton --Importa toggle button
toggle_status = imgui.ImBool(false) --Toggle 1 começa desligado
toggle_status_2 = imgui.ImBool(false) --Toggle 2 começa desligado
toggle_status_3 = imgui.ImBool(false) --Toggle 3 começa desligado
imgui.HotKey = require('imgui_addons').HotKey --Importa hotkey
imgui.Spinner = require('imgui_addons').Spinner --Importa spinner (círculo girando)
imgui.BufferingBar = require('imgui_addons').BufferingBar --Importa barra de progresso
local str_id = {"test","test2","test3"} --Array não usado

function main()
    repeat wait(0) until isSampAvailable() --Espera o SA-MP carregar
 
    sampRegisterChatCommand('addons', function() --Registra comando /addons para abrir ou fechar o menu
        menu.v = not menu.v --Abre ou fecha o menu
    end)
 
    while true do --Loop infinito
        wait(0) --Espera 0 segundos
        imgui.Process = menu.v and true --Processa ImGui se menu estiver aberto
    end
end



function imgui.OnDrawFrame() --OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
    if not menu.v then --Se menu fechado
        imgui.Process = false --Para de processar ImGui
    end
 
    if menu.v then --Se menu aberto
        imgui.SetNextWindowSize(imgui.ImVec2(400, 300), imgui.Cond.FirstUseEver) --Tamanho inicial 400x300, Cond.FirstUseEver permite fechar com X
        imgui.Begin('Aprendendo imgui', menu,imgui.WindowFlags.NoCollapse) --Título da janela, NoCollapse impede minimizar
 
        imgui.Text("Botoes") --Texto simples na janela
        imgui.Separator() --Linha horizontal separadora
 
        imgui.Checkbox("CheckBox 1",checked_test) --Checkbox que pode marcar/desmarcar
        imgui.Checkbox("CheckBox 2",checked_test_2) --Segundo checkbox
 
        imgui.Separator() --Outra linha separadora
 
        imgui.RadioButton("Radio 1",checked_radio,1) --Radio button opção 1
        imgui.SameLine() --Próximo elemento na mesma linha
        imgui.RadioButton("Radio 2",checked_radio,2) --Radio button opção 2
        imgui.SameLine() --Próximo elemento na mesma linha
        imgui.RadioButton("Radio 3",checked_radio,3) --Radio button opção 3
 
        imgui.Separator() --Linha separadora
 
        imgui.Combo("Combo 1",combo_select,arr_str) --Lista suspensa com opções do arr_str
 
        imgui.Separator() --Linha separadora
 
        imgui.Spinner(10,3) --Círculo girando, raio 10 e espessura 3
 
        imgui.Separator() --Linha separadora
 
        imgui.BufferingBar(0.5,imgui.ImVec2(200,10),false) --Barra de progresso 50%, tamanho 200x10
 
        imgui.Separator() --Linha separadora
 
        imgui.ToggleButton("##1",toggle_status) --Botão liga/desliga, ##1 é ID oculto
        imgui.ToggleButton("##2",toggle_status_2) --Segundo toggle button
        imgui.ToggleButton("Toggle que faz nada",toggle_status_3) -- ToggleButton com texto
 
 
        imgui.End() --Finaliza o código do menu
    end
end

Você precisa de imgui_addons na sua pasta Lib
Contém Radio Button,Checkbox,Combo,Spinner,Hotkey e BufferingBar


imgui.SameLine() : Deixa o próximo item na mesmo linha


Existem Parâmetros que você pode colocar dentro dos parênteses,mas não citarei nesse tutorial

Observe o RadioButton logo abaixo
Como ficou :

1757211609438.png



ImGui Notification : Pequenas janelas tipo notificação, em resumo (óbvio né)

Coloque lib_imgui_notf na sua pasta Moonloader

Lua:
local notify = import 'lib_imgui_notf.lua' --importa biblioteca de notificações (obrigatório para notification)

notify.addNotify("Título", "Texto", posição do Título, posição do texto , duração)
-- 1,2,6 = tipo 1, posição 2, duração 6 segundos
Exemplo :  notify.addNotify("Notificacao","\n Notificao sem cor",2,2,6)

Agora veja como é um exemplo básico :
Lua:
local imgui = require "imgui" --precisa do arquivo imgui

local notify = import 'lib_imgui_notf.lua' --importa biblioteca de notificações (obrigatório para notification)

local key = require "vkeys" -- precisa do arquivo vkeys para abrir ou fehcar o menu


local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada

function imgui.OnDrawFrame() --OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
    if menu.v then --Se menu aberto
        imgui.SetNextWindowSize(imgui.ImVec2(400, 300), imgui.Cond.FirstUseEver) --Tamanho inicial 400x300, Cond.FirstUseEver permite fechar com X
        imgui.Begin('Menu Notificacao', menu, imgui.WindowFlags.NoCollapse) --Título da janela, NoCollapse impede minimizar
 
        imgui.Text("Botao logo abaixo") --Texto simples na janela
 
        if imgui.Button("Aperte me") then --Botão que quando clicado executa o código dentro
            notify.addNotify("Notificacao","\n Notificao sem cor",2,2,6) --Cria notificação sem cor
        end
 
        if imgui.Button("Notificacao com cor ") then --Segundo botão para notificação colorida
            notify.addNotify("{FF0000}Notificacao","\n {FF99AA}Notificao {FFFF00}com {FF00FF}cor",2,2,6) --Notificação com cores hexadecimais
        end
 
        imgui.End() --Finaliza o código do menu
    end
end

function main()
    while true do --Loop infinito
        wait(0) --Espera 0 segundos
        if wasKeyPressed(key.VK_F3) then --Se F3 for apertado, menu abre ou fecha
            menu.v = not menu.v --.v pega o valor booleano da variável menu
        end
        imgui.Process = menu.v --O Menu será processado enquanto menu for verdadeiro
    end
end
Usando cores em Hexadecimais,Sua notificação fica mais bonita (Você pode usar cores Hex no seu Menu também)


1757239289739.png
Notifcação 👉
1757239332973.png

Use quebra de linhas (\n) para deixar a mensagem encima ou embaixo

Por quê usei imgui.WindowFlags.NoCollapse em imgui.Begin('Menu Notificacao', menu, imgui.WindowFlags.NoCollapse) ?

Isso de chama 'flags',condições que você pode colocar em seu menu,por exemplo,não deixar ele ser redimensionável,
sem Scroll,sem título,entre outros.

Aqui vai uma lista dessas flags :


🔹 WindowFlags do Lua ImGui

Controle Básico da Janela
Код:
imgui.WindowFlags.NoTitleBar     → Remove o título da janela
imgui.WindowFlags.NoResize       → Não deixa redimensionar
imgui.WindowFlags.NoMove         → Não deixa mover a janela
imgui.WindowFlags.NoCollapse     → Remove a setinha de minimizar

Tamanho e Rolagem
Код:
imgui.WindowFlags.AlwaysAutoResize        → Ajusta sozinho ao conteúdo
imgui.WindowFlags.NoScrollbar             → Remove barra de rolagem
imgui.WindowFlags.NoScrollWithMouse       → Não rola com a rodinha do mouse
imgui.WindowFlags.AlwaysVerticalScrollbar → Sempre mostra rolagem vertical

Visual e Aparência
Код:
imgui.WindowFlags.NoBackground      → Janela transparente (sem fundo)
imgui.WindowFlags.MenuBar           → Adiciona barra de menu no topo

Configurações e Foco
Код:
imgui.WindowFlags.NoSavedSettings        → Não salva posição/tamanho
imgui.WindowFlags.NoFocusOnAppearing      → Não foca quando abre
imgui.WindowFlags.NoBringToFrontOnFocus   → Não vem pra frente ao clicar

Exemplo Prático:
Lua:
-- Janela de HUD fixa (não move, não redimensiona, sem título)
imgui.Begin("Meu Menu", state,
    imgui.WindowFlags.NoTitleBar,
    imgui.WindowFlags.NoMove,
    imgui.WindowFlags.NoResize,
    imgui.WindowFlags.AlwaysAutoResize
)

💭 Dica: Use vírgulas para separar as flags, não o sinal de +


Fork Awesome (Ícones Font Awesome v5)

Precisa de forkawesome-webfont.ttf

Verifique como é o ícone ou procurar um em Icones Fork

Exemplo de um menu com Fork Awesome (Meu Projeto Atual) :


1757240561961.png


Como usar :

Você usará fa.SEU_ICONE_AQUI para colocar os icones
Onde pego os nomes dos icones ?
No arquivo fork.lua você verá várias linhas como essa


1757242019642.png


Você Irá pegar o nome do icone que esta dentro das aspas (Óbviamente)
e logo em seguida usar fa.ICONE_COPIADO ..

Obrigatório usar '..' (concatenação) antes de texto,ou deixar ele sem concatenar.(Fica só o icone se não tiver texto)
Recomendo usar dois espaços antes do texto,para organizar


Exemplo :
Lua:
imgui.Button(fa.ICON_SEARCH.."  Lupa")

Obrigatório colocar no seu codigo! 👇


Lua:
local fa = require 'fork' --fork faIcons
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
local fa_font = nil


function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig()
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/forkawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end

function imgui.TextColoredRGB(text, render_text)
    local max_float = imgui.GetWindowWidth()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
        local a = bit.band(bit.rshift(argb, 24), 0xFF)
        local r = bit.band(bit.rshift(argb, 16), 0xFF)
        local g = bit.band(bit.rshift(argb, 8), 0xFF)
        local b = bit.band(argb, 0xFF)
        return a, r, g, b
    end

    local getcolor = function(color)
        if color:sub(1, 6):upper() == 'SSSSSS' then
            local r, g, b = colors[1].x, colors[1].y, colors[1].z
            local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
            return ImVec4(r, g, b, a / 255)
        end
        local color = type(color) == 'string' and tonumber(color, 16) or color
        if type(color) ~= 'number' then return end
        local r, g, b, a = explode_argb(color)
        return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
        for w in text_:gmatch('[^\r\n]+') do
            local text, colors_, m = {}, {}, 1
            w = w:gsub('{(......)}', '{%1FF}')
            while w:find('{........}') do
                local n, k = w:find('{........}')
                local color = getcolor(w:sub(n + 1, k - 1))
                if color then
                    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
                    colors_[#colors_ + 1] = color
                    m = n
                end
                w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
            end

            local length = imgui.CalcTextSize(w)
            if render_text == 2 then
                imgui.NewLine()
                imgui.SameLine(max_float / 2 - ( length.x / 2 ))
            elseif render_text == 3 then
                imgui.NewLine()
                imgui.SameLine(max_float - length.x - 5 )
            end
            if text[0] then
                for i = 0, #text do
                    imgui.TextColored(colors_[i] or colors[1], text[i])
                    imgui.SameLine(nil, 0)
                end
                imgui.NewLine()
            else imgui.Text(w) end


        end
    end

    render_text(text)
end

Com isso no seu Código,Icones irão aparecer (Usar Obrigatóriamente)

Exemplo de como fica :

1757242675973.png

Veja o código para ter uma noção como é
Lua:
local imgui = require "imgui" --precisa do arquivo imgui
local key = require "vkeys" -- precisa do arquivo vkeys para abrir ou fechar o menu
local fa = require 'fork' --fork faIcons para usar ícones FontAwesome
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range }) --Define o range dos ícones
local fa_font = nil --Variável para armazenar a fonte dos ícones

function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/forkawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end

function imgui.TextColoredRGB(text, render_text)
    local max_float = imgui.GetWindowWidth()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
        local a = bit.band(bit.rshift(argb, 24), 0xFF)
        local r = bit.band(bit.rshift(argb, 16), 0xFF)
        local g = bit.band(bit.rshift(argb, 8), 0xFF)
        local b = bit.band(argb, 0xFF)
        return a, r, g, b
    end

    local getcolor = function(color)
        if color:sub(1, 6):upper() == 'SSSSSS' then
            local r, g, b = colors[1].x, colors[1].y, colors[1].z
            local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
            return ImVec4(r, g, b, a / 255)
        end
        local color = type(color) == 'string' and tonumber(color, 16) or color
        if type(color) ~= 'number' then return end
        local r, g, b, a = explode_argb(color)
        return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
        for w in text_:gmatch('[^\r\n]+') do
            local text, colors_, m = {}, {}, 1
            w = w:gsub('{(......)}', '{%1FF}')
            while w:find('{........}') do
                local n, k = w:find('{........}')
                local color = getcolor(w:sub(n + 1, k - 1))
                if color then
                    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
                    colors_[#colors_ + 1] = color
                    m = n
                end
                w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
            end

            local length = imgui.CalcTextSize(w)
            if render_text == 2 then
                imgui.NewLine()
                imgui.SameLine(max_float / 2 - ( length.x / 2 ))
            elseif render_text == 3 then
                imgui.NewLine()
                imgui.SameLine(max_float - length.x - 5 )
            end
            if text[0] then
                for i = 0, #text do
                    imgui.TextColored(colors_[i] or colors[1], text[i])
                    imgui.SameLine(nil, 0)
                end
                imgui.NewLine()
            else imgui.Text(w) end
        end
    end

    render_text(text)
end

local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada

function imgui.OnDrawFrame() --OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
    if menu.v then --Se menu aberto
        imgui.SetNextWindowSize(imgui.ImVec2(400, 300), imgui.Cond.FirstUseEver) --Tamanho inicial 400x300, Cond.FirstUseEver permite fechar com X
        imgui.Begin('Menu Icone', menu, imgui.WindowFlags.NoCollapse) --Título da janela, NoCollapse impede minimizar
 
        imgui.Button(fa.ICON_SEARCH.." Lupa") --Botão com ícone de lupa + texto
        imgui.Button(fa.ICON_EYE.."  Olho") --Botão com ícone de olho + texto
        imgui.Button(fa.ICON_FOLDER_OPEN.."  Pasta") --Botão com ícone de pasta + texto
        imgui.Button(fa.ICON_PHONE.. "  Telefone") --Botão com ícone de telefone + texto
        imgui.Text(fa.ICON_TELEGRAM.."  Icone do Telegram") --Texto simples com ícone do Telegram
 
        imgui.End() --Finaliza o código do menu
    end
end

function main()
    while true do --Loop infinito
        wait(0) --Espera 0 segundos
        if wasKeyPressed(key.VK_F3) then --Se F3 for apertado, menu abre ou fecha
            menu.v = not menu.v --.v pega o valor booleano da variável menu
        end
        imgui.Process = menu.v --O Menu será processado enquanto menu for verdadeiro
    end
end

Certifique-se de ter colocado forkawesome-webfont.ttf que você baixou em moonloader/resource/fonts/ !!!

Begin Child (Abas) e Collapsing Header :

Collapsing Header
Lua:
if imgui.CollapsingHeader("Collapsing Header Teste") then
        -- Seu Conteúdo/Código. Exemplo :
     imgui.Button("Clique me")
    end

Viu? Não é dificil

Exemplo :
1757248823108.png


BeginChild :

Lua:
-- Variável que controla qual aba está sendo exibida
-- Começa como 1 (ou seja, primeira aba)
local tab = 1

-- Campo de texto (até 256 caracteres)
local texto_input = imgui.ImBuffer(256)

-- Número decimal (float), começa com 5.5
local numero_float = imgui.ImFloat(5.5)

-- Número inteiro (int), começa com 25
local slider_int = imgui.ImInt(25)

-- Número decimal (float), começa com 2.5
local slider_float = imgui.ImFloat(2.5)

-- Caixa de seleção (checkbox), começa desmarcada (false)
local checkbox_teste = imgui.ImBool(false)

        -- CHILD ESQUERDO: Botões para escolher as abas
 
        -- "BeginChild" cria uma área separada dentro da janela
        -- Aqui criamos o painel da esquerda, que funciona como menu lateral
        -- Parâmetros: nome, tamanho (largura 150px, altura automática), borda (true)
        imgui.BeginChild("abas", imgui.ImVec2(150, 0), true)

            -- Cada botão altera a variável "tab"
            -- Assim conseguimos trocar o conteúdo exibido no painel da direita

            -- Botão da primeira aba
            if imgui.Button("Aba Collapse", imgui.ImVec2(135, 40)) then
                tab = 1 -- Vai para aba 1
            end

            -- Botão da segunda aba
            if imgui.Button("Aba Elementos", imgui.ImVec2(135, 40)) then
                tab = 2 -- Vai para aba 2
            end

            -- Botão da terceira aba
            if imgui.Button("Aba Vazia", imgui.ImVec2(135, 40)) then
                tab = 3 -- Vai para aba 3
            end

        -- Fecha o painel da esquerda
        imgui.EndChild()

        -- "SameLine" faz com que o próximo elemento fique na mesma linha
        -- Isso coloca o painel da direita (conteúdo) ao lado do da esquerda
        imgui.SameLine()

 
        -- CHILD DIREITO: Conteúdo da aba selecionada
 
        -- Esse painel mostra o que pertence à aba escolhida
        imgui.BeginChild("conteudo", imgui.ImVec2(0, 0), true)
            -- Verifica qual aba está ativa e chama a função correspondente
            if tab == 1 then
                renderAbaCollapse()   -- Mostra a aba 1
            elseif tab == 2 then
                renderAbaElementos()  -- Mostra a aba 2
            elseif tab == 3 then
                renderAbaVazia()      -- Mostra a aba 3
            end
        -- Fecha o painel de conteúdo
        imgui.EndChild()

        -- Fecha a janela principal do ImGui
        imgui.End()
    end
end


-- Conteúdo da Aba 1 (CollapseHeader)

function renderAbaCollapse()
    -- Texto fixo no topo da aba
    imgui.Text("Exemplo de CollapsingHeader")
    -- Linha separadora
    imgui.Separator()

    -- Primeiro CollapseHeader
    -- Cria uma seção que pode ser aberta e fechada clicando na setinha
    if imgui.CollapsingHeader("Seção de Informações") then
        -- Se a seção estiver aberta, esses textos aparecem
        imgui.Text("Essa seção pode ser expandida ou recolhida.")
        imgui.Text("Clique na setinha ao lado do título.")
    end

    -- Segundo CollapseHeader
    if imgui.CollapsingHeader("Configurações Avançadas") then
        -- Dentro da seção, criamos um checkbox
        imgui.Checkbox("Ativar opção", checkbox_teste)
        imgui.Text("Útil para esconder opções avançadas.")
    end
end

-- Conteúdo da Aba 2 (Elementos básicos)

function renderAbaElementos()
    -- Texto inicial da aba
    imgui.Text("Elementos básicos do ImGui")
    imgui.Separator()

    -- Caixa de texto para o jogador digitar
    imgui.InputText("Digite algo:", texto_input)

    -- Campo para números decimais
    imgui.InputFloat("Número decimal:", numero_float)

    -- Slider para número inteiro (0 até 100)
    imgui.SliderInt("Slider inteiro:", slider_int, 0, 100)

    -- Slider para número decimal (0.0 até 10.0)
    imgui.SliderFloat("Slider decimal:", slider_float, 0.0, 10.0)

    -- Botão que envia uma mensagem no chat quando clicado
    if imgui.Button("Clique aqui") then
        sampAddChatMessage("Você clicou no botão!", -1)
    end
end


-- Conteúdo da Aba 3 (Aba vazia)
function renderAbaVazia()
    -- Apenas um texto simples
    imgui.Text("Uma aba sem nada")
end

Vou dar exemplos com fotos :

Uma Aba sem nada :

1757247772871.png


Uma Aba com CollapsingHeader e com conteudo dentro dela :


1757247907210.png


Uma Aba com contéudo apenas,sem CollapsingHeader :

1757248063426.png


Colocar Imagens em seu Menu ImGui :

Primeiro tenha a imagem no diretório da moonloader ou guardada dentro de uma pasta da moonloader para colocar o caminho no CreateTextureFromFile
Como usar ? Aqui vai um exemplo

Lua:
local imagens = {
    foto = imgui.CreateTextureFromFile("moonloader/image/bode.png")
}
imgui.Image(imagens.foto, imgui.ImVec2(100, 70)) -- 100 largura | 70 altura
Ou apenas
Lua:
local images = imgui.CreateTextureFromFile("moonloader/image/bode.png")
imgui.Image(images, imgui.ImVec2(100, 70)) -- 100 largura | 70 altura

Certifique-se de ter a imagem no caminho correto com extensão correta

Exemplo Real :

Lua:
local imgui = require "imgui"


local key = require "vkeys"


local menu = imgui.ImBool(false)

local images = imgui.CreateTextureFromFile("moonloader/image/bode.png") -- Pega a imagem que está nesse caminho


function imgui.OnDrawFrame()
 
    if menu.v then
        imgui.SetNextWindowSize(imgui.ImVec2(200, 200), imgui.Cond.FirstUseEver)
        imgui.Begin("Menu Imagem", menu, imgui.WindowFlags.NoCollapse)
         imgui.Text("Imagem de um bode logo abaixo")
         -- Aqui é um exemplo de onde você pode botar sua imagem
 
         imgui.Image(images, imgui.ImVec2(100, 100)) -- 100 largura | 100 altura
 
 
        imgui.End()
    end
end


function main()
    while true do
        wait(0) -- Espera 0ms (mantém o loop ativo sem travar o jogo)

        -- Detecta se o jogador apertou a tecla P
        if wasKeyPressed(key.VK_P) then
            -- Alterna entre abrir/fechar o menu
            menu.v = not menu.v
        end

        -- ImGui só processa quando o menu está aberto
        imgui.Process = menu.v
    end
end

Exemplo da foto no Menu :
1757290821101.png

Como trocar a cor do Menu ImGui ?

Particularmente,sou péssimo para explicar isso
Lua:
-- Como deixar seu menu ImGui bonito no SAMP
-- Cole esse codigo antes de criar suas janelas

-- Pega as configuracoes do menu
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4

-- Deixa as bordas arredondadas (bonito)
style.WindowRounding = 8.0              -- janela principal
style.ChildWindowRounding = 6.0         -- janelas pequenas
style.FrameRounding = 4.0               -- botoes e caixas
style.GrabRounding = 4.0                -- sliders
style.ScrollbarRounding = 9             -- barra de rolagem

-- Posicao e espacamento
style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)    -- titulo no centro
style.ItemSpacing = imgui.ImVec2(8, 6)              -- espaco entre botoes
style.ItemInnerSpacing = imgui.ImVec2(6, 4)         -- espaco dentro dos botoes
style.ScrollbarSize = 14.0                          -- tamanho da barra de rolagem
style.GrabMinSize = 12.0                            -- tamanho dos puxadores

-- CORES DO MENU (tema escuro com vermelho)
-- ImVec4(vermelho, verde, azul, transparencia) - todos de 0 a 1

-- Fundo das janelas
colors[clr.WindowBg] = ImVec4(0.08, 0.08, 0.10, 0.95)      -- fundo da janela (bem escuro)
colors[clr.ChildWindowBg] = ImVec4(0.10, 0.10, 0.12, 1.00) -- fundo das abas
colors[clr.PopupBg] = ImVec4(0.12, 0.12, 0.14, 0.98)       -- fundo dos menus

-- Barra do titulo (em cima da janela)
colors[clr.TitleBg] = ImVec4(0.18, 0.05, 0.05, 1.00)       -- titulo normal
colors[clr.TitleBgActive] = ImVec4(0.40, 0.10, 0.10, 1.00) -- titulo quando clica na janela

-- Cor dos textos
colors[clr.Text] = ImVec4(1.00, 1.00, 1.00, 0.95)          -- texto normal (branco)
colors[clr.TextDisabled] = ImVec4(0.50, 0.50, 0.50, 0.70)  -- texto apagado (cinza)

-- Cores dos botoes (muda quando passa mouse e clica)
colors[clr.Button] = ImVec4(0.40, 0.12, 0.12, 1.00)        -- botao normal
colors[clr.ButtonHovered] = ImVec4(0.70, 0.20, 0.20, 1.00) -- botao com mouse em cima
colors[clr.ButtonActive] = ImVec4(0.90, 0.30, 0.30, 1.00)  -- botao sendo clicado

-- Caixas de texto (onde voce digita)
colors[clr.FrameBg] = ImVec4(0.16, 0.06, 0.06, 1.00)       -- caixa normal
colors[clr.FrameBgHovered] = ImVec4(0.30, 0.12, 0.12, 1.00)-- caixa com mouse em cima
colors[clr.FrameBgActive] = ImVec4(0.45, 0.15, 0.15, 1.00) -- caixa quando esta digitando

-- Menus que abrem e fecham
colors[clr.Header] = ImVec4(0.40, 0.12, 0.12, 1.00)        -- menu fechado
colors[clr.HeaderHovered] = ImVec4(0.70, 0.20, 0.20, 1.00) -- menu com mouse em cima
colors[clr.HeaderActive] = ImVec4(0.90, 0.30, 0.30, 1.00)  -- menu aberto

-- Checkbox (quadradinho de marcar)
colors[clr.CheckMark] = ImVec4(0.95, 0.35, 0.35, 1.00)     -- cor do "check" quando marcado

-- Sliders (barrinhas de ajustar valor)
colors[clr.SliderGrab] = ImVec4(0.85, 0.25, 0.25, 1.00)        -- bolinha do slider
colors[clr.SliderGrabActive] = ImVec4(1.00, 0.40, 0.40, 1.00)  -- bolinha quando arrasta

-- Barra de rolagem (quando tem muito conteudo)
colors[clr.ScrollbarBg] = ImVec4(0.10, 0.10, 0.10, 0.6)        -- fundo da barra
colors[clr.ScrollbarGrab] = ImVec4(0.30, 0.10, 0.10, 0.8)      -- parte que arrasta
colors[clr.ScrollbarGrabHovered] = ImVec4(0.50, 0.20, 0.20, 0.9)   -- parte que arrasta com mouse
colors[clr.ScrollbarGrabActive] = ImVec4(0.70, 0.25, 0.25, 1.0)    -- parte que arrasta clicando

-- Linhas que separam as coisas
colors[clr.Separator] = ImVec4(0.50, 0.20, 0.20, 0.60)         -- linha normal
colors[clr.SeparatorHovered] = ImVec4(0.70, 0.30, 0.30, 0.80)  -- linha com mouse
colors[clr.SeparatorActive] = ImVec4(0.90, 0.40, 0.40, 1.00)   -- linha clicando

-- COMO USAR:
-- 1. Cole esse codigo no inicio do seu script
-- 2. Depois crie suas janelas normalmente
-- 3. O menu vai ficar com esse visual automaticamente

-- COMO MUDAR AS CORES:
-- Os numeros sao: (vermelho, verde, azul, transparencia)
-- Exemplo para fazer azul: ImVec4(0.1, 0.2, 0.8, 1.0)
-- Exemplo para fazer verde: ImVec4(0.1, 0.8, 0.2, 1.0)

Não entendeu Bosta Nenhuma? Normal.
Está com preguiça de trocar as cores ou deixar as coisas sem bordas? Eu estou aqui.
Só copiar e colar no seu código

Lua:
-- 🎨 SELETOR DE CORES SIMPLES - Só copiar e colar onde quiser
local cor_tema = imgui.ImInt(1)
-- 🔹 Função simples pra mudar as cores
local function mudarCores(cor)
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    --  Suavidade das bordas e alinhamento
style.WindowRounding = 8.0
style.ChildWindowRounding = 6.0
style.FrameRounding = 4.0
style.GrabRounding = 4.0
style.ScrollbarRounding = 9
style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
style.ItemSpacing = imgui.ImVec2(8, 6)
style.ItemInnerSpacing = imgui.ImVec2(6, 4)
style.ScrollbarSize = 14.0
style.GrabMinSize = 12.0
 
    if cor == 1 then  -- Azul
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.12, 0.20, 0.28, 1.00)
        colors[clr.Button] = ImVec4(0.15, 0.25, 0.45, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.25, 0.40, 0.65, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.35, 0.55, 0.85, 1.00)
        colors[clr.Header] = ImVec4(0.15, 0.25, 0.45, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.25, 0.40, 0.65, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.35, 0.55, 0.85, 1.00)
        colors[clr.CheckMark] = ImVec4(0.40, 0.65, 0.90, 1.00)
 
 
 
    elseif cor == 2 then -- Vermelho
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.28, 0.12, 0.12, 1.00)
        colors[clr.Button] = ImVec4(0.45, 0.15, 0.15, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.65, 0.25, 0.25, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.85, 0.35, 0.35, 1.00)
        colors[clr.Header] = ImVec4(0.45, 0.15, 0.15, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.65, 0.25, 0.25, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.85, 0.35, 0.35, 1.00)
        colors[clr.CheckMark] = ImVec4(0.90, 0.40, 0.40, 1.00)
 
    elseif cor == 3 then -- Verde
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.12, 0.28, 0.16, 1.00)
        colors[clr.Button] = ImVec4(0.15, 0.45, 0.20, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.25, 0.65, 0.30, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.35, 0.85, 0.45, 1.00)
        colors[clr.Header] = ImVec4(0.15, 0.45, 0.20, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.25, 0.65, 0.30, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.35, 0.85, 0.45, 1.00)
        colors[clr.CheckMark] = ImVec4(0.40, 0.90, 0.50, 1.00)
 
    elseif cor == 4 then -- Roxo
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.28, 0.12, 0.28, 1.00)
        colors[clr.Button] = ImVec4(0.35, 0.15, 0.45, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.50, 0.25, 0.65, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.70, 0.35, 0.85, 1.00)
        colors[clr.Header] = ImVec4(0.35, 0.15, 0.45, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.50, 0.25, 0.65, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.70, 0.35, 0.85, 1.00)
        colors[clr.CheckMark] = ImVec4(0.80, 0.40, 0.90, 1.00)
 
    elseif cor == 5 then -- Laranja
        colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.28, 0.20, 0.08, 1.00)
        colors[clr.Button] = ImVec4(0.45, 0.25, 0.10, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.65, 0.40, 0.15, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.85, 0.55, 0.25, 1.00)
        colors[clr.Header] = ImVec4(0.45, 0.25, 0.10, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.65, 0.40, 0.15, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.85, 0.55, 0.25, 1.00)
        colors[clr.CheckMark] = ImVec4(0.90, 0.60, 0.30, 1.00)
    end
end


function escolhercor()
--  CollapsingHeader com seletor (cole onde quiser no seu menu)
if imgui.CollapsingHeader(" Cor do Menu") then
-- Vermelho
local red    = imgui.ImVec4(1.0, 0.0, 0.0, 1.0)

-- Azul
local blue   = imgui.ImVec4(0.0, 0.0, 1.0, 1.0)

-- Roxo (mistura de vermelho + azul)
local purple = imgui.ImVec4(0.5, 0.0, 0.5, 1.0)

-- Verde
local green  = imgui.ImVec4(0.0, 1.0, 0.0, 1.0)

-- Laranja (mistura de vermelho + verde, mas menos verde)
local orange = imgui.ImVec4(1.0, 0.5, 0.0, 1.0)

    if imgui.RadioButton(" Azul", cor_tema, 1) then
        mudarCores(1)
    end
 
    if imgui.RadioButton(" Vermelho", cor_tema, 2) then
        mudarCores(2)
    end
 
    if imgui.RadioButton(" Verde", cor_tema, 3) then
        mudarCores(3)
    end
 
    if imgui.RadioButton(" Roxo", cor_tema, 4) then
        mudarCores(4)
    end
 
    if imgui.RadioButton(" Laranja", cor_tema, 5) then
        mudarCores(5)
    end
  end
end

Apenas Chame 'escolhercor()' para renderizar o conteúdo dela

Vai ficar só uma CollapsingHeader,então não choras
Teste você mesmo
Como Fica :

1757293803325.png



Como fazer Popup no seu ImGui :

Lua:
   -- PASSO 1: Botão que abre popup
    if imgui.Button("Abrir Popup") then
        imgui.OpenPopup("MeuPopup")  -- Abre popup por nome dele
    end
 
    -- PASSO 2: Criar o popup
    if imgui.BeginPopup("MeuPopup") then -- Pegue o nome do seu Popup e use em OpenPopup
 
        imgui.Text("Conteúdo do popup")
        imgui.Separator()
 
        -- Elementos dentro do popup
        imgui.Checkbox("Checkbox", checkbox_test)
        imgui.SliderInt("Slider", slider_value, 0, 100)
 
        -- Botão para fechar (Opcional)
        if imgui.Button("Fechar") then
            imgui.CloseCurrentPopup()
        end
 
        imgui.EndPopup()  -- Fecha popup
    end

Como fica :
Untitled2.png



Como fazer ToolTip (Dica para seu mouse)


Lua:
    imgui.Button("Passe o mouse aqui")
 
        if imgui.IsItemHovered() then -- IsItemHovered = detecta se o mouse está em cima do último elemento
            imgui.BeginTooltip() -- Inicia a tooltip
            imgui.Text("Esta e uma dica util")
            imgui.Text("Aparece quando voce passa o mouse")
            imgui.Text("Pode ter varias linhas")
            imgui.EndTooltip() -- SEMPRE feche o que abriu
        end

Como fica :

Untitled3.png




Irei adicionar mais coisas depois...


Moonloader com todos os recursos já prontos,é só baixar​

Russos/Gringos não vão entender bem oque escrevi aqui,tradutor só vai estragar de vez o tutorial 😅

Créditos A TheChampGuess,aprendi quase tudo de imgui com ele

Créditos a SADFI2259X (Fork)

Tutorial no Github Tutorial Github
Veja Tutorial 2
Dê sugestões do que colocar aqui ! 😄
 

Вложения

  • imgui_addons.lua
    9.8 KB · Просмотры: 1
  • lib_imgui_notf.lua
    9.3 KB · Просмотры: 0
  • fork.lua
    32.7 KB · Просмотры: 0
  • forkawesome-webfont.rar
    128.6 KB · Просмотры: 2
Последнее редактирование:

Haru Urara

Участник
Автор темы
27
13

Tutorial feito para quem é Brasileiro

Uns tempos atrás,a moderação chutou minha bunda quando fiz um tutorial que particulamente era péssimo,
agora que me aprofundei em Moon Imgui,posso fazer o tutorial sem ter uma crise existencial novamente...

Dependências :

Lua para windows
SA-MP 0.3.7
Asi Loader
Moonloader

ImGui Lua

Aviso :

A IDE é seu critério,gosto de Notepad ++ e Sublime Text com Auto Complete de ImGui ou Moonloader para menu grande

Não precisa ter um computador incrível para progamar Lua,apenas tenha força de vontade,eu mesmo uso um notebook de 1.0 GHz e estou vivo 💀
Não tenha pressa para aprender. Progamação é treino,persistência e ,corrigir erros

Inicio :​

Oque saber no inicio?
obviamente saber o básico de Lua, você pode ver cursos no youtube(recomendo CFB Cursos), ou ler(nerd)
não achar que vai fazer um menu complexo em 2 segundos
saber lidar com erros
Nâo vou ensinar Lua aqui,crie vergonha na cara e vá estudar!
---------------------------------------------------------------------------------------------------------------------------------------------------

Básico :

Lua:
local imgui = require "imgui"  --precisa do arquivo imgui em sua lib

function imgui.OnDrawFrame() -- OnDrawFrame é um nome obrigatório pois contém o conteúdo do menu
  imgui.Begin('Janela ImGui') --Nome da Janela
  imgui.Text('Texto da janela') --Texto dentro da janela
  imgui.End() --Finaliza o codigo do menu
end

function main() -- Obrigatório,sem function main,seu menu nao vai abrir
  imgui.Process = true -- O Menu será processado enquanto imgui.Process for verdadeiro
end -- Finaliza o main

Isso Vira um menu redimensionável e não fechável
Посмотреть вложение 277898

Ainda Básico :

Checkbox :
Lua:
local checkbox = imgui.ImBool(false) -- Variável da checkbox,pode ter qualquer nome,false para começar desmarcado

imgui.Checkbox("Checkbox",checkbox)  -- Você pode acessar o valor da checkbox se ativado ou não com '.v' Como : checkbox.v

Посмотреть вложение 278018

Slider Int Slider Float
Lua:
local sliderint = imgui.ImInt(0) -- Valor inteiro,começa em zero
 
imgui.SliderInt("Slider Inteiro",sliderint,0,10) -- Vai de 0 a 10

--Você pode pegar os valores do slider com '.v' Exemplo : sliderint.v

Посмотреть вложение 278015

Lua:
local sliderfloat = imgui.ImFloat(0.0) -- Valor Decimal,começa em 0.0

imgui.SliderFloat("Slider Decimal ",sliderfloat,0.0,100.0) -- Vai de 0.0 a 100.0

--Você pode pegar os valores do slider com '.v' Exemplo : sliderfloat.v

Посмотреть вложение 278016
Input Text (Caixinhas de texto)
Lua:
local text = imgui.ImBuffer(256) -- Variável do Input Text,Vai até 256 letras(máximo)

imgui.InputText("Adicione um texto",text)

--Você pode pegar os valores dos Input's com '.v' Exemplo : text.v

Посмотреть вложение 278017

Juntando Tudo :

Lua:
local imgui = require "imgui" --precisa do arquivo imgui

local key = require "vkeys" -- precisa do arquivo vkeys

local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada

local sliderinteiro = imgui.ImInt(0) --Slider começa em zero

local sliderdecimal = imgui.ImFloat(0.0) --Começa em 0.0

local texto = imgui.ImBuffer(256) -- Vai até 256 letras (Máximo)

local checkbox = imgui.ImBool(false) --Começa desmarcado o checkbox

function imgui.OnDrawFrame() -- OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
if menu.v then --sem isso,o botao de fechar nao funciona
imgui.SetNextWindowSize(imgui.ImVec2(350, 200), imgui.Cond.FirstUseEver) --Seta a posição inicial do menu com largura e altura,Cond.FirstUseEver permite fechar a janela com um X no canto superior direito
  imgui.Begin('Janela ImGui',menu) --usado para controlar o abre e fecha
 
  imgui.Text('Texto da janela') --Texto dentro da janela
 
  imgui.Button("Clique me") --Botao basico sem nada de especial,faz nada
 
  imgui.SliderInt("Slider Inteiro",sliderinteiro,0 ,10) -- vai de zero a 10
 
  imgui.SliderFloat("Slider Decimal",sliderdecimal,0.0,10.0) --Vai de 0.0 até 10.0
 
  imgui.Checkbox("Checkbox",checkbox) --Checkbox
 
  imgui.InputText("Adicione um texto",texto) --Caixa de texto compatível com letras latinas
 
  imgui.End() --Finaliza o codigo do menu
  end
end


function main()
  while true do --enquanto verdadeiro vai esperar 0 segundos e etc.
    wait(0) -- espera 0 segundos
    if wasKeyPressed(key.VK_F2) then --Se F2 for apertado,Menu abre ou fecha
        menu.v = not menu.v -- .v pega o valor booleano da variavel menu
    end
    imgui.Process = menu.v -- O Menu será processado enquanto menu for verdadeiro
  end
end



Como ficou :
Посмотреть вложение 277899


InputInt e InputFloat :

Lua:
           local input1 = imgui.ImInt(0) -- Valor inteiro,começa em zero
            local input2 = imgui.ImFloat(0.0) -- Valor decimal,começa em zero

            imgui.InputInt("Input1", input1) -- Caixa de texto so que de numeros inteiros e com botão + e -
            imgui.InputFloat("Input2", input2) -- Caixa de texto de valor decimal

Como fica :
Посмотреть вложение 279196


Como definir o tamanho de um botão e sua cor?​

Usando ImVec2 e ImVec4 isso é possivel.
Como definir o tamanho :

Lua:
imgui.Button("Meu Botão", imgui.ImVec2(200, 40))
                             Explicação
imgui.Button(texto, imgui.ImVec2(largura, altura))

Aqui vão exemplos de botões :
Lua:
-- Botão quadrado

imgui.Button("Quadrado", imgui.ImVec2(50, 50))


-- Botão largo

imgui.Button("Largo", imgui.ImVec2(300, 30))


-- Botão fino

imgui.Button("Fino", imgui.ImVec2(100, 20))

Como fica :
Посмотреть вложение 278664
Claro que não fica tão legal,recomendo usar as 'flags windows' para deixar sem as bordas.
Você também pode usar imgui.PushItemWidth()

Exemplo Real :

Lua:
imgui.PushItemWidth(20)
imgui.Button("Botão")


imgui.PushItemWidth(50)
imgui.SliderInt("Slider", sliderint, 0, 10)

imgui.PushItemWidth(50)
imgui.Checkbox("Checkbox",checkbox)

Посмотреть вложение 278665




Como escolher cor do botão com ImVec4? :

Lua:
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(r,g,b,a))

-- Seu botão

imgui.PopStyleColor() -- termina a aplicação das cores(Obrigatório)

📌 Exemplo básico:

Lua:
imgui.PushStyleColor(imgui.Col.Button, imgui.ImVec4(0.2, 0.6, 1.0, 1.0)) -- Azul claro

if imgui.Button("Clique Aqui", imgui.ImVec2(200, 40)) then
    sampAddChatMessage("Você clicou no botão!", 0xFFAA00)
end

imgui.PopStyleColor()


Notas:
• Os valores do ImVec4 vão de 0.0 a 1.0 (não use 255!).
• Ordem: vermelho, verde, azul, alpha (transparência).
• Sempre use PopStyleColor() depois para resetar o estilo.



Exemplos de cores:

Lua:
imgui.ImVec4(1.0, 0.0, 0.0, 1.0) -- vermelho
imgui.ImVec4(0.0, 1.0, 0.0, 1.0) -- verde
imgui.ImVec4(0.2, 0.6, 1.0, 1.0) -- azul claro
imgui.ImVec4(0.7, 0.7, 0.7, 1.0) -- cinza claro

Exemplo Real :

Lua:
local vermelho = imgui.ImVec4(1.0, 0.0, 0.0, 1.0) -- vermelho
local verde = imgui.ImVec4(0.0, 1.0, 0.0, 1.0) -- verde
local azul = imgui.ImVec4(0.2, 0.6, 1.0, 1.0) -- azul claro
local cinza = imgui.ImVec4(0.7, 0.7, 0.7, 1.0) -- cinza claro

                    --Vermelho
        imgui.PushStyleColor(imgui.Col.Button,vermelho)
        imgui.Button("Vermelho")
        imgui.PopStyleColor()
 
                      --Verde
        imgui.PushStyleColor(imgui.Col.Button,verde)
        imgui.Button("Verde")
        imgui.PopStyleColor()
 
                       --Azul
        imgui.PushStyleColor(imgui.Col.Button,azul)
        imgui.Button("Azul ")
        imgui.PopStyleColor()
 
                      --Cinza
        imgui.PushStyleColor(imgui.Col.Button,cinza)
        imgui.Button("Cinza")
        imgui.PopStyleColor()
E ele fica assim :

Посмотреть вложение 278663





Imgui Addons :

Radio Button :
Lua:
 local checked_radio = imgui.ImInt(1) --Radio button começa na opção 1
 
        imgui.RadioButton("Radio 1",checked_radio,1) --Radio button opção 1

        imgui.SameLine() --Próximo elemento na mesma linha

        imgui.RadioButton("Radio 2",checked_radio,2) --Radio button opção 2

        imgui.SameLine() --Próximo elemento na mesma linha

        imgui.RadioButton("Radio 3",checked_radio,3) --Radio button opção 3

-- Você pode criar condições como
if imgui.RadioButton("Radio 1 ", checked_radio, 1) then
        -- Seu código
    end

Посмотреть вложение 278020

Combo :
Lua:
local combo = {"test","test2","test3"} -- Array de strings para o combo

 imgui.Combo("Combo 1",combo_select,combo) -- Lista com opções do combo
-- Você pode pegar valores assim

local select_combo = 1 --- Armazena o índice do item que foi selecionado

local combo_itens = {"teste","test2","test3"} -- Array dos itens

if imgui.Combo("Combo 1",select_combo,combo_itens) then

 if select_combo == 1 then Se colocar teste no Combo então ...
-- Seu código

elseif select_combo == 2 then Se colocar test2 no Combo então ...
-- Seu código

elseif select_combo == 3 then -- Se colocar test3 no Combo então ...
-- Seu código
end

Посмотреть вложение 278022

ToggleButton :
Lua:
imgui.ToggleButton = require('imgui_addons').ToggleButton --Importa toggle button (Obrigatório)

toggle_status = imgui.ImBool(false) --Toggle 3 começa desligado

imgui.ToggleButton("Toggle que faz nada",toggle_status) -- ToggleButton com texto

-- Você pode pegar valores com '.v' Exemplo : toggle_status.v

Посмотреть вложение 278023
Lua:
script_name("Botoes teste") -- Nome do script (Aparece no console SampFuncs)

local imgui = require "imgui" --precisa do arquivo imgui
local key = require "vkeys" -- precisa do arquivo vkeys

local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada
local arr_str = {"test","test2","test3"} --Array de strings para o combo

local checked_test = imgui.ImBool(false) --Checkbox 1 começa desmarcado
local checked_test_2 = imgui.ImBool(false) --Checkbox 2 começa desmarcado
local checked_radio = imgui.ImInt(1) --Radio button começa na opção 1
local combo_select = imgui.ImInt(0) --Combo começa no primeiro item (índice 0)

--Configuração dos addons
imgui.ToggleButton = require('imgui_addons').ToggleButton --Importa toggle button
toggle_status = imgui.ImBool(false) --Toggle 1 começa desligado
toggle_status_2 = imgui.ImBool(false) --Toggle 2 começa desligado
toggle_status_3 = imgui.ImBool(false) --Toggle 3 começa desligado
imgui.HotKey = require('imgui_addons').HotKey --Importa hotkey
imgui.Spinner = require('imgui_addons').Spinner --Importa spinner (círculo girando)
imgui.BufferingBar = require('imgui_addons').BufferingBar --Importa barra de progresso
local str_id = {"test","test2","test3"} --Array não usado

function main()
    repeat wait(0) until isSampAvailable() --Espera o SA-MP carregar
 
    sampRegisterChatCommand('addons', function() --Registra comando /addons para abrir ou fechar o menu
        menu.v = not menu.v --Abre ou fecha o menu
    end)
 
    while true do --Loop infinito
        wait(0) --Espera 0 segundos
        imgui.Process = menu.v and true --Processa ImGui se menu estiver aberto
    end
end



function imgui.OnDrawFrame() --OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
    if not menu.v then --Se menu fechado
        imgui.Process = false --Para de processar ImGui
    end
 
    if menu.v then --Se menu aberto
        imgui.SetNextWindowSize(imgui.ImVec2(400, 300), imgui.Cond.FirstUseEver) --Tamanho inicial 400x300, Cond.FirstUseEver permite fechar com X
        imgui.Begin('Aprendendo imgui', menu,imgui.WindowFlags.NoCollapse) --Título da janela, NoCollapse impede minimizar
 
        imgui.Text("Botoes") --Texto simples na janela
        imgui.Separator() --Linha horizontal separadora
 
        imgui.Checkbox("CheckBox 1",checked_test) --Checkbox que pode marcar/desmarcar
        imgui.Checkbox("CheckBox 2",checked_test_2) --Segundo checkbox
 
        imgui.Separator() --Outra linha separadora
 
        imgui.RadioButton("Radio 1",checked_radio,1) --Radio button opção 1
        imgui.SameLine() --Próximo elemento na mesma linha
        imgui.RadioButton("Radio 2",checked_radio,2) --Radio button opção 2
        imgui.SameLine() --Próximo elemento na mesma linha
        imgui.RadioButton("Radio 3",checked_radio,3) --Radio button opção 3
 
        imgui.Separator() --Linha separadora
 
        imgui.Combo("Combo 1",combo_select,arr_str) --Lista suspensa com opções do arr_str
 
        imgui.Separator() --Linha separadora
 
        imgui.Spinner(10,3) --Círculo girando, raio 10 e espessura 3
 
        imgui.Separator() --Linha separadora
 
        imgui.BufferingBar(0.5,imgui.ImVec2(200,10),false) --Barra de progresso 50%, tamanho 200x10
 
        imgui.Separator() --Linha separadora
 
        imgui.ToggleButton("##1",toggle_status) --Botão liga/desliga, ##1 é ID oculto
        imgui.ToggleButton("##2",toggle_status_2) --Segundo toggle button
        imgui.ToggleButton("Toggle que faz nada",toggle_status_3) -- ToggleButton com texto
 
 
        imgui.End() --Finaliza o código do menu
    end
end

Você precisa de imgui_addons na sua pasta Lib
Contém Radio Button,Checkbox,Combo,Spinner,Hotkey e BufferingBar


imgui.SameLine() : Deixa o próximo item na mesmo linha


Existem Parâmetros que você pode colocar dentro dos parênteses,mas não citarei nesse tutorial

Observe o RadioButton logo abaixo
Como ficou :

Посмотреть вложение 277900



ImGui Notification : Pequenas janelas tipo notificação, em resumo (óbvio né)

Coloque lib_imgui_notf na sua pasta Moonloader

Lua:
local notify = import 'lib_imgui_notf.lua' --importa biblioteca de notificações (obrigatório para notification)

notify.addNotify("Título", "Texto", posição do Título, posição do texto , duração)
-- 1,2,6 = tipo 1, posição 2, duração 6 segundos
Exemplo :  notify.addNotify("Notificacao","\n Notificao sem cor",2,2,6)

Agora veja como é um exemplo básico :
Lua:
local imgui = require "imgui" --precisa do arquivo imgui

local notify = import 'lib_imgui_notf.lua' --importa biblioteca de notificações (obrigatório para notification)

local key = require "vkeys" -- precisa do arquivo vkeys para abrir ou fehcar o menu


local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada

function imgui.OnDrawFrame() --OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
    if menu.v then --Se menu aberto
        imgui.SetNextWindowSize(imgui.ImVec2(400, 300), imgui.Cond.FirstUseEver) --Tamanho inicial 400x300, Cond.FirstUseEver permite fechar com X
        imgui.Begin('Menu Notificacao', menu, imgui.WindowFlags.NoCollapse) --Título da janela, NoCollapse impede minimizar
 
        imgui.Text("Botao logo abaixo") --Texto simples na janela
 
        if imgui.Button("Aperte me") then --Botão que quando clicado executa o código dentro
            notify.addNotify("Notificacao","\n Notificao sem cor",2,2,6) --Cria notificação sem cor
        end
 
        if imgui.Button("Notificacao com cor ") then --Segundo botão para notificação colorida
            notify.addNotify("{FF0000}Notificacao","\n {FF99AA}Notificao {FFFF00}com {FF00FF}cor",2,2,6) --Notificação com cores hexadecimais
        end
 
        imgui.End() --Finaliza o código do menu
    end
end

function main()
    while true do --Loop infinito
        wait(0) --Espera 0 segundos
        if wasKeyPressed(key.VK_F3) then --Se F3 for apertado, menu abre ou fecha
            menu.v = not menu.v --.v pega o valor booleano da variável menu
        end
        imgui.Process = menu.v --O Menu será processado enquanto menu for verdadeiro
    end
end
Usando cores em Hexadecimais,Sua notificação fica mais bonita (Você pode usar cores Hex no seu Menu também)


Посмотреть вложение 277915 Notifcação 👉 Посмотреть вложение 277916

Use quebra de linhas (\n) para deixar a mensagem encima ou embaixo


Por quê usei imgui.WindowFlags.NoCollapse em imgui.Begin('Menu Notificacao', menu, imgui.WindowFlags.NoCollapse) ?

Isso de chama 'flags',condições que você pode colocar em seu menu,por exemplo,não deixar ele ser redimensionável,
sem Scroll,sem título,entre outros.
Aqui vai uma lista dessas flags :


🔹 WindowFlags do Lua ImGui

Controle Básico da Janela
Код:
imgui.WindowFlags.NoTitleBar     → Remove o título da janela
imgui.WindowFlags.NoResize       → Não deixa redimensionar
imgui.WindowFlags.NoMove         → Não deixa mover a janela
imgui.WindowFlags.NoCollapse     → Remove a setinha de minimizar

Tamanho e Rolagem
Код:
imgui.WindowFlags.AlwaysAutoResize        → Ajusta sozinho ao conteúdo
imgui.WindowFlags.NoScrollbar             → Remove barra de rolagem
imgui.WindowFlags.NoScrollWithMouse       → Não rola com a rodinha do mouse
imgui.WindowFlags.AlwaysVerticalScrollbar → Sempre mostra rolagem vertical

Visual e Aparência
Код:
imgui.WindowFlags.NoBackground      → Janela transparente (sem fundo)
imgui.WindowFlags.MenuBar           → Adiciona barra de menu no topo

Configurações e Foco
Код:
imgui.WindowFlags.NoSavedSettings        → Não salva posição/tamanho
imgui.WindowFlags.NoFocusOnAppearing      → Não foca quando abre
imgui.WindowFlags.NoBringToFrontOnFocus   → Não vem pra frente ao clicar

Exemplo Prático:
Lua:
-- Janela de HUD fixa (não move, não redimensiona, sem título)
imgui.Begin("Meu Menu", state,
    imgui.WindowFlags.NoTitleBar,
    imgui.WindowFlags.NoMove,
    imgui.WindowFlags.NoResize,
    imgui.WindowFlags.AlwaysAutoResize
)

💭 Dica: Use vírgulas para separar as flags, não o sinal de +


Fork Awesome (Ícones Font Awesome v5)

Precisa de forkawesome-webfont.ttf

Verifique como é o ícone ou procurar um em Icones Fork

Exemplo de um menu com Fork Awesome (Meu Projeto Atual) :

Посмотреть вложение 277918


Como usar :

Você usará fa.SEU_ICONE_AQUI para colocar os icones
Onde pego os nomes dos icones ?
No arquivo fork.lua você verá várias linhas como essa


Посмотреть вложение 277919

Você Irá pegar o nome do icone que esta dentro das aspas (Óbviamente)
e logo em seguida usar fa.ICONE_COPIADO ..

Obrigatório usar '..' (concatenação) antes de texto,ou deixar ele sem concatenar.(Fica só o icone se não tiver texto)
Recomendo usar dois espaços antes do texto,para organizar


Exemplo :
Lua:
imgui.Button(fa.ICON_SEARCH.."  Lupa")

Obrigatório colocar no seu codigo! 👇


Lua:
local fa = require 'fork' --fork faIcons
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
local fa_font = nil


function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig()
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fontawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end

function imgui.TextColoredRGB(text, render_text)
    local max_float = imgui.GetWindowWidth()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
        local a = bit.band(bit.rshift(argb, 24), 0xFF)
        local r = bit.band(bit.rshift(argb, 16), 0xFF)
        local g = bit.band(bit.rshift(argb, 8), 0xFF)
        local b = bit.band(argb, 0xFF)
        return a, r, g, b
    end

    local getcolor = function(color)
        if color:sub(1, 6):upper() == 'SSSSSS' then
            local r, g, b = colors[1].x, colors[1].y, colors[1].z
            local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
            return ImVec4(r, g, b, a / 255)
        end
        local color = type(color) == 'string' and tonumber(color, 16) or color
        if type(color) ~= 'number' then return end
        local r, g, b, a = explode_argb(color)
        return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
        for w in text_:gmatch('[^\r\n]+') do
            local text, colors_, m = {}, {}, 1
            w = w:gsub('{(......)}', '{%1FF}')
            while w:find('{........}') do
                local n, k = w:find('{........}')
                local color = getcolor(w:sub(n + 1, k - 1))
                if color then
                    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
                    colors_[#colors_ + 1] = color
                    m = n
                end
                w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
            end

            local length = imgui.CalcTextSize(w)
            if render_text == 2 then
                imgui.NewLine()
                imgui.SameLine(max_float / 2 - ( length.x / 2 ))
            elseif render_text == 3 then
                imgui.NewLine()
                imgui.SameLine(max_float - length.x - 5 )
            end
            if text[0] then
                for i = 0, #text do
                    imgui.TextColored(colors_[i] or colors[1], text[i])
                    imgui.SameLine(nil, 0)
                end
                imgui.NewLine()
            else imgui.Text(w) end


        end
    end

    render_text(text)
end

Com isso no seu Código,Icones irão aparecer (Usar Obrigatóriamente)

Exemplo de como fica :

Посмотреть вложение 277920

Veja o código para ter uma noção como é
Lua:
local imgui = require "imgui" --precisa do arquivo imgui
local key = require "vkeys" -- precisa do arquivo vkeys para abrir ou fechar o menu
local fa = require 'fork' --fork faIcons para usar ícones FontAwesome
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range }) --Define o range dos ícones
local fa_font = nil --Variável para armazenar a fonte dos ícones

function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
        font_config.MergeMode = true
        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/forkawesome-webfont.ttf', 14.0, font_config, fa_glyph_ranges)
    end
end

function imgui.TextColoredRGB(text, render_text)
    local max_float = imgui.GetWindowWidth()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local ImVec4 = imgui.ImVec4

    local explode_argb = function(argb)
        local a = bit.band(bit.rshift(argb, 24), 0xFF)
        local r = bit.band(bit.rshift(argb, 16), 0xFF)
        local g = bit.band(bit.rshift(argb, 8), 0xFF)
        local b = bit.band(argb, 0xFF)
        return a, r, g, b
    end

    local getcolor = function(color)
        if color:sub(1, 6):upper() == 'SSSSSS' then
            local r, g, b = colors[1].x, colors[1].y, colors[1].z
            local a = tonumber(color:sub(7, 8), 16) or colors[1].w * 255
            return ImVec4(r, g, b, a / 255)
        end
        local color = type(color) == 'string' and tonumber(color, 16) or color
        if type(color) ~= 'number' then return end
        local r, g, b, a = explode_argb(color)
        return imgui.ImColor(r, g, b, a):GetVec4()
    end

    local render_text = function(text_)
        for w in text_:gmatch('[^\r\n]+') do
            local text, colors_, m = {}, {}, 1
            w = w:gsub('{(......)}', '{%1FF}')
            while w:find('{........}') do
                local n, k = w:find('{........}')
                local color = getcolor(w:sub(n + 1, k - 1))
                if color then
                    text[#text], text[#text + 1] = w:sub(m, n - 1), w:sub(k + 1, #w)
                    colors_[#colors_ + 1] = color
                    m = n
                end
                w = w:sub(1, n - 1) .. w:sub(k + 1, #w)
            end

            local length = imgui.CalcTextSize(w)
            if render_text == 2 then
                imgui.NewLine()
                imgui.SameLine(max_float / 2 - ( length.x / 2 ))
            elseif render_text == 3 then
                imgui.NewLine()
                imgui.SameLine(max_float - length.x - 5 )
            end
            if text[0] then
                for i = 0, #text do
                    imgui.TextColored(colors_[i] or colors[1], text[i])
                    imgui.SameLine(nil, 0)
                end
                imgui.NewLine()
            else imgui.Text(w) end
        end
    end

    render_text(text)
end

local menu = imgui.ImBool(false) --Valor booleano false,janela começa fechada

function imgui.OnDrawFrame() --OnDrawFrame é nome obrigatório pois contém o conteúdo do menu
    if menu.v then --Se menu aberto
        imgui.SetNextWindowSize(imgui.ImVec2(400, 300), imgui.Cond.FirstUseEver) --Tamanho inicial 400x300, Cond.FirstUseEver permite fechar com X
        imgui.Begin('Menu Icone', menu, imgui.WindowFlags.NoCollapse) --Título da janela, NoCollapse impede minimizar
 
        imgui.Button(fa.ICON_SEARCH.." Lupa") --Botão com ícone de lupa + texto
        imgui.Button(fa.ICON_EYE.."  Olho") --Botão com ícone de olho + texto
        imgui.Button(fa.ICON_FOLDER_OPEN.."  Pasta") --Botão com ícone de pasta + texto
        imgui.Button(fa.ICON_PHONE.. "  Telefone") --Botão com ícone de telefone + texto
        imgui.Text(fa.ICON_TELEGRAM.."  Icone do Telegram") --Texto simples com ícone do Telegram
 
        imgui.End() --Finaliza o código do menu
    end
end

function main()
    while true do --Loop infinito
        wait(0) --Espera 0 segundos
        if wasKeyPressed(key.VK_F3) then --Se F3 for apertado, menu abre ou fecha
            menu.v = not menu.v --.v pega o valor booleano da variável menu
        end
        imgui.Process = menu.v --O Menu será processado enquanto menu for verdadeiro
    end
end

Certifique-se de ter colocado forkawesome-webfont.ttf que você baixou em moonloader/resource/fonts/ !!!

Begin Child (Abas) e Collapsing Header :

Collapsing Header
Lua:
if imgui.CollapsingHeader("Collapsing Header Teste") then
        -- Seu Conteúdo/Código. Exemplo :
     imgui.Button("Clique me")
    end

Viu? Não é dificil

Exemplo :
Посмотреть вложение 277925


BeginChild :

Lua:
-- Variável que controla qual aba está sendo exibida
-- Começa como 1 (ou seja, primeira aba)
local tab = 1

-- Campo de texto (até 256 caracteres)
local texto_input = imgui.ImBuffer(256)

-- Número decimal (float), começa com 5.5
local numero_float = imgui.ImFloat(5.5)

-- Número inteiro (int), começa com 25
local slider_int = imgui.ImInt(25)

-- Número decimal (float), começa com 2.5
local slider_float = imgui.ImFloat(2.5)

-- Caixa de seleção (checkbox), começa desmarcada (false)
local checkbox_teste = imgui.ImBool(false)

        -- CHILD ESQUERDO: Botões para escolher as abas
 
        -- "BeginChild" cria uma área separada dentro da janela
        -- Aqui criamos o painel da esquerda, que funciona como menu lateral
        -- Parâmetros: nome, tamanho (largura 150px, altura automática), borda (true)
        imgui.BeginChild("abas", imgui.ImVec2(150, 0), true)

            -- Cada botão altera a variável "tab"
            -- Assim conseguimos trocar o conteúdo exibido no painel da direita

            -- Botão da primeira aba
            if imgui.Button("Aba Collapse", imgui.ImVec2(135, 40)) then
                tab = 1 -- Vai para aba 1
            end

            -- Botão da segunda aba
            if imgui.Button("Aba Elementos", imgui.ImVec2(135, 40)) then
                tab = 2 -- Vai para aba 2
            end

            -- Botão da terceira aba
            if imgui.Button("Aba Vazia", imgui.ImVec2(135, 40)) then
                tab = 3 -- Vai para aba 3
            end

        -- Fecha o painel da esquerda
        imgui.EndChild()

        -- "SameLine" faz com que o próximo elemento fique na mesma linha
        -- Isso coloca o painel da direita (conteúdo) ao lado do da esquerda
        imgui.SameLine()

 
        -- CHILD DIREITO: Conteúdo da aba selecionada
 
        -- Esse painel mostra o que pertence à aba escolhida
        imgui.BeginChild("conteudo", imgui.ImVec2(0, 0), true)
            -- Verifica qual aba está ativa e chama a função correspondente
            if tab == 1 then
                renderAbaCollapse()   -- Mostra a aba 1
            elseif tab == 2 then
                renderAbaElementos()  -- Mostra a aba 2
            elseif tab == 3 then
                renderAbaVazia()      -- Mostra a aba 3
            end
        -- Fecha o painel de conteúdo
        imgui.EndChild()

        -- Fecha a janela principal do ImGui
        imgui.End()
    end
end


-- Conteúdo da Aba 1 (CollapseHeader)

function renderAbaCollapse()
    -- Texto fixo no topo da aba
    imgui.Text("Exemplo de CollapsingHeader")
    -- Linha separadora
    imgui.Separator()

    -- Primeiro CollapseHeader
    -- Cria uma seção que pode ser aberta e fechada clicando na setinha
    if imgui.CollapsingHeader("Seção de Informações") then
        -- Se a seção estiver aberta, esses textos aparecem
        imgui.Text("Essa seção pode ser expandida ou recolhida.")
        imgui.Text("Clique na setinha ao lado do título.")
    end

    -- Segundo CollapseHeader
    if imgui.CollapsingHeader("Configurações Avançadas") then
        -- Dentro da seção, criamos um checkbox
        imgui.Checkbox("Ativar opção", checkbox_teste)
        imgui.Text("Útil para esconder opções avançadas.")
    end
end

-- Conteúdo da Aba 2 (Elementos básicos)

function renderAbaElementos()
    -- Texto inicial da aba
    imgui.Text("Elementos básicos do ImGui")
    imgui.Separator()

    -- Caixa de texto para o jogador digitar
    imgui.InputText("Digite algo:", texto_input)

    -- Campo para números decimais
    imgui.InputFloat("Número decimal:", numero_float)

    -- Slider para número inteiro (0 até 100)
    imgui.SliderInt("Slider inteiro:", slider_int, 0, 100)

    -- Slider para número decimal (0.0 até 10.0)
    imgui.SliderFloat("Slider decimal:", slider_float, 0.0, 10.0)

    -- Botão que envia uma mensagem no chat quando clicado
    if imgui.Button("Clique aqui") then
        sampAddChatMessage("Você clicou no botão!", -1)
    end
end


-- Conteúdo da Aba 3 (Aba vazia)
function renderAbaVazia()
    -- Apenas um texto simples
    imgui.Text("Uma aba sem nada")
end

Vou dar exemplos com fotos :

Uma Aba sem nada :

Посмотреть вложение 277922

Uma Aba com CollapsingHeader e com conteudo dentro dela :


Посмотреть вложение 277923

Uma Aba com contéudo apenas,sem CollapsingHeader :

Посмотреть вложение 277924


Colocar Imagens em seu Menu ImGui :

Primeiro tenha a imagem no diretório da moonloader ou guardada dentro de uma pasta da moonloader para colocar o caminho no CreateTextureFromFile
Como usar ? Aqui vai um exemplo

Lua:
local imagens = {
    foto = imgui.CreateTextureFromFile("moonloader/image/bode.png")
}
imgui.Image(imagens.foto, imgui.ImVec2(100, 70)) -- 100 largura | 70 altura
Ou apenas
Lua:
local images = imgui.CreateTextureFromFile("moonloader/image/bode.png")
imgui.Image(images, imgui.ImVec2(100, 70)) -- 100 largura | 70 altura

Certifique-se de ter a imagem no caminho correto com extensão correta

Exemplo Real :

Lua:
local imgui = require "imgui"


local key = require "vkeys"


local menu = imgui.ImBool(false)

local images = imgui.CreateTextureFromFile("moonloader/image/bode.png") -- Pega a imagem que está nesse caminho


function imgui.OnDrawFrame()
 
    if menu.v then
        imgui.SetNextWindowSize(imgui.ImVec2(200, 200), imgui.Cond.FirstUseEver)
        imgui.Begin("Menu Imagem", menu, imgui.WindowFlags.NoCollapse)
         imgui.Text("Imagem de um bode logo abaixo")
         -- Aqui é um exemplo de onde você pode botar sua imagem
 
         imgui.Image(images, imgui.ImVec2(100, 100)) -- 100 largura | 100 altura
 
 
        imgui.End()
    end
end


function main()
    while true do
        wait(0) -- Espera 0ms (mantém o loop ativo sem travar o jogo)

        -- Detecta se o jogador apertou a tecla P
        if wasKeyPressed(key.VK_P) then
            -- Alterna entre abrir/fechar o menu
            menu.v = not menu.v
        end

        -- ImGui só processa quando o menu está aberto
        imgui.Process = menu.v
    end
end

Exemplo da foto no Menu :
Посмотреть вложение 277961

Como trocar a cor do Menu ImGui ?

Particularmente,sou péssimo para explicar isso
Lua:
-- Como deixar seu menu ImGui bonito no SAMP
-- Cole esse codigo antes de criar suas janelas

-- Pega as configuracoes do menu
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4

-- Deixa as bordas arredondadas (bonito)
style.WindowRounding = 8.0              -- janela principal
style.ChildWindowRounding = 6.0         -- janelas pequenas
style.FrameRounding = 4.0               -- botoes e caixas
style.GrabRounding = 4.0                -- sliders
style.ScrollbarRounding = 9             -- barra de rolagem

-- Posicao e espacamento
style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)    -- titulo no centro
style.ItemSpacing = imgui.ImVec2(8, 6)              -- espaco entre botoes
style.ItemInnerSpacing = imgui.ImVec2(6, 4)         -- espaco dentro dos botoes
style.ScrollbarSize = 14.0                          -- tamanho da barra de rolagem
style.GrabMinSize = 12.0                            -- tamanho dos puxadores

-- CORES DO MENU (tema escuro com vermelho)
-- ImVec4(vermelho, verde, azul, transparencia) - todos de 0 a 1

-- Fundo das janelas
colors[clr.WindowBg] = ImVec4(0.08, 0.08, 0.10, 0.95)      -- fundo da janela (bem escuro)
colors[clr.ChildWindowBg] = ImVec4(0.10, 0.10, 0.12, 1.00) -- fundo das abas
colors[clr.PopupBg] = ImVec4(0.12, 0.12, 0.14, 0.98)       -- fundo dos menus

-- Barra do titulo (em cima da janela)
colors[clr.TitleBg] = ImVec4(0.18, 0.05, 0.05, 1.00)       -- titulo normal
colors[clr.TitleBgActive] = ImVec4(0.40, 0.10, 0.10, 1.00) -- titulo quando clica na janela

-- Cor dos textos
colors[clr.Text] = ImVec4(1.00, 1.00, 1.00, 0.95)          -- texto normal (branco)
colors[clr.TextDisabled] = ImVec4(0.50, 0.50, 0.50, 0.70)  -- texto apagado (cinza)

-- Cores dos botoes (muda quando passa mouse e clica)
colors[clr.Button] = ImVec4(0.40, 0.12, 0.12, 1.00)        -- botao normal
colors[clr.ButtonHovered] = ImVec4(0.70, 0.20, 0.20, 1.00) -- botao com mouse em cima
colors[clr.ButtonActive] = ImVec4(0.90, 0.30, 0.30, 1.00)  -- botao sendo clicado

-- Caixas de texto (onde voce digita)
colors[clr.FrameBg] = ImVec4(0.16, 0.06, 0.06, 1.00)       -- caixa normal
colors[clr.FrameBgHovered] = ImVec4(0.30, 0.12, 0.12, 1.00)-- caixa com mouse em cima
colors[clr.FrameBgActive] = ImVec4(0.45, 0.15, 0.15, 1.00) -- caixa quando esta digitando

-- Menus que abrem e fecham
colors[clr.Header] = ImVec4(0.40, 0.12, 0.12, 1.00)        -- menu fechado
colors[clr.HeaderHovered] = ImVec4(0.70, 0.20, 0.20, 1.00) -- menu com mouse em cima
colors[clr.HeaderActive] = ImVec4(0.90, 0.30, 0.30, 1.00)  -- menu aberto

-- Checkbox (quadradinho de marcar)
colors[clr.CheckMark] = ImVec4(0.95, 0.35, 0.35, 1.00)     -- cor do "check" quando marcado

-- Sliders (barrinhas de ajustar valor)
colors[clr.SliderGrab] = ImVec4(0.85, 0.25, 0.25, 1.00)        -- bolinha do slider
colors[clr.SliderGrabActive] = ImVec4(1.00, 0.40, 0.40, 1.00)  -- bolinha quando arrasta

-- Barra de rolagem (quando tem muito conteudo)
colors[clr.ScrollbarBg] = ImVec4(0.10, 0.10, 0.10, 0.6)        -- fundo da barra
colors[clr.ScrollbarGrab] = ImVec4(0.30, 0.10, 0.10, 0.8)      -- parte que arrasta
colors[clr.ScrollbarGrabHovered] = ImVec4(0.50, 0.20, 0.20, 0.9)   -- parte que arrasta com mouse
colors[clr.ScrollbarGrabActive] = ImVec4(0.70, 0.25, 0.25, 1.0)    -- parte que arrasta clicando

-- Linhas que separam as coisas
colors[clr.Separator] = ImVec4(0.50, 0.20, 0.20, 0.60)         -- linha normal
colors[clr.SeparatorHovered] = ImVec4(0.70, 0.30, 0.30, 0.80)  -- linha com mouse
colors[clr.SeparatorActive] = ImVec4(0.90, 0.40, 0.40, 1.00)   -- linha clicando

-- COMO USAR:
-- 1. Cole esse codigo no inicio do seu script
-- 2. Depois crie suas janelas normalmente
-- 3. O menu vai ficar com esse visual automaticamente

-- COMO MUDAR AS CORES:
-- Os numeros sao: (vermelho, verde, azul, transparencia)
-- Exemplo para fazer azul: ImVec4(0.1, 0.2, 0.8, 1.0)
-- Exemplo para fazer verde: ImVec4(0.1, 0.8, 0.2, 1.0)

Não entendeu Bosta Nenhuma? Normal.
Está com preguiça de trocar as cores ou deixar as coisas sem bordas? Eu estou aqui.
Só copiar e colar no seu código

Lua:
-- 🎨 SELETOR DE CORES SIMPLES - Só copiar e colar onde quiser
local cor_tema = imgui.ImInt(1)
-- 🔹 Função simples pra mudar as cores
local function mudarCores(cor)
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    --  Suavidade das bordas e alinhamento
style.WindowRounding = 8.0
style.ChildWindowRounding = 6.0
style.FrameRounding = 4.0
style.GrabRounding = 4.0
style.ScrollbarRounding = 9
style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
style.ItemSpacing = imgui.ImVec2(8, 6)
style.ItemInnerSpacing = imgui.ImVec2(6, 4)
style.ScrollbarSize = 14.0
style.GrabMinSize = 12.0
 
    if cor == 1 then  -- Azul
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.12, 0.20, 0.28, 1.00)
        colors[clr.Button] = ImVec4(0.15, 0.25, 0.45, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.25, 0.40, 0.65, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.35, 0.55, 0.85, 1.00)
        colors[clr.Header] = ImVec4(0.15, 0.25, 0.45, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.25, 0.40, 0.65, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.35, 0.55, 0.85, 1.00)
        colors[clr.CheckMark] = ImVec4(0.40, 0.65, 0.90, 1.00)
 
 
 
    elseif cor == 2 then -- Vermelho
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.28, 0.12, 0.12, 1.00)
        colors[clr.Button] = ImVec4(0.45, 0.15, 0.15, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.65, 0.25, 0.25, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.85, 0.35, 0.35, 1.00)
        colors[clr.Header] = ImVec4(0.45, 0.15, 0.15, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.65, 0.25, 0.25, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.85, 0.35, 0.35, 1.00)
        colors[clr.CheckMark] = ImVec4(0.90, 0.40, 0.40, 1.00)
 
    elseif cor == 3 then -- Verde
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.12, 0.28, 0.16, 1.00)
        colors[clr.Button] = ImVec4(0.15, 0.45, 0.20, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.25, 0.65, 0.30, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.35, 0.85, 0.45, 1.00)
        colors[clr.Header] = ImVec4(0.15, 0.45, 0.20, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.25, 0.65, 0.30, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.35, 0.85, 0.45, 1.00)
        colors[clr.CheckMark] = ImVec4(0.40, 0.90, 0.50, 1.00)
 
    elseif cor == 4 then -- Roxo
            colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.28, 0.12, 0.28, 1.00)
        colors[clr.Button] = ImVec4(0.35, 0.15, 0.45, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.50, 0.25, 0.65, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.70, 0.35, 0.85, 1.00)
        colors[clr.Header] = ImVec4(0.35, 0.15, 0.45, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.50, 0.25, 0.65, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.70, 0.35, 0.85, 1.00)
        colors[clr.CheckMark] = ImVec4(0.80, 0.40, 0.90, 1.00)
 
    elseif cor == 5 then -- Laranja
        colors[clr.WindowBg]        = ImVec4(0.08, 0.08, 0.10, 0.95)
        colors[clr.ChildWindowBg]   = ImVec4(0.10, 0.10, 0.12, 1.00)
         colors[clr.PopupBg]         = ImVec4(0.12, 0.12, 0.14, 0.98)
        colors[clr.TitleBgActive] = ImVec4(0.28, 0.20, 0.08, 1.00)
        colors[clr.Button] = ImVec4(0.45, 0.25, 0.10, 1.00)
        colors[clr.ButtonHovered] = ImVec4(0.65, 0.40, 0.15, 1.00)
        colors[clr.ButtonActive] = ImVec4(0.85, 0.55, 0.25, 1.00)
        colors[clr.Header] = ImVec4(0.45, 0.25, 0.10, 0.80)
        colors[clr.HeaderHovered] = ImVec4(0.65, 0.40, 0.15, 1.00)
        colors[clr.HeaderActive] = ImVec4(0.85, 0.55, 0.25, 1.00)
        colors[clr.CheckMark] = ImVec4(0.90, 0.60, 0.30, 1.00)
    end
end


function escolhercor()
--  CollapsingHeader com seletor (cole onde quiser no seu menu)
if imgui.CollapsingHeader(" Cor do Menu") then
-- Vermelho
local red    = imgui.ImVec4(1.0, 0.0, 0.0, 1.0)

-- Azul
local blue   = imgui.ImVec4(0.0, 0.0, 1.0, 1.0)

-- Roxo (mistura de vermelho + azul)
local purple = imgui.ImVec4(0.5, 0.0, 0.5, 1.0)

-- Verde
local green  = imgui.ImVec4(0.0, 1.0, 0.0, 1.0)

-- Laranja (mistura de vermelho + verde, mas menos verde)
local orange = imgui.ImVec4(1.0, 0.5, 0.0, 1.0)

    if imgui.RadioButton(" Azul", cor_tema, 1) then
        mudarCores(1)
    end
 
    if imgui.RadioButton(" Vermelho", cor_tema, 2) then
        mudarCores(2)
    end
 
    if imgui.RadioButton(" Verde", cor_tema, 3) then
        mudarCores(3)
    end
 
    if imgui.RadioButton(" Roxo", cor_tema, 4) then
        mudarCores(4)
    end
 
    if imgui.RadioButton(" Laranja", cor_tema, 5) then
        mudarCores(5)
    end
  end
end

Apenas Chame 'escolhercor()' para renderizar o conteúdo dela

Vai ficar só uma CollapsingHeader,então não choras
Teste você mesmo
Como Fica :

Посмотреть вложение 277962


Como fazer Popup no seu ImGui :

Lua:
   -- PASSO 1: Botão que abre popup
    if imgui.Button("Abrir Popup") then
        imgui.OpenPopup("MeuPopup")  -- Abre popup por nome dele
    end
 
    -- PASSO 2: Criar o popup
    if imgui.BeginPopup("MeuPopup") then -- Pegue o nome do seu Popup e use em OpenPopup
 
        imgui.Text("Conteúdo do popup")
        imgui.Separator()
 
        -- Elementos dentro do popup
        imgui.Checkbox("Checkbox", checkbox_test)
        imgui.SliderInt("Slider", slider_value, 0, 100)
 
        -- Botão para fechar (Opcional)
        if imgui.Button("Fechar") then
            imgui.CloseCurrentPopup()
        end
 
        imgui.EndPopup()  -- Fecha popup
    end

Como fica :
Посмотреть вложение 278925


Como fazer ToolTip (Dica para seu mouse)


Lua:
    imgui.Button("Passe o mouse aqui")
 
        if imgui.IsItemHovered() then -- IsItemHovered = detecta se o mouse está em cima do último elemento
            imgui.BeginTooltip() -- Inicia a tooltip
            imgui.Text("Esta e uma dica util")
            imgui.Text("Aparece quando voce passa o mouse")
            imgui.Text("Pode ter varias linhas")
            imgui.EndTooltip() -- SEMPRE feche o que abriu
        end
Код:

Como fica :

Посмотреть вложение 279195



Irei adicionar mais coisas depois...


Moonloader com todos os recursos já prontos,é só baixar​

Russos/Gringos não vão entender bem oque escrevi aqui,tradutor só vai estragar de vez o tutorial 😅

Créditos A TheChampGuess,aprendi quase tudo de imgui com ele

Dê sugestões do que colocar aqui ! 😄

Скоро я создам второй урок с большим количеством функций, таких как BeginPopupModal, BeginMenuBar, BeginGroup и imgui.TextQuestion

 
Последнее редактирование: