Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1129
от 24.04.2008, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 454, Экспертов: 55
В номере:Вопросов: 1, Ответов: 1

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 132843: Здравствуйте дорогие эксперты! Помогите мне пожалуйста написать программку-головоломку, которая состоит из формы с пятью компонентами CheckBox-ов. Требует следующее: из изображённых пяти сброшенных флажков установить все. Но при выборе одного...

Вопрос № 132.843
Здравствуйте дорогие эксперты!
Помогите мне пожалуйста написать программку-головоломку, которая состоит из формы с пятью компонентами CheckBox-ов.
Требует следующее: из изображённых пяти сброшенных флажков установить все. Но при выборе одного флажка меняется состояние двух следующих. Пробовала разные варианты, но желаемого результата не выходило. И почему-то при написании следующего:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if (sender as TCheckbox).Checked=true then (sender as TCheckBox).Enabled:=false
else (sender as TCheckbox).Enabled:=true;
if (sender=checkbox1) and (Checkbox1.Checked=true) then
begin
Checkbox2.Checked:=not CheckBox2.Checked;
Checkbox3.Checked:=not CheckBox3.Checked;
end;
if (sender=checkbox2) and (Checkbox2.Checked=true) then
begin
Checkbox3.Checked:=not CheckBox3.Checked;
Checkbox4.Checked:=not CheckBox4.Checked;
end;
if (sender=checkbox3) and (Checkbox3.Checked=true) then
begin
Checkbox4.Checked:=not CheckBox4.Checked;
Checkbox5.Checked:=not CheckBox5.Checked;
end;
if (sender=checkbox4) and (Checkbox4.Checked=true) then
begin
Checkbox5.Checked:=not CheckBox5.Checked;
end;
end; ,

у меня выходит так, что нажимая на первый компонент, у меня флажки меняются во втором и чётвёртом, и ещё какие-то странности, хотя так просто вроде написано. Может есть какой-то другой фактор поведения моей программы?
Отправлен: 18.04.2008, 15:51
Вопрос задала: Cassie (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: SHERRY
Здравствуйте, Cassie!
Необходимо работать с флажками, как с массивом. Форма является контейнером для флажков. У объектов-контейнеров есть свойство Controls (Элементы управления) - массив элементов управления, находящихся в данном контейнере: Controls[i] as CheckBox.
Итак, у нас 5 CheckBox-ов.
Перейдём к коду прграммы.

var s: boolean; // глобальная переменная

Procedure TForm1.FormCreate(Sender: TObject);
begin
s:=false;
end;

Procedure TForm1.CheckBox1Click(Sender: TObject);
var
index, i, num: integer;
e: boolean;
begin
if s then exit; // Если программа снова вызовет процедуру обработки, будет выполнен оператор Exit - немедленный выход из процедуры
s:=true;
for index:=0 to 4 do // оператор break прерывает выполнение цикла
if Sender=Controls[i] then break; // Определяем какой флажок был переключён
// когда выполнение цикла заканчивается, значение переменной index соответствует переключённому флажку
// Ели значение свойства Checked равно false, флажок сброшен, а если true - установлен. Номер флажка в массиве определяется переменной index
if not (Controls[index] as TCheckBox).Checked then (Controls[index] as TCheckBox).Checked:=true;
else
//изменение состояния "дополнительных флажков". Текущий флажок уже переключён
begin
num:=index+1; // переключение двух следующих флажков
if index=4 then num:=0; // изменение нулевого флажка
// Состояние флажка меняем на противоположное
(Controls[num] as TCheckBox).Checked := not (Controls[num] as TCheckBox).Checked;
// выполняем проверку на выход за пределы массива
inc(num);
if index = 3 then num := 0;
(Controls[num] as TCheckBox).Checked := not (Controls[num] as TCheckBox).Checked;
end;
e := true; // головоломка решена, если установлены все 5 флажков
for i:=0 to 4 do
e:=e and (Controls[i] as TCheckBox).Checked;
//после цикла значение останется равным true, если все флажки установлены
if e then // головоломка решена
ShowMessage('You win!');
s:=false;
end;

Удачи!
---------
Самурай без меча подобен самураю с мечём, только без меча..
Ответ отправил: SHERRY (статус: Студент)
Ответ отправлен: 18.04.2008, 17:02


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.91 pre 5.0 RC1 от 13.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное