Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Создание диалогового окна и контролов
cirus
сообщение 21.3.2020, 23:10
Сообщение #1


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Версия пилота 2.41. Архив распаковать в папку с exe пилота. Прикрепленный файл  LuaWindow.zip ( 324,5 килобайт ) Кол-во скачиваний: 222

Создание окна с контролами
Код
--lua
package.path = "LuaWindow\\winapi\\?.lua;" .. package.path
package.path = "LuaWindow\\events\\?.lua;" .. package.path
package.path = "LuaWindow\\?.lua;" .. package.path
setfenv(1, require'winapi')
require'ansi_utf'
require'winapi'
require'winapi.windowclass'
require'winapi.buttonclass'
require'winapi.editclass'
require'winapi.checkboxclass'
require'winapi.labelclass'
require'winapi.comboboxclass'


local ffi = require("ffi")
ffi.cdef[[
LRESULT SendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
HFONT CreateFontW(int cHeight, int cWidth, int cEscapement, int cOrientation, int cWeight, DWORD bItalic, DWORD bUnderline,
  DWORD bStrikeOut, DWORD iCharSet, DWORD iOutPrecision, DWORD iClipPrecision, DWORD iQuality, DWORD iPitchAndFamily, LPCWSTR pszFaceName);
]]
local WM_SETFONT = 48
local RUSSIAN_CHARSET = 204

-- создание окна и контролов
local win = Window{w = 300, h = 300, x = 200, y = 100, title = utf('Диалог'), topmost = true}
local button = Button{parent = win, x = 40, y = 100, w = 80, h = 40, text = utf('Узнать текст из Edit'), word_wrap=true}
local edit = Edit{parent = win, x = 30, y = 65, text=''}
local check1 = CheckBox{parent = win, x = 20, y = 10, w = 60, h = 20,    text = 'Check1', checked = false}
local check2 = CheckBox{parent = win, x = 20, y = 30, w = 60, h = 20,    text = utf('Галка2'), checked = false}
local static = Label{parent = win, x = 70, y = 160, w = 140, h = 30, text = 'Static Text'}
local combo = ComboBox{parent = win, x = 150, y = 20, type = 'dropdownlist', selected_index = 1,
items = {{text = 'First item'}, {text = 'Second item'}, {text = utf('Третья строка')}}}

-- флаги
local flag_close = 0
local flag_button = 0
local flag_check1, flag_check2 = 0, 0
local text_edit = ''
local flag_combo = 1

-- функции сообщений
function button:on_click()    -- если был клик по кнопке
    flag_button = 1  -- ставим флаг что кнопка нажата
end

function edit:on_change()   -- если изменен текст в Edit
    text_edit = ansi(edit.text)
end

function check1:on_click()   -- если был клик по галке
    flag_check1 = bit.bxor(flag_check1, 1)
end

function check2:on_click()
    flag_check2 = bit.bxor(flag_check2, 1)
end

function win:on_close()   -- если окно закрыто
--    log('Окно закрыто')
    flag_close = bit.bxor(flag_close, 1)
end

function combo:on_select()
    flag_combo = ComboBox_GetCurSel(combo.hwnd)
    log("Выбрана строка в комбо: " .. flag_combo)
end

-- создать шрифт и установить для static
local h_font = C.CreateFontW(-18, 0, 0, 0, 500, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, utf("Segoe Print"));
C.SendMessageW(static.hwnd, WM_SETFONT, ffi.cast('WPARAM', h_font), 0)


log "clear"  log "mode compact"
win:show()    -- показать окно


while flag_close == 0 do    -- пока окно не закрыто
    while ProcessNextMessage() do wait (1) end   -- обработка сообщений

    if flag_check1 == 1 then   -- если выбрана галка
        log("Галка1 выбрана")
        wait(100)
    end

    if flag_check2 == 1 then   -- если выбрана галка
        log("Галка2 выбрана")
        wait(100)
    end

    if flag_button == 1 then   -- если нажата кнопка
        flag_button = 0
        log(text_edit)
    end

    wait(10)
end

Прикрепленное изображение
Описание и примеры тут: https://luapower.com/winapi
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.9.2020, 11:43
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



А events чем тут используется? Его winapi за собой тянет?


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 29.9.2020, 11:57
Сообщение #3


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
А events чем тут используется?

Не вникал особо, закинул чтоб не требовал.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.9.2020, 17:17
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Кхм... А как собирал?) Взял свежий winapi, events, выдернул ansi_utf.lua из архива - не завелось. Орало на то что button получает zero, а ожидается non-zero (27 строка).
Твой собранный работает)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 30.9.2020, 1:50
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
а ожидается non-zero

Строки, которые выдают это, закомментированы или исправлены, уже не помню.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 0:04
Designed by Nickostyle