Выпуск 06: Условия 2...

 
     

Архив рассылки

Доброго времени суток!

Тема прошлого выпуска была не из самых лёгких (для начинающих). По этому в этом выпуске я приведу ещё несколько примеров работы с условным оператором.

Есть задача :) Надо зделать программу-тест. Давайте вернёмся к Windows интерфейсу :)

Запустите Delphi. Найдите компонент RadioButton на вкладке Standart. Вы ещё не знакомы со свойствами этого компонента, но, думаю, отлично знаете для чего он преднозначен. Поставьте на форму три таких компонента. Главные свойства этого компонента - Caption и Checked. Поставьте на форму ещё метку и кнопку. Расположите все компоненты так:

http://spider3d.narod.ru/img/06/01.gif

Текст метки будет вопросом теста, а компоненты RadioButton - варианты ответов. В данном тесте будет всего один правильный ответ. Вопрос звучит так: "Сколько планет в Солнечной системе?". Варианты ответов: 9, 10, 11. Как делать дальше объяснять не буду, потому что вы уже умеете менять свойства компонентов (объектов). Также измените текст у кнопки. Лично мне нравится: "Проверить" :) Вот и всё. Скелет программы готов :) Она должна выглядеть примерно так:

http://spider3d.narod.ru/img/06/02.gif

Посмотрите, как у меня выглядит метка: текст записан в две строчки. За этим стоит свойство WordWrap. Когда его значение является True, если текст не вмещается в метке, то начинается новая строка. Замените это свойство на True и подгоните нужные размеры для метки (зделайте уже и выше).

Теперь приступим к кодированию. Нам надо обработать событие нажатия кнопки. Помните как это делается? Таких вещей забывать нельзя! :) Два раза "кликните" по ней.

Как я уже говорил, у RadioButton'а есть такое замечательное свойство Checked (помечен). Результат этого свойства имеет тип Boolean. Это значит, что свойство может иметь всего два "положения": True (да, когда компонент помечен) и False (наоборот :) Нам надо проверить помечен ли компонент, т.е. является ли значение свойства Checked - True. Если да, то надо сообщить правильный это ответ, или нет. Конечно, перед тем, как начинать всё это делать надо убедится, что вы сами знаете правильный ответ :)

Приступаем к работе. Первый этап:

begin
 if (RadioButton1.Checked = True)
  Then
   ShowMessage('Ответ не правильный!');

Здесь я не использую Else. Он нам и не нужен! :)

Второй этап - Проверим средний компонент:

 if (RadioButton2.Checked = True)
  Then
   ShowMessage('Ответ не правильный!');

И наконец - третий этап:

 if (RadioButton3.Checked = True)
  Then
   ShowMessage('Наверное просто угадал! :)');

Вот и вся программа. И кто говорил что программировать сложно? :) Запустите её и проверьте.

Ну как? Есть вопросы? :) Почему десять планет а не девять? Для тех, кто не смотрит новостей объясню :) А потому что совсем недавно обнаружили десятую! Находится она за Плутоном и названа в честь дочери (кажется) мужчины, который обнаружил планету. На самом деле про этот космический объект люди (по крайней мере космонавты :) знали уже давно, молько думали, что это обычная звезда. Ошиблись :)

Ну ладно. Отдохнули и хватит :) Наша программа должна отлично работать если вы всё правильно зделали.

Теперь чуть-чуть усовершенствуем её. Вернитесь в дизайнер и скопируйте все компоненты RadioButton. Чтобы их всех пометить надо просто удерживая нажатой левую клавишу мыши обвести вокруг них прямоугольник. А также можно их выделять по одному, удерживая клавишу Shift. Чтобы скопировать выберите в меню Edit->Copy. После этого удалите компоненты (клавиша Delete). Найдите в палитре компонентов панель (Panel, вкладка Standart) и поставьте её на форму.

Панель это компонент-контейнер. У него нету "главных" свойств. Уберите заголовок панели, так как он почти никогда не используется (и у нас не будет). Панель нужна для отделения групп компонентов, т.е. для удобства пользователя.

Убедитесь, что панель помеченна. Теперь можно вставить компоненты (Edit->Paste). У меня один RadioButton спрятался за другим. Не проблема! :) Переместите их в нужные места. Приведите программу в такой вид:

http://spider3d.narod.ru/img/06/03.gif

Запустите программу и убедитесь, что она всё ещё работоспособна.

Панель - компонент, похожий на форму, потому что он может хранить другие компоненты. В этом случае форма хранит метку, кнопку и панель, которая сама ещё хранит три компонента RadioButton. Для этой же цели можно также использовать GroupBox и другие похожие компоненты.

