Размеры окон, создаваемых скриптом

Страницы: 1
RSS
Размеры окон, создаваемых скриптом
 
Это не сообщение о какой-то ошибке или проблеме, наоборот, это сообщение, которое может помочь программирующим на qlua скрипты роботов.

Допустим, что Ваш скрипт создаёт одно или несколько окон на своей вкладке. Если не прилагать усилий и просто создавать окна через CreateWindow, эти окна получают некоторый размер и местоположение, определяемые автоматически. Не всегда это удобно. Можно после создания указать конкретное местоположение и размеры окна с помощью функции SetWindowPos(tableId, x, y, dx, dy). Однако, откуда взять значения x, y, dx, dy? Их можно подбирать методом последовательных приближений, но ведь это неудобно!

Предлагается следующий подход. Сначала Вы располагаете графики, окна Вашего скрипта и прочие элементы так, чтобы было удобно. Потом запускаете предлагаемый ниже код. Он создаёт пустое окно, которое можно перемещать и изменять его размер с помощью мышки, накладывая это окно ровно поверх каждого окна Вашего скрипта. При этом в заголовке накладываемого окна динамически обновляются параметры x, y, dx, dy, которые нужно будет подставить в функцию SetWindowPos(tableId, x, y, dx, dy) в Вашем скрипте. При этом подбор параметров можно осуществить сразу, а не методом последовательных приближений.

Вот такой вот калибровщик положения и размеров окон получается.

Если я изобрёл велосипед, а все нормальные программисты пользуются подобными штуками, отнесусь к этому с пониманием.
Код
--
-- Подгонка размеров окна.
--

local interrupted = false

function OnStop()
    interrupted = true
end

function main()
    local tId = AllocTable()
    CreateWindow(tId)

    local topPrev, leftPrev, bottomPrev, rightPrev = 0, 0, 0, 0
    while not interrupted do
        if IsWindowClosed(tId) then
            break
        end
        local top, left, bottom, right = GetWindowRect(tId)
        if top == nil or left == nil or bottom == nil or right == nil then
            break
        end
        if topPrev ~= top or leftPrev ~= left or bottomPrev ~= bottom or rightPrev ~= right then
            SetWindowCaption(tId, "x=" .. tostring(left)
                    .. ",y=" .. tostring(top)
                    .. ",dx=" .. tostring(right - left)
                    .. ",dy=" .. tostring(bottom - top))
            topPrev = top
            leftPrev = left
            bottomPrev = bottom
            rightPrev = right
        else
            sleep(50)
        end
    end
end
 
Для подобных целей я добавил к окну "кнопку сохранения". После подстройки окна скрипт по этой кнопке сохранит параметры окна в файл, откуда при необходимости возьмет их для восстановления окна.
Страницы: 1
Читают тему
Наверх