Zloy_Gelud
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору dallas page Цитата: Сделать поиск не по Item, а по файлам. | Имхо, плохо каждый раз напрямую обращаться к файлам. Скорость обработки теряется. Лучше уж с памятью работать. On Preload страницы: Код: ListBox.DeleteItem("ListBox1", LB_ALLITEMS); --t_Files = File.Find("AutoPlay\\Docs", "*"..text.."*.apk", true, false, nil, nil); t_Files = File.Find("AutoPlay\\Docs", "*.apk", true, false, nil, nil); if t_Files then g_FileNames = {}; for n_Item, s_File in pairs(t_Files) do s_Filename = String.SplitPath(s_File).Filename; g_FileNames[tostring(s_Filename)] = true; ListBox.AddItem("ListBox1", s_Filename, s_File); end end | On Click кнопки: Код: local __search = function (s) local tFinded = {}; if g_FileNames then for i, v in pairs(g_FileNames) do if String.Find(i, s, 1, false) ~= -1 then tFinded[i] = true; end end end return tFinded; end local __checked = function () local tRet = {}; local tChecked = ListBox.GetChecked("ListBox1", BST_CHECKED); if tChecked then for i = 1, #tChecked do tRet[tostring(ListBox.GetItemText("ListBox1", tChecked[i]))] = true; end end return tRet; end local sSearch = Input.GetText("Input1"); if String.TrimLeft(sSearch, nil) ~= "" then local tChecked = __checked(); local tFinded = __search(sSearch); ListBox.DeleteItem("ListBox1", -1); if Table.Count(tFinded) > 0 then for t, v in pairs(tFinded) do local nInd = ListBox.AddItem("ListBox1", t, ""); if Table.Count(tChecked) > 0 then if tChecked[t] then ListBox.SetItemCheck("ListBox1", nInd, BST_CHECKED); end end end end else ListBox.DeleteItem("ListBox1", -1); if g_FileNames then for i, v in pairs(g_FileNames) do ListBox.AddItem("ListBox1", i, ""); end end end | Добавлено: sjdb45 Цитата: То есть без наименований Не прописываются имена | Сорри, пофиксил одну ошибку. Пост выше исправил. Попробуй еще раз. | Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 14:27 21-11-2011 | Исправлено: Zloy_Gelud, 14:32 21-11-2011 |
|