Зачем мы так "гиморно" перемесчали компоненты на панель? А попробуйте обычным способом переместить кнопку на панель, или те-же самые переключатели (RadioButton'ы). Получилось? Попробуйте ещё раз! И я думаю, что не очень-то получилось :) Вот именно по этой причине :) С одного контейнера на другой перемесчать компоненты нельзя!

И всётаки есть у панели четыре свойства, которые хоть и редко, но используются. Это: BevelInner, BevelOuter, BevelWidth и BorderStyle (можно к списку добавить и BorderWidth :). Замените эти значения на следущие: BevelInner=bvLowered, BevelOuter=bvSpace, BorderStyle=bsSingle. Что каждое свойство значит можно догадатся после нескольких експериментов :) Запустите программу. Приятнее выглядит? :) Вот так выглядит моя программа при исполнении:

http://spider3d.narod.ru/img/06/04.gif

Но вы заметили, что при включении программы не помечен ни один компонент! Нажмите на кнопку "Проверить". Сейчас наша программа ничего не делает, но если будем иметь дело с текстом появится ошибка, так что надо всегда проверять программу на наличие ошибки. Это мы будем делать в каждой программе OpenGL!

Надо бы сообщить пользователю, когда не помечен ни один компонент, чтобы он знал, почему программа не работает (ну, это уже для тупых пользователей :)

begin
(*--------------------------------
  Проверяется, помечены ли переключатели
---------------------------------*)
 If (RadioButton1.Checked = False)
  Then
   If (RadioButton2.Checked = False)
    Then
     If (RadioButton3.Checked = False)
      Then
       ShowMessage('Пожалуйста выберите вариант ответа.');
(*--------------------------------
  Проверяется вариант ответа
---------------------------------*)
 if (RadioButton1.Checked = True)
  Then
   ShowMessage('Ответ не правильный!');
 if (RadioButton2.Checked = True)
  Then
   ShowMessage('Ответ не правильный!');
 if (RadioButton3.Checked = True)
  Then
   ShowMessage('Наверное просто угадали! :)');
end;

Такая запись не очень удобная, не правда ли? Мы её зделаем получше, но не в этом выпуске (так надо!).

Теперь к программе добавим ещё одну "примочку" :) Тоже для тупых пользователей :) Таким способом вы научитесь работать с ещё одним свойством. Миссия такова: не разрешить глупому пользователю два раза выбрать один и тот-же неправильный вариант. Сложно? Легко! :)

Каждый визуальный (тот, который виден при исполнении программы), и не только, компонент имеет свойство Enabled (включён). Тип значения - Boolean. Заменим второй блок кода на такой:

(*--------------------------------
  Проверяется вариант ответа
---------------------------------*)

 if (RadioButton1.Checked = True)
  Then
   begin
    ShowMessage('Ответ не правильный!');
    RadioButton1.Enabled:= False;
   end;

 if (RadioButton2.Checked = True)
  Then
   begin
    ShowMessage('Ответ не правильный!');
    RadioButton2.Enabled:= False;
   end;

 if (RadioButton3.Checked = True)
  Then
   ShowMessage('Наверное просто угадали! :)');

end;

Заметили разницу? Думаю заметили, но поняли ли? :) Хотя тут и нечего понимать. Про дополнительные командные скобки и присвоение свойствам значений вы знаете. Остальное не изменилось. Вот весь код программы (на всякий случай):

begin

(*--------------------------------
  Проверяется, помечены ли переключатели
---------------------------------*)

 If (RadioButton1.Checked = False)
  Then
   If (RadioButton2.Checked = False)
    Then
     If (RadioButton3.Checked = False)
      Then
       ShowMessage('Пожалуйста выберите вариант ответа.');

(*--------------------------------
  Проверяется вариант ответа
---------------------------------*)

 if (RadioButton1.Checked = True)
  Then
   begin
    ShowMessage('Ответ не правильный!');
    RadioButton1.Enabled:= False;
   end;

 if (RadioButton2.Checked = True)
  Then
   begin
    ShowMessage('Ответ не правильный!');
    RadioButton2.Enabled:= False;
   end;

 if (RadioButton3.Checked = True)
  Then
   ShowMessage('Наверное просто угадали! :)');

end;

Конечно, программу можно ещё усовершенствовать, но это нам не нужно :) О новых свойствах вы не узнаете, а работать в визуальном программировании мы не будем. Такие примеры показываю, чтобы можно было легче воспринять тему выпуска и чтобы показать в каких случаях используются те или инные команды.

Теперь повторяю вопрос: надо ли также учить вас и работе с языком Си (так как он чаще всего используется в программироании OpenGL приложений)??? Ответы присылайте на адресс Spider3d@yandex.ru . Может быть в будущем зделаю в рассылке специальную форму для отправки писем :) Посмотрим.

Также хочу напомнить новым подписчикам: сначала прочтите все предыдущие выпуски, которые можно найти в архиве рассылки (ссылка в начале выпуска)!!!

Ещё один вопрос. Уже последний :) Не слишком ли длинные выпуски? А то мне говорят, что такие выпуски тяжелее воспринимаются. Ответы шлите туда-же.

На сегодня хватит :)
 

2005-10-11

Автор, ведущий и дизайнер рассылки: Евгений Нарышкин (spider3d@yandex.ru)

OpenGL для начинающих (under construction): http://spider3d.narod.ru/

Хостинг от uCoz