| 
| 
 | Вопрос # 1 698/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Вопрос такой. Есть на форме 20 переключателей. Есть текстовой файл - в нём - 20 цифр: 0 или 1. Считываем числа из файла в массив, далее прогоняем массив. Если i-тое значение 0 - переклчатель выключен, если 1 - включен.
 Можно ли сдлать это пееключение в цикле, а не переключая 20 CheckBox-ов?
 Приложение:Переключить в обычный режим var i: integer;sf: textfile;vkl: array [1..20] of integer;beginassignfile (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-файл лучше? Как с ним работать? Где мне почитать можно?
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |