karpovukg

Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Доброго. Чета совсем я запутался. Один из комбобоксов неадекватно себя ведет. По умолчанию он имеет такие пункты: Код: Item Text – Экранная, Item data – “-1” Item Text – Максимальная, Item data – “0” Item Text – Другая, Item data – пусто Список не редактируемый. | В OnShow страницы для него есть обработчик: Код: -- получаем значение из ини файла s_fps_ini = INIFile.GetValue(ini_f, "ddraw", "maxfps"); -- добавляем к нему кавычки с дувух сторон s_fps_ini = '"' .. s_fps_ini .. '"'; if (s_fps_ini == "0") or (s_fps_ini == "-1") then -- если значение в ини файле соотв. одному из определенных -- находим соответствующий пункт n_fps_index = ComboBox.FindItem("fps", 1, LB_BYDATA, s_fps_ini); -- выбираем этот пункт ComboBox.SetSelected("fps", n_fps_index); else -- иначе меняем тип списка на редактируемый ComboBox.SetProperties("fps", {ComboStyle=1}); -- обрезаем кавычки s_fps_temp = String.TrimLeft(s_fps_ini, '"'); s_fps_temp = String.TrimRight(s_fps_temp, '"'); -- заносим нестандартное значение в список ComboBox.SetItemText("fps", 3, s_fps_temp); -- и выбираем его ComboBox.SetSelected("fps", 3); end | В ini файле значения без кавычек: -1 и 0 соответственно. Кавычки я ввел потому, что в других комбобоксах если в ini файле значения положительные – соответствующие пункты выбираются нормально, а если равны 0 или отрицательные – то вообще не выбираются пункты. Я предположил, что такое поведение возможно из-за автоматического перевода строки в число. В остальных комбобоксах кавычки проблему решили. В самом объекте в OnSelect Код: if (e_Selection == 1) or (e_Selection == 2) then -- если выбирается один из стандартных пунктов -- делаем список нередактируемым ComboBox.SetProperties("fps", {ComboStyle=0}); -- переименовываем последний пункт ComboBox.SetItemText("fps", fps_count, "Другая"); elseif e_Selection == 3 then -- иначе делаем список редактируемым ComboBox.SetProperties("fps", {ComboStyle=1}); -- переименовываение последнего пункта происходит в событии Клавиша end | В OnKey Код: n_ComboStyle = ComboBox.GetProperties("bit_for_pix").ComboStyle; if n_ComboStyle == 1 then s_fps_text = ComboBox.GetText("fps"); ComboBox.SetItemText("fps", 3, s_fps_text); end | Проблема в том, что даже если параметр в ini файле имеет значения 0 или -1, при которых комбобокс должен быть не редактируемым, в момент открытия страницы он становится редактируемым. Делал отладку: значения переменной s_fps_ini правильные – "0", "-1". Уверен, что в коде ошибка, но не вижу ее и все тут. Ткните мордой пожалуйста. PS Ссылка на проект. PPS Еще одна странность в поведении комбобокса: если схватить его мышкой, когда он редактируемый – за него можно перемещать окно приложения. Версия AP 8.0.2.0. Подозреваю, что это баг объекта, ваше мнение? И можно ли устранить этот баг? | Всего записей: 81 | Зарегистр. 13-01-2016 | Отправлено: 10:38 18-05-2017 | Исправлено: karpovukg, 10:46 18-05-2017 |
|