Как создать новый BeginChild

Slava Stetem

Участник
Автор темы
106
5
Версия MoonLoader
.027.0-preview
Всем привет такая проблема как в ImGUI создать "BeginChild" в котором есть кнопка которая открывает новый BeginChild
 

Mico

Активный
251
48
Форматирование кода
Я обычно делаю:
Lua:
BeginChild
if imgui.Button() then
name = 1
end
EndChild
BeginChild
if name == 1 then
text
end
EndChild
upd: думаю разберешься, если нужен код, пиши.
 
Последнее редактирование модератором:

Slava Stetem

Участник
Автор темы
106
5
Я обычно делаю:
Lua:
BeginChild
if imgui.Button() then
name = 1
end
EndChild
BeginChild
if name == 1 then
text
end
EndChild
upd: думаю разберешься, если нужен код, пиши.
Не получаеться. Кароче я думаю ты сможеш быстрее помоч чем я додуматса 😂. Кароче всьо до более просто. Нужно в окно ImGui создать"BeginChild" в котором будет кнопка которая будет создавать рядом новый "Begin Child" в котором будет кнопка которая будет выводить текст в чат "Привет"
А вот мой код который я писал
Lua:
imgui.BeginChild("##menubok")
if imgui.Button('TEST-1',imgui.ImVec2(210, 45)) then
    imgui.BeginChild("##radio")
    if imgui.Button('TEST-2',imgui.ImVec2(210, 45)) then
        sampSendChat("Привет")
    end
    imgui.EndChild()
end
imgui.EndChild()
 

Mico

Активный
251
48
Не получаеться. Кароче я думаю ты сможеш быстрее помоч чем я додуматса 😂. Кароче всьо до более просто. Нужно в окно ImGui создать"BeginChild" в котором будет кнопка которая будет создавать рядом новый "Begin Child" в котором будет кнопка которая будет выводить текст в чат "Привет"
А вот мой код который я писал
Lua:
imgui.BeginChild("##menubok")
if imgui.Button('TEST-1',imgui.ImVec2(210, 45)) then
    imgui.BeginChild("##radio")
    if imgui.Button('TEST-2',imgui.ImVec2(210, 45)) then
        sampSendChat("Привет")
    end
    imgui.EndChild()
end
imgui.EndChild()
Проще уже создать 2 child-a, чтобы в первом были кнопки "1" "2", а во втором "Сказать привет"


Lua:
imgui.BeginChild("##menubok")
if imgui.Button('1',imgui.ImVec2(210, 45)) then
    menu = 1
end
imgui.SameLine()
if imgui.Button('2',imgui.ImVec2(210, 45)) then
    menu = 2
end
imgui.EndChild()
imgui.BeginChild("##new")
if menu == 1 then
    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
        sampSendChat(u8"Привет")
    end
end
imgui.EndChild()

Попробуй так.
 

Slava Stetem

Участник
Автор темы
106
5
Проще уже создать 2 child-a, чтобы в первом были кнопки "1" "2", а во втором "Сказать привет"


Lua:
imgui.BeginChild("##menubok")
if imgui.Button('1',imgui.ImVec2(210, 45)) then
    menu = 1
end
imgui.SameLine()
if imgui.Button('2',imgui.ImVec2(210, 45)) then
    menu = 2
end
imgui.EndChild()
imgui.BeginChild("##new")
if menu == 1 then
    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
        sampSendChat(u8"Привет")
    end
end
imgui.EndChild()

Попробуй так.
Немного не так
Кнопка 1 должна создавать новый "BeginChild" который должен быть справа. В новой " BeginChild " должна быть кнопка "2" которая пишет в чат Привет
Проще уже создать 2 child-a, чтобы в первом были кнопки "1" "2", а во втором "Сказать привет"


Lua:
imgui.BeginChild("##menubok")
if imgui.Button('1',imgui.ImVec2(210, 45)) then
    menu = 1
end
imgui.SameLine()
if imgui.Button('2',imgui.ImVec2(210, 45)) then
    menu = 2
end
imgui.EndChild()
imgui.BeginChild("##new")
if menu == 1 then
    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
        sampSendChat(u8"Привет")
    end
end
imgui.EndChild()

Попробуй так.
Я чет сделал но текст не выводится
Вот код:
Lua:
        imgui.Columns(2,"", true)
        imgui.SetColumnWidth(-1, 232)
        imgui.BeginChild("##menubok", imgui.ImVec2(225, 500), true, imgui.WindowFlags.NoScrollbar)
        if imgui.Button('1',imgui.ImVec2(210, 45)) then
            menu = 1
        end
        imgui.EndChild()
        if menu == 1 then
                imgui.BeginChild("##new", imgui.ImVec2(200, 150), true)
            if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                menu1 = 2
            end
                if menu1 == 2 then
                    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                        AddChatMessage("Привет", -1)
                    end
                end
                imgui.EndChild()
        end
        imgui.End()
    end
end
 
Последнее редактирование:

Mico

Активный
251
48
Немного не так
Кнопка 1 должна создавать новый "BeginChild" который должен быть справа. В новой " BeginChild " должна быть кнопка "2" которая пишет в чат Привет

