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

Haru Urara

Участник
Автор темы
56
40

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

Porque fiz o tutorial?
Na comunidade Brasileira e de SA-MP não tem um tutorial decente ou bom de Lua ImGui,que é tão fácil de aprender
Incentivar a criação de mods e novos progamadores na comunidade

I’ll be the roundabout 🤠

Veja Tutorial 2

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 select_combo = imgui.ImInt(0) -- cria a variável pro índice (0 = primeiro item)
local combo_itens = {"teste", "test2", "test3"} -- itens que vão aparecer no combo

 if imgui.Combo("Combo 1", select_combo, combo_itens) then -- cria o combo box
        -- esse bloco roda quando o jogador muda a opção
        if select_combo.v == 0 then -- se escolher o primeiro item ("teste")
            print("Selecionou teste!") -- executa algo
        elseif select_combo.v == 1 then -- se escolher o segundo item ("test2")
            print("Selecionou test2!") -- executa algo
        elseif select_combo.v == 2 then -- se escolher o terceiro item ("test3")
            print("Selecionou test3!") -- executa algo
        end
    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
Apenas tenha essa função,edite as cores,e as cores já serão aplicadas só tendo a função
apply_style()


Lua:
-- Como deixar seu menu ImGui bonito no SAMP
-- Cole esse codigo antes de criar suas janelas
function apply_style()
-- 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)
end
apply_style()

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()' na main() 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

Dê sugestões do que colocar aqui ! 😄
 

Вложения

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

Haru Urara

Участник
Автор темы
56
40

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​

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

Hecker123

Новичок
26
2
Хм, интересно, есть руководство по ImGui, созданное нерусским автором. Отличное руководство!