Версия пилота 2.41. Архив распаковать в папку с exe пилота.
LuaWindow.zip ( 324,5 килобайт )
Кол-во скачиваний: 226
--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
А events чем тут используется? Его winapi за собой тянет?
Кхм... А как собирал?) Взял свежий winapi, events, выдернул ansi_utf.lua из архива - не завелось. Орало на то что button получает zero, а ожидается non-zero (27 строка).
Твой собранный работает)
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)