Я чет сделал но текст не выводится
Вот код:
Lua:
        imgui.Columns(2,"", true)
        imgui.SetColumnWidth(-1, 232)
        imgui.BeginChild("##menubok", imgui.ImVec2(225, 500), true, imgui.WindowFlags.NoScrollbar)
        if imgui.Button('1',imgui.ImVec2(210, 45)) then
            menu = 1
        end
        imgui.EndChild()
        if menu == 1 then
                imgui.BeginChild("##new", imgui.ImVec2(200, 150), true)
            if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                menu1 = 2
            end
                if menu1 == 2 then
                    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                        AddChatMessage("Привет", -1)
                    end
                end
                imgui.EndChild()
        end
        imgui.End()
    end
end
Потому-что, sampAddChatMessage
 

Vintik

Через тернии к звёздам
Проверенный
1,526
1,008
Понимаю, потому что она создает ImguiChild на один кадр во время нажатия кнопки.
Lua:
local ch = false

function imgui.OnDrawFrame()
    -- после imgui.Begin
    if imgui.Button("child") then ch = not ch end
    if ch then
        -- и тут код создания чайлда
    end
end
 

Slava Stetem

Участник
Автор темы
106
5
Понимаю, потому что она создает ImguiChild на один кадр во время нажатия кнопки.
Lua:
local ch = false

function imgui.OnDrawFrame()
    -- после imgui.Begin
    if imgui.Button("child") then ch = not ch end
    if ch then
        -- и тут код создания чайлда
    end
end
тоже не
 

Slava Stetem

Участник
Автор темы
106
5
Ну покажи то хоть полный код
Lua:
require "lib.moonloader"

local rkeys = require("rkeys")
local imgui = require 'imgui'
local encoding = require("encoding")

local main_window_state = imgui.ImBool(false)

local u8 = encoding.UTF8
encoding.default = "CP1251"

function imgui.OnDrawFrame()
    if main_window_state.v then
        local x, y = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(x/2, y/2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(850, 535), imgui.Cond.FirstUseEver)
        imgui.Begin(u8" New",  main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)

        imgui.Columns(2,"", true)
        imgui.SetColumnWidth(-1, 232)
        imgui.BeginChild("##menubok", imgui.ImVec2(225, 500), true, imgui.WindowFlags.NoScrollbar)
        if imgui.Button('1',imgui.ImVec2(210, 45)) then
            menu = 1
        end
        imgui.EndChild()
        if menu == 1 then
                imgui.BeginChild("##new", imgui.ImVec2(200, 150), true)
            if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                menu1 = 2
            end
                if menu1 == 2 then
                    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                        sampAddChatMessage("Привет", -1)
                    end
                end
                imgui.EndChild()
        end
        imgui.End()
    end
end

function main()
  if not isSampfuncsLoaded() or not isSampLoaded() then return end
  while not isSampAvailable() do wait(100) end

    while true do wait(0) imgui.Process = true

    if isKeyJustPressed(VK_1) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then
        main_window_state.v = not main_window_state.v
    end

    if main_window_state.v == false then
        imgui.Process = false
    end
end
end
 

Mico

Активный
251
48
Lua:
require "lib.moonloader"

local rkeys = require("rkeys")
local imgui = require 'imgui'
local encoding = require("encoding")

local main_window_state = imgui.ImBool(false)

local u8 = encoding.UTF8
encoding.default = "CP1251"

function imgui.OnDrawFrame()
    if main_window_state.v then
        local x, y = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(x/2, y/2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(850, 535), imgui.Cond.FirstUseEver)
        imgui.Begin(u8" New",  main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)

        imgui.Columns(2,"", true)
        imgui.SetColumnWidth(-1, 232)
        imgui.BeginChild("##menubok", imgui.ImVec2(225, 500), true, imgui.WindowFlags.NoScrollbar)
        if imgui.Button('1',imgui.ImVec2(210, 45)) then
            menu = 1
        end
        imgui.EndChild()
        if menu == 1 then
                imgui.BeginChild("##new", imgui.ImVec2(200, 150), true)
            if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                menu1 = 2
            end
                if menu1 == 2 then
                    if imgui.Button(u8'Сказать привет',imgui.ImVec2(210, 45)) then
                        sampAddChatMessage("Привет", -1)
                    end
                end
                imgui.EndChild()
        end
        imgui.End()
    end
end

function main()
  if not isSampfuncsLoaded() or not isSampLoaded() then return end
  while not isSampAvailable() do wait(100) end

    while true do wait(0) imgui.Process = true

    if isKeyJustPressed(VK_1) and not sampIsChatInputActive() and not isSampfuncsConsoleActive() then
        main_window_state.v = not main_window_state.v
    end

    if main_window_state.v == false then
        imgui.Process = false
    end
end
end
function imgui... Перенеси под while true do..end
 
  • Нравится
Реакции: Slava Stetem

#Kai-

Известный
705
292
Ты никак не создашь новый Begin... Так или иначе тебе нужно создать его заранее самому в коде, а потом только при нажатии на кнопку его покузывать.
Что тут сложного? Создаешь bool, и показываешь Begin если bool = true