|
Вопрос # 1 698/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Вопрос такой. Есть на форме 20 переключателей. Есть текстовой файл - в нём - 20 цифр: 0 или 1. Считываем числа из файла в массив, далее прогоняем массив. Если i-тое значение 0 - переклчатель выключен, если 1 - включен.
Можно ли сдлать это пееключение в цикле, а не переключая 20 CheckBox-ов?
Приложение: Переключить в обычный режим- var i: integer;
- sf: textfile;
- vkl: array [1..20] of integer;
- begin
- assignfile (sf, '...');
- reset(sf);
- for i:= 1 to 20 do writeln(sf, vkl[i]);
- closefie;
- for i:= 1 to 20 do
-
- end;
 |
Вопрос задала: Тамара (статус: Посетитель)
Вопрос отправлен: 16 июня 2008, 19:46
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: DoS
Здравствуйте, Тамара!
Можно завести ещё один массив, только типа Boolean.
И переключайте себе на здоровье :)
 |
Ответ отправил: DoS (статус: 1-ый класс)
Время отправки: 16 июня 2008, 20:46
Оценка за ответ: 3
Комментарий к оценке: Чего-чего? Куда его девать? И как записать в файл?
|
Ответ #2. Отвечает эксперт: ANBsoft
Здравствуйте, Тамара!
Такие вопросы уже были.
Примерно так:
for i:= 1 to 20 do
TCheckBox(FindComponent('CheckBox'+IntToStr(i))).Checked:=(vkl[i]>0);
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 16 июня 2008, 21:46
Оценка за ответ: 5
Комментарий к оценке: Супер! То что надо! Опробую!
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 21 июня 2008, 09:48; участников в обсуждении: 4.
|
iPharaon (статус: 1-ый класс), 17 июня 2008, 00:16 [#1]:
Здраствуйте тамара, можно ешё так:
for i:= 1 to 20 do
if components[i] is TCheckBox then
(Components[i] as TCheckBox).Checked:=(vkl[i]>0);
|
|
Мережников Андрей (статус: Абитуриент), 17 июня 2008, 05:41 [#2]:
Способ, описанный iPharaon, сработает правильно только в том случае, если номер чекбокса совпадет с его номером как компонента, расположенного на форме. Т.е. в этом случае компоненты на форме надо располагать в определенном порядке: сначала какой-нибудь Label (компонент номер 0), затем подряд 20 чекбоксов.
|
|
Тамара (статус: Посетитель), 17 июня 2008, 20:49 [#3]:
Понято. Спасибо!
|
|
DNK (статус: Студент), 19 июня 2008, 20:49 [#4]:
Тамара!
Маленький нюанс. Writeln - процедура записи, а не чтения.
Маленький совет на будущее. Такое неявное задание аргументов при разрвитии проекта может преподнести немало сюрпризов. Лучше задавать однозначное соответствие имени компонента и его параметров. Можно использовать XML- или Ini-файл.
Самое же простое файл следующего вида:
<имя компонента>=<0 или 1>
Тогда загрузить состояние флажков следующим кодом:
var sl: TstringList;
i: integer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('...');
for i:=0 to sl.Count-1 do
if Assigned(FindComponent(sl.Names[i])) then
TCheckBox(FindComponent(sl.Names[i])).Checked := sl.Values[sl.Names[i]] = '1';
finally
sl.Free;
end;
end;
"Digital Networked Knight"
|
|
Тамара (статус: Посетитель), 21 июня 2008, 09:48 [#5]:
Денис, спасибо. Вы правы - read, конечно.
А чем ini-файл лучше? Как с ним работать? Где мне почитать можно?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|