Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 698

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Вопрос такой. Есть на форме 20 переключателей. Есть текстовой файл - в нём - 20 цифр: 0 или 1. Считываем числа из файла в массив, далее прогоняем массив. Если i-тое значение 0 - переклчатель выключен, если 1 - включен.
Можно ли сдлать это пееключение в цикле, а не переключая 20 CheckBox-ов?

Приложение:
  1. var i: integer;
  2. sf: textfile;
  3. vkl: array [1..20] of integer;
  4. begin
  5. assignfile (sf, '...');
  6. reset(sf);
  7. for i:= 1 to 20 do writeln(sf, vkl[i]);
  8. closefie;
  9. for i:= 1 to 20 do
  10.  
  11. 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

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

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-файл лучше? Как с ним работать? Где мне почитать можно?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.03 сек.