Перенос новых диалогов мышкой [sampfuncs]

Тема в разделе "CLEO", создана пользователем Владислав, 6 июл 2014.

  1. Владислав

    Владислав Member Основатель

    Регистрация:
    29 май 2014
    Сообщения:
    109
    Симпатии:
    0
    Хочу рассказать вам, как можно передвигать мышкой новые диалоги sampfuncs. Подразумевается, что вы уже умеете создавать диалоги и вам требуется прикрутить перемещение к уже готовому диалогу.

    Код:
    while true
    if
            0AB0: key_pressed 1 // Проверяем, что зажата ЛКМ
    then
            0AB1: call @GetCursorPos 0 28@ 27@ // Получаем позицию курсора
            0B85: samp dialog 29@ get_position_to 26@ 25@ size_to 0@ 0@ // Получаем позицию диалога (размеры нам не нужны, т.к они статические)
    /* Проверяем что мышка находится в пределах заголовка диалога - старт */
            if and
                001D:  28@ > 26@
                001D:  27@ > 25@
            then
                26@ += 340 // Прибавляем ширину диалога!!!
                25@ += 20
                if and
                    001D:  26@ > 28@
                    001D:  25@ > 27@
                then
                    26@ -= 340 // Вычитаем ширину диалога!!!
                    25@ -= 20
    /* Проверяем что мышка находится в пределах заголовка диалога - финиш */
                    0062: 28@ -= 26@ // Находим смещение мышки на заголовке по координате X
                    0062: 27@ -= 25@ // Находим смещение мышки на заголовке по координате Y
                    while 0AB0: 1 // Пока зажата ЛКМ передвигаем диалог
                        wait 0
                        0AB1: call @GetCursorPos 0 26@ 25@ // Получаем координаты мышки
                        0062: 26@ -= 28@ // Вычитаем смещение
                        0062: 25@ -= 27@ // Вычитаем смещение
                        0B84: samp dialog 29@ set_pos_XY 26@ 25@ size 340 205 // Передвигаем диалог
                    end
                end    
            end
        end
    end
    :GetCursorPos
    // За функцию спасибо legend2360
    0AA2: 0@ = load_library "user32.dll"
    0AA4: 1@ = get_proc_address "GetCursorPos" library 0@
    0AC8: 2@ = allocate_memory_size 8
    0AA5: call 1@ num_params 1 pop 0 2@
    0A8D: 3@ = read_memory 2@ size 4 virtual_protect 0
    2@ += 4
    0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
    0AC9: free_memory 2@
    0AB2: ret 2 3@ 4@ 
     
    #1

Поделиться этой страницей