Socket 0 #1 Posted May 15, 2010 (edited) Bem, hoje eu tava olhando os tópicos do forum ai ve aquele script do Mock, me aprofundei mais em WXLua e fiz isso, mistureba de Lua, WXLua, MySQL. [spoiler=Script] require("wx") require "luasql.mysql" local config = { databaseName = '', -- Database Name userName = '', -- User Name userPassword = '', -- User Password userHost = 'localhost', -- Host port = 3306, -- Port } function LastID() --database env = assert(luasql.mysql()) con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port)) row = assert(con:execute('SELECT * FROM `players` WHERE 1;')) con:close() env:close() return tonumber(row:numrows()+1) end local ID_IDCOUNTER = wx.wxID_HIGHEST + 1 function NewID() --Autor: J Winwood ID_IDCOUNTER = ID_IDCOUNTER + 1 return ID_IDCOUNTER end local ID_DIALOG1_OK = NewID() local ID_DIALOG2_OK = NewID() local ID_SEARCH = NewID() local ID_NEW = NewID() local ID_EXIT = NewID() local ID_CLOSE = NewID() local FRAME = wx.wxFrame(wx.NULL, wx.wxID_OK, "Finder", wx.wxDefaultPosition, wx.wxSize(450, 450)) local FRAME_OBJECTS = { MENU_BAR = wx.wxMenuBar(), FILE_MENU = wx.wxMenu({{ID_NEW, "&New\tCtrl+N", "Create a new player." }, {ID_SEARCH, "&Search\tCtrl+S", "Search a player." }}), EXIT_MENU = wx.wxMenu({{ID_EXIT, "&Exit\tCtrl+E", "Exit program." }})} FRAME_OBJECTS.MENU_BAR:Append(FRAME_OBJECTS.FILE_MENU, "&File") FRAME_OBJECTS.MENU_BAR:Append(FRAME_OBJECTS.EXIT_MENU, "&Exit") FRAME:SetMenuBar(FRAME_OBJECTS.MENU_BAR) FRAME:CreateStatusBar(1) FRAME:SetStatusText('Welcome to finder.') local HTML = wx.wxLuaHtmlWindow(FRAME, wx.wxID_ANY,wx.wxDefaultPosition, wx.wxSize(0, 0), wx.wxHW_SCROLLBAR_NEVER) local DIALOG1 = wx.wxDialog(FRAME, wx.wxID_ANY, 'New player') local DIALOG1_OBJECTS = { STATIC_LINE = wx.wxStaticLine(DIALOG1, wx.wxID_ANY), BUTTON_CLOSE = wx.wxButton(DIALOG1, ID_CLOSE, "Close"), BUTTON_OK = wx.wxButton(DIALOG1, ID_DIALOG1_OK, "Ok"), NAME = wx.wxTextCtrl(DIALOG1, wx.wxID_ANY, ""), NAME_TEXT = wx.wxStaticText(DIALOG1, wx.wxID_ANY, "Name"), LEVEL = wx.wxTextCtrl(DIALOG1,wx.wxID_ANY, ""), LEVEL_TEXT = wx.wxStaticText(DIALOG1, wx.wxID_ANY, "Level"), ACCOUNT_ID = wx.wxTextCtrl(DIALOG1, wx.wxID_ANY, ""), ACCOUNT_ID_TEXT = wx.wxStaticText(DIALOG1, wx.wxID_ANY, "Account id"), VOCATION = wx.wxTextCtrl(DIALOG1, wx.wxID_ANY, ""), VOCATION_TEXT = wx.wxStaticText(DIALOG1, wx.wxID_ANY, "Vocation"), SEX = wx.wxTextCtrl(DIALOG1, wx.wxID_ANY, ""), SEX_TEXT = wx.wxStaticText(DIALOG1, wx.wxID_ANY, "Sex"), MAGLEVEL = wx.wxTextCtrl(DIALOG1, wx.wxID_ANY, ''), MAGLEVEL_TEXT = wx.wxStaticText(DIALOG1, wx.wxID_ANY, "Magic Level") } local DIALOG2 = wx.wxDialog(FRAME, wx.wxID_ANY, 'Search player') local DIALOG2_OBJECTS = { STATIC_LINE = wx.wxStaticLine(DIALOG2, wx.wxID_ANY), BUTTON_CLOSE = wx.wxButton(DIALOG2, ID_CLOSE, "Close"), BUTTON_OK = wx.wxButton(DIALOG2, ID_DIALOG2_OK, "Ok"), NAME = wx.wxTextCtrl(DIALOG2, wx.wxID_ANY, ""), NAME_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Name"), LEVEL = wx.wxTextCtrl(DIALOG2,wx.wxID_ANY, ""), LEVEL_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Level"), ID = wx.wxTextCtrl(DIALOG2, wx.wxID_ANY, ""), ID_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Id"), ACCOUNT_ID = wx.wxTextCtrl(DIALOG2, wx.wxID_ANY, ""), ACCOUNT_ID_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Account id"), VOCATION = wx.wxTextCtrl(DIALOG2, wx.wxID_ANY, ""), VOCATION_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Vocation"), SEX = wx.wxTextCtrl(DIALOG2, wx.wxID_ANY, ""), SEX_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Sex"), MAGLEVEL = wx.wxTextCtrl(DIALOG2, wx.wxID_ANY, ''), MAGLEVEL_TEXT = wx.wxStaticText(DIALOG2, wx.wxID_ANY, "Magic Level") } local DIALOG1_SIZER = wx.wxBoxSizer(wx.wxVERTICAL) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.NAME_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.NAME, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.LEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.LEVEL, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.ACCOUNT_ID_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.ACCOUNT_ID, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.VOCATION_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.VOCATION, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.SEX_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.SEX, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.MAGLEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.MAGLEVEL, 0, wx.wxALIGN_CENTER, 0) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10) DIALOG1_SIZER:Add(DIALOG1_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10) local DIALOG2_SIZER = wx.wxBoxSizer(wx.wxVERTICAL) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.NAME_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.NAME, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.LEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.LEVEL, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.ID_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.ID, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.ACCOUNT_ID_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.ACCOUNT_ID, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.VOCATION_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.VOCATION, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.SEX_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.SEX, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.MAGLEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.MAGLEVEL, 0, wx.wxALIGN_CENTER, 0) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10) DIALOG2_SIZER:Add(DIALOG2_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10) DIALOG1:Connect(ID_CLOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED, function () DIALOG1:Close(true) end ) DIALOG2:Connect(ID_CLOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED, function () DIALOG2:Close(true) end ) FRAME:Connect(ID_NEW, wx.wxEVT_COMMAND_MENU_SELECTED, function () DIALOG1:SetAutoLayout(true) DIALOG1:SetSizer(DIALOG1_SIZER) DIALOG1_SIZER:Fit(DIALOG1) DIALOG1:ShowModal() DIALOG1:Destroy() DIALOG1_OBJECTS.NAME:SetValue('') DIALOG1_OBJECTS.LEVEL:SetValue('') DIALOG1_OBJECTS.ACCOUNT_ID:SetValue('') DIALOG1_OBJECTS.VOCATION:SetValue('') DIALOG1_OBJECTS.SEX:SetValue('') DIALOG1_OBJECTS.MAGLEVEL:SetValue('') end ) FRAME:Connect(ID_SEARCH, wx.wxEVT_COMMAND_MENU_SELECTED, function () DIALOG2:SetAutoLayout(true) DIALOG2:SetSizer(DIALOG2_SIZER) DIALOG2_SIZER:Fit(DIALOG2) DIALOG2:ShowModal() DIALOG2:Destroy() DIALOG2_OBJECTS.NAME:SetValue('') DIALOG2_OBJECTS.LEVEL:SetValue('') DIALOG2_OBJECTS.ID:SetValue('') DIALOG2_OBJECTS.ACCOUNT_ID:SetValue('') DIALOG2_OBJECTS.VOCATION:SetValue('') DIALOG2_OBJECTS.SEX:SetValue('') DIALOG2_OBJECTS.MAGLEVEL:SetValue('') end ) FRAME:Connect(ID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED, function () FRAME:Close(true) end ) DIALOG1:Connect(ID_DIALOG1_OK, wx.wxEVT_COMMAND_BUTTON_CLICKED, function () env = assert(luasql.mysql()) con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port)) ass = assert(con:execute("SELECT `name` FROM `players` WHERE `name` = ".. DIALOG1_OBJECTS.NAME:GetValue() ..";")) if ass:numrows() == 1 then return wx.wxMessageBox('A player named '.. DIALOG1_OBJECTS.NAME:GetValue() ..' already exists.') end row = assert(con:execute("INSERT INTO `players` (`name`,`level`,`id`,`account_id`,`vocation`,`sex`,`maglevel`) VALUES ('".. DIALOG1_OBJECTS.NAME:GetValue() .."', ".. DIALOG1_OBJECTS.LEVEL:GetValue() ..", ".. LastID()+1 ..", ".. DIALOG1_OBJECTS.ACCOUNT_ID:GetValue() ..",".. DIALOG1_OBJECTS.VOCATION:GetValue() ..", ".. DIALOG1_OBJECTS.SEX:GetValue() ..",".. DIALOG1_OBJECTS.MAGLEVEL:GetValue() ..");")) con:close() env:close() wx.wxMessageBox('Player '.. DIALOG1_OBJECTS.NAME:GetValue() ..' added on your database.') end ) DIALOG2:Connect(ID_DIALOG2_OK, wx.wxEVT_COMMAND_BUTTON_CLICKED, function () environment = assert(luasql.mysql()) connection = assert(environment:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port)) row = assert(connection:execute("SELECT * FROM `players` WHERE `name` = '".. DIALOG2_OBJECTS.NAME:GetValue() .."';")) if row:numrows() == 0 then wx.wxMessageBox('Player '.. name:GetValue() ..' not found.') DIALOG2_OBJECTS.NAME:SetValue('') DIALOG2_OBJECTS.LEVEL:SetValue('') DIALOG2_OBJECTS.ID:SetValue('') DIALOG2_OBJECTS.ACCOUNT_ID:SetValue('') DIALOG2_OBJECTS.VOCATION:SetValue('') DIALOG2_OBJECTS.SEX:SetValue('') DIALOG2_OBJECTS.MAGLEVEL:SetValue('') else local t = {} row:fetch(t, "a") DIALOG2_OBJECTS.NAME:SetValue(t.name) DIALOG2_OBJECTS.LEVEL:SetValue(t.level) DIALOG2_OBJECTS.ID:SetValue(t.id) DIALOG2_OBJECTS.ACCOUNT_ID:SetValue(t.account_id) DIALOG2_OBJECTS.VOCATION:SetValue(t.vocation) DIALOG2_OBJECTS.SEX:SetValue(t.sex) DIALOG2_OBJECTS.MAGLEVEL:SetValue(t.maglevel) end connection:close() environment:close() end ) FRAME:Show(true) wx.wxGetApp():MainLoop() Configure a tabela: local config = { databaseName = '', -- Database Name userName = '', -- User Name userPassword = '', -- User Password userHost = 'localhost', -- Host port = 3306, -- Port } Logo eu coloco pra criar contas também. Obs: Requer Lua For Windows 5.1x para funcionar. Download: http://luaforge.net/frs/?group_id=377 Edited January 23, 2011 by Mickfern Share this post Link to post Share on other sites
Dean 1 #2 Posted May 15, 2010 Legal, a algum tempo atrás eu tinha feito um desse mas não em wxlua, dei uma rápida lida mas não entendi a parte do html, vc não usou html. Share this post Link to post Share on other sites
Socket 0 #3 Posted May 15, 2010 Usei apenas tags de html. <b> e <br>. Ahh e uma coisa, se salvar o script em wlua é so clicar que ele já abre, sem abrir nenhuma página de editor e tals, mas precisa ter o SciTE instalado. Share this post Link to post Share on other sites