Помоги мне imgui.IsMouseDoubleClicked(0) Не могу использовать

saradaken

Участник
Автор темы
41
6
Версия MoonLoader
Другое
Здравствуйте
Моя проблема в том, что когда я пытаюсь использовать imgui.IsItemHovered()
imgui.IsMouseDoubleClicked(0) не кликабельно.
Если я не использую imgui.IsItemHovered() , я могу щелкнуть как обычно, но проблема в том, что когда я дважды щелкаю в любом месте экрана, он отправляет sampSendDialogResponse вместо того, чтобы отправлять его только при щелчке по фрейму.

Как я могу это исправить?

** Я исправил и обновил метод. Спасибо.

Lua:
for i = 1, #items do
    imgui.PushStyleColor(imgui.Col.FrameBgActive, imgui.ImVec4(0.200, 0.200, 0.200, 0.5))
    imgui.PushStyleColor(imgui.Col.FrameBg, imgui.ImVec4(0, 0, 0, 0))
    imgui.PushStyleColor(imgui.Col.FrameBgHovered, imgui.ImVec4(0.200, 0.200, 0.200, 0.5))

    -- Call CustomSelectable to display the button.
    local isHovered, isSelected = imgui.CustomSelectable(items[i], selectedItem[0] == i - 1, 5, test_font)

    -- Check that the button is selected.
    if isSelected and isHovered then
        selectedItem[0] = i - 1 -- Update selectedItem when selecting an option.

        -- Check double click on the selected option.
        if imgui.IsMouseDoubleClicked(0) then
            -- Use selectedItem[0] as index to send commands directly.
            sampSendDialogResponse(722, 1, selectedItem[0], "")
            closeWindow(true)
        end
    end

    imgui.PopStyleColor(3)
end

Lua:
function imgui.CustomSelectable(label, selected, radius, font)
    local style = imgui.GetStyle()
    local padding = style.FramePadding
    local pos = imgui.GetCursorScreenPos()
    local windowWidth = imgui.GetWindowContentRegionWidth()
    local size = imgui.CalcTextSize(label)

    local topSpacing = 0
    local bottomSpacing = -2

    size.x = windowWidth
    size.y = size.y + padding.y * 2

    local rectMin = pos
    local rectMax = imgui.ImVec2(pos.x + size.x, pos.y + size.y)
    local isSelected = selected
    local isHovered = imgui.IsMouseHoveringRect(rectMin, rectMax)

    if imgui.InvisibleButton(label, imgui.ImVec2(size.x, size.y)) and isHovered then
        isSelected = not selected
    end

    local color = imgui.GetColorU32(
        isSelected and imgui.Col.FrameBgActive or
        (isHovered and imgui.Col.FrameBgHovered or imgui.Col.FrameBg)
    )
   
    local drawList = imgui.GetWindowDrawList()
    drawList:AddRectFilled(rectMin, rectMax, color, radius)

    imgui.SetCursorScreenPos(imgui.ImVec2(pos.x + padding.x, pos.y + padding.y))
    imgui.SetCursorPosY(imgui.GetCursorPosY() + topSpacing)

    if font then
        imgui.PushFont(font)
    end

    imgui.TextColoredRGB(label)

    if font then
        imgui.PopFont()
    end

    imgui.SetCursorPosY(imgui.GetCursorPosY() + bottomSpacing)

    -- Return true if this specific item is clicked and hovered
    return isHovered, isSelected
end
 
Последнее редактирование: