Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Изучение свойств полос прокрутки
В программах часто используются горизонтальные и вертикальные полосы прокрутки для того, чтобы прокрутить документ в окне или пролистать список и т.п. Покажем, что эти элементы управления могут быть использованы и в других целях. Создайте новый проект. В форме проекта разместите горизонтальные полосы прокрутки снизу вверх. Они получат имена HScroll1, HScroll2, HScroll3. Разместите вверху надпись с именем Label1 и установите ее свойство Caption в пустое состояние (т.е. удалите надпись Label1 в окне свойств, но не перепутайте надпись с именем!). Используя надписи, занумеруйте полосы снизу вверх как показано на рисунке. Верхняя надпись будет использоваться для отображения значения свойства Value полос прокрутки при перемещении их движков. Введите в процедуры соответствующих событий полос прокрутки и формы нижеприведенный код. Сохраните проект в вашей папке под именем Прокрутка. Запустите программу и посмотрите, как она работает. Разберите по описанию текст программы.
1. Option Explicit
2. Private Sub Form_Load() 3. HScroll3.Min = Asc("A") 4. HScroll3.Max = Asc("Z") 5. Label1.Caption = "Текущее значение свойства Value третьей полосы" & Chr(HScroll3.Value) 6. End Sub
7. Private Sub HScroll1_Change() 8. HScroll1.Min = 0 9. HScroll1.Max = 100 10. Label1.Caption = "Текущее значение свойства Value первой полосы" & HScroll1.Value 11. End Sub
12. Private Sub HScroll2_Change() 13. Label1.Caption = "Текущее значение свойства Value второй полосы" & Chr(HScroll2.Value) 14. End Sub
15. Private Sub HScroll2_GotFocus() 16. HScroll2.Min = 0 17. HScroll2.Max = 255 18. End Sub
19. Private Sub HScroll2_Scroll() 20. Label1.Caption = "Текущее значение свойства Value второй полосы " & Chr(HScroll2.Value) 21. End Sub
22. Private Sub HScroll3_Change() 23. Label1.Caption = "Поиск " & Chr(HScroll3.Value) 24. End Sub
25. Private Sub HScroll3_Scroll() 26. Label1.Caption = "Отпустите кнопку, чтобы выбрать букву" & Chr(HScroll3.Value) 27. End Sub
Строки с 2 по 6 обрабатывают событие загрузки формы. Оно используется чтобы установить начальные значения для полосы прокрутки с номером 3 (на рисунке верхняя строка). В строках 3 и 4 устанавливается минимальное и максимальное значение для крайнего левого и крайнего правого положения движка полосы прокрутки. Для этого первая буква латинского алфавита "А" и последняя буква алфавита "Z" преобразуются в свой ASCII-код с помощью функции Asc. Полученные значения присваиваются свойствам Min и Max объекта HScroll3 соответственно. В 5 строке Свойству Caption объекта Label1 присваивается текущее значение свойства Value третьей полосы прокрутки. С помощью операции конкатенации строк "сшивается" текст и текущее значение свойства Value полосы. Функция Char выполняет обратное преобразование кода ASCII в соответствующий символ, так как при загрузке движок полосы находится в крайнем левом положении, функция Char вернет минимальное значение свойства Value – букву "А" и после загрузки формы это отобразится в надписи. При перемещении движка полосы 3 изменяются буквы в надписи. С помощью такого механизма можно осуществлять алфавитный поиск в списках, каталогах и др. Нажатие стрелок на концах полосы прокрутки обрабатывается событиями Change (строки 22-24), а перетаскивание движка мышью – событием Scroll (строки 25-27). То, что при этом запускаются различные процедуры обработки событий, можно заметить по появлению различных сообщений в надписи. Минимальное 0 и максимальное 255 значения свойств Min и Max для второй полосы устанавливается в строках 15-18 в ответ на событие получения фокуса второй полосой (GotFocus). Полоса получает фокус при ее выборе, т.е. щелчке мышью по ней. Событие получения фокуса возникает раньше, чем события Change(строки 12-14) или Scroll(строки 19-21), что дает возможность присвоить начальные значения. Обрабатываются события Change и Scroll для второй полосы точно также как и для третьей. При этом в надписи отображаются все символы с ASCII-кодами от 0 до 255. Преобразование код-символ выполняет функция Char. Так визуально можно просмотреть кодовую таблицу символов. Для первой полосы начальные значения присваиваются прямо в процедуре события Change (строки 7-11).Полоса просто отображает все числа в диапазоне от 0 до 100. Положение движка вычисляется как процент от разности максимального и минимального значений для полосы, поэтому ширина движка на полосах прокрутки разная. В этом примере мы познакомились с полосами прокрутки, их свойствами, примерами использования для различных целей, функциями Asc и Char, событиями полос прокрутки и очередностью их возникновения.
Пример 6 Разработка простейшей игровой программы "Удача"
Создадим игровую программу, работающую по принципу "однорукого бандита". Правда, так как игра электронная, то некуда бросать деньги. Суть игры в следующем: при нажатии кнопки Spin (вращать), изменяются числа в надписи справа от этой кнопки. Числа меняются случайным образом и, если выпадет хотя бы одна семерка, то засчитывается выигрыш, о чем программа сообщает пользователю и отображает картинку. Программа должна вести учет количества выигрышей, попыток и определять вероятность выигрыша (рейтинг). Создайте новый проект. Разместите в форме элементы управления Label для трех чисел, названия игры, счета, попыток и рейтинга. Текстовое поле Text для сообщения о выигрыше (впрочем, это может быть и элемент типа Label), командные кнопки. Установите для объекта Image свойство Visible (отображение) в False (ложь). При этом в режиме работы программы картинка перестанет быть видимой. Картинку возьмите любую из числа тех, которые есть на вашем компьютере. Она должна иметь одно из расширений bmp, wmf,gif, jpeg или ico. Введите в процедуры событий элементов управления формы нижеприведенный код. Добавьте к проекту модуль класса из меню Проект/Добавить модуль. Введите в окно кода этого модуля программный код, помеченный как код модуля класса. Сохраните проект в своей папке под именем Удача.
Код модуля формы
1. Private Sub Command1_Click() 2. Image1.Visible = False 3. Label1.Caption = Int(Rnd * 10) 4. Label2.Caption = Int(Rnd * 10) 5. Label3.Caption = Int(Rnd * 10) 6. If Label1.Caption = 7 Or Label2.Caption = 7 Or Label3.Caption = 7 Then 7. Image1.Visible = True 8. Счет = Счет + 1 9. Попытки = Попытки + 1 10. Text1.Text = "Получите выигрыш!" 11. Label5.Caption = "Счет= " & Счет 12. Label6.Caption = "Попытки= " & Попытки 13. Label7.Caption = "Рейтинг= " & Рейтинг(Счет, Попытки) 14. Beep 15. Else 16. Попытки = Попытки + 1 17. Label6.Caption = "Попытки= " & Попытки 18. Text1.Text = "Крутите барабан!" 19. End If 20. End Sub
21. Private Sub Command2_Click() 22. End 23. End Sub
24. Private Sub Form_Load() 25. Randomize 26. Text1.Text = "Жмите ""Spin""" 27. Счет =0: Попытки = 0 28. End Sub
Код модуля класса
29. Option Explicit
30. Public Счет As Integer, Попытки As Single 31. Function Рейтинг(a, b) As String 32. Рейтинг = Format(a / b, "0,0%") 33. End Function
При загрузке формы выполняется процедура в строках 24-28. В ней выполняется функция Randomize, которая обеспечивает генерацию случайных чисел, устанавливается содержимое текстового поля, приглашающее нажать кнопку вращения, обнуляются переменные Счет и Попытки. Заметим, что эти переменные описаны в модуле класса и видны всем другим модулям программы. Описаны они в модуле класса потому, что при нажатии кнопки вращения значения счета, рейтинга и количества попыток должны накапливаться, а не теряться. Если описать эти переменные в модуле формы или процедурах обработки событий, их значения будут каждый раз утрачиваться при нажатии кнопки вращения. Проверьте это самостоятельно. При нажатии кнопки вращения происходит следующее: картинка становится невидимой, если до этого она была видимой в результате выигрыша, с помощью функций Rnd и Int в трех надписях вверху формы выводятся случайные целые числа в диапазоне от 0 до 10 (функция Rnd выдает случайные числа от 0 до 1, поэтому, чтобы увеличить диапазон умножаем их на 10. Функция Int округляет результат до целых значений). В строке 6 с помощью логического оператора Or проверяется, не выпала ли хотя бы в одном из полей семерка. Если она выпала, то картинка становится видимой, счет и количество попыток увеличивается на единицу и отображаются в соответствующих надписях, подсчитывается рейтинг и также отображается в форме, а в текстовом поле появляется текст "Получите выигрыш" и раздается звуковой сигнал, инициированный функцией Beep. Если выигрыш не выпал, то количество попыток увеличивается на единицу и отображается в надписи, а в текстовом поле появляется надпись "Крутите барабан". В модуле класса определена процедура-функция или, как ее еще называют, пользовательская функция (строки 31-33). Она выполняет единственную операцию – рассчитывает рейтинг. Рассмотрим ее подробнее, так как с такими конструкциями мы еще не встречались. Начинается функция с ключевого слова Function и заканчивается ключевым словом End Function. За словом Function следует имя функции Рейтинг, а в скобках стоят так называемые формальные параметры, которые функция должна получить для расчета рейтинга. Тип функции описан как строковый. Формальные параметры a и b называются так потому, что они в процессе использования функции могут быть заменены реальными переменными, а в описании функции они играют роль временных переменных, назначение которых в том, чтобы просто показать что и на что делится при вычислении рейтинга. С помощью функции Format вычисляется отношение a/b, а полученный результат преобразуется в процентную форму и присваивается имени функции. Отметим, что возвращаемый функцией результат всегда должен присваиваться имени функции (строка 32). В месте использования функции (строка 13) вместо формальных параметров указаны реальные переменные Счет и Попытки, по значению которых и вычисляется рейтинг. Причем, на первом месте должна стоять переменная Счет, чтобы рейтинг вычислялся как Счет/Попытки, потому что именно на этом месте стоит формальный параметр, а в описании функции, который потом и делится на b. Вероятность выигрыша можно резко понизить, если потребовать, чтобы выигрышной считалась ситуация, когда выпадают все три семерки. Подумайте, что и как надо изменить в программе, чтобы добиться этого. Попытайтесь сами составить сценарий подобной игры и запрограммировать его. Вы можете спроектировать интерфейс программы по своему вкусу и ввести в нее дополнительные эффекты. Возможно, вы к этому вернетесь, когда изучите дальнейший материал. В данном примере мы познакомились с функциями генерации случайных чисел Randomize и Rnd, проверкой логических условий, а также созданием пользовательской функции Рейтинг.
Пример 7
|