0 / 0 / 0
Регистрация: 03.02.2017
Сообщений: 14
1

Обновление формы и загрузка с ini файла

11.04.2017, 14:33. Показов 1128. Ответов 12

Author24 — интернет-сервис помощи студентам
Всем привет! Пишу приложение-тест, необходимо загружать картинки и тестовые ответы(с ini файла). При первичном запуске все загружается отлично, и картинки и данные с ini файла. Однако при выборе правильного ответа должна загрузиться следующая картинка и новый текст с ini. Но почему то этого не происходит. Я так полагаю у меня не обновляется форма и данные или проблема в другом? В чем загвоздка? Уже третий день не могу исправить...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2017, 14:33
Ответы с готовыми решениями:

Загрузка размера формы с ini
Что не так: в событие OnResize главной формы: TIniFile* ini; ini = new...

Обновление ini файла
Есть INI файл в котором хранятся данные в следующем виде: После программного удаления записи...

Загрузка из INI-файла
Приветствую, помогите разобраться: procedure TForm1.FormClose(Sender: TObject; var Action:...

Загрузка ini файла
if (FileExists("etc.ini")) { ini = new TIniFile("etc.ini");...

12
управление сложностью
1689 / 1302 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.04.2017, 14:58 2
Цитата Сообщение от Nekrom Посмотреть сообщение
Однако при выборе правильного ответа должна загрузиться следующая картинка и новый текст с ini. Но почему то этого не происходит.
А как вы переходите к следующей секции ?
0
0 / 0 / 0
Регистрация: 03.02.2017
Сообщений: 14
11.04.2017, 15:05  [ТС] 3
Цитата Сообщение от Почтальон Посмотреть сообщение
А как вы переходите к следующей секции ?
Секции у меня нумерованы по порядку. К следующей секции перехожу (или точнее хочу перейти) присваивая рандомное число переменной в пределах общего количества секций. То есть если у меня 5 секций (названия у них такие же - 1, 2, 3, 4, 5), то присваиваю переменной рандомное число из этих пяти чисел, а затем загружаю с ini секцию равную этой переменной. Как то так. Но почему то это не работает.
0
управление сложностью
1689 / 1302 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.04.2017, 15:41 4
Цитата Сообщение от Nekrom Посмотреть сообщение
Но почему то это не работает
Потому что плохой метод выбрали - хранить вопросы и ответы в ini-файле.
Цитата Сообщение от Nekrom Посмотреть сообщение
а затем загружаю с ini секцию равную этой переменной
эту переменную к строке приводите, чтобы считывать название секции ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32874 / 21206 / 8154
Регистрация: 22.10.2011
Сообщений: 36,464
Записей в блоге: 8
11.04.2017, 16:01 5
Цитата Сообщение от Nekrom Посмотреть сообщение
Но почему то этого не происходит.
Гадание на кофейной гуще по какому методу предпочитаете?

Без кода других ответов не будет, если что...
0
0 / 0 / 0
Регистрация: 03.02.2017
Сообщений: 14
11.04.2017, 16:08  [ТС] 6
Цитата Сообщение от Почтальон Посмотреть сообщение
Потому что плохой метод выбрали - хранить вопросы и ответы в ini-файле.
Мне показалось, что это самый легкий путь для хранения ответов.
Цитата Сообщение от Почтальон Посмотреть сообщение
эту переменную к строке приводите, чтобы считывать название секции ?
А это необходимо? Просто при начальной загрузке у меня с ini загружается и без преобразований в строку, и к тому же при проверке переменной, выяснилось что она свое значение меняет, а вот данные с ini почему то не загружаются.

Добавлено через 6 минут
Цитата Сообщение от volvo Посмотреть сообщение
Без кода других ответов не будет, если что...
Щас все будет)
C++
1
2
3
4
5
6
butId = StrToInt(RandomRange(1, Ini->ReadInteger("Var","last",last)));
Button1->Caption = Ini->ReadString(butId,"Ответ1","Def");
Button2->Caption = Ini->ReadString(butId,"Ответ2","Def");
Button3->Caption = Ini->ReadString(butId,"Ответ3","Def");
Button4->Caption = Ini->ReadString(butId,"Ответ4","Def");
right = StrToInt(Ini->ReadString(butId,"right","0"));
где butId - переменная, которой присваивается рандомное значение в пределах количества секции, а из ini уже, как видно, считывается секция под номером butId. Ну по крайней мере так должно быть)
right - показывает правильный ответ.

