Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Инструкция множественного выбора case



Case – инструкция множественного выбора. В случае, когда нужно выбрать один вариант из нескольких, можно конечно, воспользоваться конструкцией if. Однако case позволяет сделать это намного эффективнее. Синтаксис инструкции такой:

case Селектор of

значение 1 : begin

Инструкции 1

end;

значение 2 : begin

Инструкции 2

end;

значение n : begin

Инструкции n

end

else begin

Инструкции иначе

end;

Здесь "Селектор" – это переменная целого типа или символьного типа, либо выражение, которое возвращает целое число или букву. Блок else не является обязательным. В случае, если инструкция содержит только один оператор, использовать программные скобки begin .. end необязательно. Пример применения case:

case i of

1 : ShowMessage('i = 1');

2 : ShowMessage('i = 2');

3 : ShowMessage('i = 3');

4 : ShowMessage('i = 4');

else ShowMessage ('i не равно 1, 2, 3 или 4');

end;

 

Шуточная программа

Теперь мы можем написать шуточную программу с формой и кнопкой, где пользователь ни за что на свете не сможет нажать на кнопку мышью, потому что кнопка будет убегать от указателя мыши. Эта простая программа была описана в одном из номеров журнала "Хакер". Она как нельзя лучше показывает, каким образом можно программным способом менять свойства. Как кнопка будет убегать? С помощью программного изменения свойств Left и Top! Однако, чтобы понять код программы от начала до конца, познакомимся с новой функцией. Функция Random() возвращает случайное число. Эту функцию еще называют генератором случайных чисел. Синтаксис функции очень простой:

Random( Integer ) : Integer;

То есть, в качестве параметра мы должны передать целое число, и получить другое число в качестве результата. Например,

Random(5) будет возвращать в случайном порядке числа от 0 до 4 включительно. То есть, возвращаемое значение будет:

0 <= возвращаемое_значение < исходное_число.

Наша кнопка должна убегать от указателя мыши хаотично, непредсказуемо, для этого и потребуется функция Random().

Создайте форму среднего размера и бросьте на нее только одну кнопку. Для большего эффекта в свойстве Caption формы напишите: "Выиграй приз!". А на кнопке напишите "Нажми меня".

Какой бы быстрой ни была реакция пользователя, она никак не сравниться со скоростью, с какой процессор обрабатывает инструкции. А процессор обрабатывает миллионы инструкций в секунду! Поэтому пользователь никогда не сможет нажать на кнопку мышью, но сможет это сделать с помощью клавиши <Enter> на клавиатуре. Учтем это. Создадим обработчик нажатия кнопки и там напишем только одну строку:

ShowMessage('Enter нажимать нечестно, пользуйся мышкой!');

Теперь осталось написать код убегания мыши. В инспекторе объектов откройте вкладку Events (события). Нас интересует событие OnMouseMove, которое происходит всякий раз, когда указатель мыши оказывается над кнопкой. Щелкните дважды по событию, и в редакторе кода введите следующее:

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);var index : Integer;begin index := random(4); //присваиваем переменной случайное значение от 0 до 3 //в зависимости от значения переменной, выбираем действиеcase index of 0: Button1.Left := Button1.Left + Button1.Width; //двигаем кнопку вправо, на значение ширины кнопки 1: Button1.Left := Button1.Left - Button1.Width; //кнопка влево, на значение ширины 2: Button1.Top := Button1.Top + Button1.Height; //кнопка вниз, на значение высоты 3: Button1.Top := Button1.Top - Button1.Height; //кнопка вверх, на значение высотыend; //case {Если кнопка вышла за пределы формы, вернем ее в положение 0} if Button1.Left < 0 then Button1.Left := 0; if Button1.Top < 0 then Button1.Top := 0; if (Button1.Left + Button1.Width) > Form1.Width then Button1.Left := Form1.Width - Button1.Width; if (Button1.Top + Button1.Height) > Form1.Height then Button1.Top := Form1.Height - Button1.Height; end;

Разберем этот код. В самом начале в переменную index мы записываем случайное число, от 0 до 3. Это нам нужно, чтобы знать, куда двигать кнопку, ведь двигать ее можно влево, вправо, вверх или вниз. В зависимости от того, какое значение мы получили, программа выберет направление перемещения кнопки. Для этого используется конструкция case. Если в переменной у нас число 0, то кнопка будет двигаться вправо. Как это происходит? Свойству Left (левая позиция) кнопки мы присваиваем новое значение – левую позицию этой же кнопки, плюс ее ширину. Другими словами, кнопка сдвинется вправо на расстояние, равное ширине этой кнопки. Таким же образом мы сдвигаем кнопку влево, если переменной index будет присвоено число 1. Только здесь мы не прибавляем, а отнимаем ширину.

Почти таким же образом кнопка убегает вверх или вниз, но здесь мы используем другие свойства – Top (расстояние от верхней границы окна до кнопки) и Height (высота кнопки в пикселях). Соответственно, если мы прибавляем высоту к верхней границе, кнопка убегает вниз, и наоборот.

Когда заканчивается конструкция case, может оказаться, что кнопка убежала за пределы формы. Поэтому далее идет проверка – если левая или верхняя границы кнопки оказались меньше нуля, то возвращаем кнопку в пределы формы, присвоив этой границе ноль.

Далее проверяем другую границу окна. Если левая позиция кнопки плюс ее ширина окажутся больше ширины окна, следовательно, кнопка вышла за пределы границы окна справа. Возвращаем ее в пределы окна, отняв от ширины окна ширину кнопки.

Точно также проверяем, не вышла ли кнопка за нижнюю границу окна.

Попробуйте самостоятельно добавить на форму еще одну кнопку, и запрограммировать ее поведение таким же образом.

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.