p.s. И да, все это в FormShow
0
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
11.04.2017, 16:22 7
Цитата Сообщение от Nekrom Посмотреть сообщение
p.s. И да, все это в FormShow
Мне кажется Вы ответили сами на свой вопрос.
0
управление сложностью
1689 / 1302 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.04.2017, 16:24 8
Цитата Сообщение от Nekrom Посмотреть сообщение
все это в FormShow
Этот обработчик срабатывает при показе формы. Вас следует для загрузки последующих данных использовать, например, обработчик кнопки
0
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
11.04.2017, 16:26 9
Цитата Сообщение от Nekrom Посмотреть сообщение
C++
1
2
3
4
5
6
butId = StrToInt(RandomRange(1, Ini->ReadInteger("Var","last",last)));
Button1->Caption = Ini->ReadString(butId,"Ответ1","Def");
Button2->Caption = Ini->ReadString(butId,"Ответ2","Def");
Button3->Caption = Ini->ReadString(butId,"Ответ3","Def");
Button4->Caption = Ini->ReadString(butId,"Ответ4","Def");
right = StrToInt(Ini->ReadString(butId,"right","0"));
Продублируйте этот код в обработчик кнопки (проинициализировав переменные) и думаю чудо может случиться
0
0 / 0 / 0
Регистрация: 03.02.2017
Сообщений: 14
11.04.2017, 16:35  [ТС] 10
Цитата Сообщение от demon_7 Посмотреть сообщение
Продублируйте этот код в обработчик кнопки (проинициализировав переменные) и думаю чудо может случиться
Да, как мне не хотелось это делать, но пришлось. Я в принципе и говорил, что мне кажется, что форма не обновляется. А есть ли более деликатный и красивый код для обновления формы, типа Form1->Update() или он будет работать только при переносе кода в обработчик кнопки?
p.s. Да, так работает

Добавлено через 52 секунды
Цитата Сообщение от Почтальон Посмотреть сообщение
Этот обработчик срабатывает при показе формы. Вас следует для загрузки последующих данных использовать, например, обработчик кнопки
Да, так робит, но вопрос выше)
0
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
11.04.2017, 16:46 11
Nekrom, зачем Вам выполнять считывание информации через обновление формы, как по мне в текущей задаче, это неверный подход к ее решению.
Более деликатно можете закинуть таймер на форму и в таймере обновлять каждые <заданный период> единиц.
0
0 / 0 / 0
Регистрация: 03.02.2017
Сообщений: 14
11.04.2017, 16:55  [ТС] 12
Цитата Сообщение от demon_7 Посмотреть сообщение
Более деликатно можете закинуть таймер на форму и в таймере обновлять каждые <заданный период> единиц.
Понял, спасибо за помощь!
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
11.04.2017, 22:22 13
Nekrom,
или можно простой трюк.
Цитата Сообщение от Nekrom Посмотреть сообщение
при выборе правильного ответа должна загрузиться следующая картинка и новый текст с ini
после выбора правильного ответа
повесить FormShow(0);
т.е. после ответа произойдет обращение к событию FormShow,
Цитата Сообщение от Nekrom Посмотреть сообщение
не обновляется форма
и все обновится опять.
1
11.04.2017, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2017, 22:22
Помогаю со студенческими работами здесь

Загрузка из Ini файла в TreeView
Здравствуйте! Кто-нибудь может мне показать как загрузить из INI файла в TreeView ? Кто может,...

Загрузка .ini файла в ListBox1
Люди у меня есть инифайл примерно вот такой: добавить выход Помогите его загрузить в...

Загрузка текста в TextBox из ini файла
Всем доброго времени суток! У меня проблема с ini файлами... Мне нужно чтобы при загрузке формы в...

Рандомная загрузка заданий с ini файла
Как сделать загрузку заданий из файла рандомной ? unit Unit1; interface uses ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru