Лабораторная работа № 14
Объекты из библиотеки визуальных компонент (VCL) Delphi, равно как и объекты реального мира, имеют свой набор свойств и свое поведение — набор откликов на события, происходящие с ними. Список событий для данного объекта, на которые он реагирует, можно посмотреть, например, в Инспекторе Объектов на странице событий.
Поведение объекта определяется тем, какие обработчики и для каких событий он имеет. Создание приложения в Delphi состоит из настройки свойств используемых объектов и создания обработчиков событий.
Большая часть кода, которую Вы будете писать в Delphi, будет инициироваться событиями. В принципе событием может быть изменение любой величины. Происхождение события заставляет работать определенный объект, при этом объект получает заранее определенные параметры для своей настройки на работу. В Delphi процедура, инициируемая событием, называется обработчиком события.
События делятся на три основные категории: события мыши, события клавиатуры и системные события.
Для формы событие OnClick возникает в том случае, если пользователь нажимает левую кнопку мыши в то время, когда курсор мыши находится на поле формы.
Напишите приложение, которое при нажатии левой кнопки мыши перекрашивает форму в красный цвет.
Для изменения цвета формы в обработчике события OnClick напишем следующий оператор:
Поясним оператор (*). MainF — это название объекта формы. Color — это свойство формы. Обращение к свойствам объекта происходит так же, как и в структуре данных записи, через точку.
В обработчике события указан параметр Sender, в котором хранится имя объекта, породившего данное событие (в примере Sender будет содержать ссылку на объект MainF — форму).
Запустите приложение. Щелкните левой кнопкой мыши на форме. Убедитесь, что цвет формы стал красным.
Что произойдет при повторном щелчке левой кнопкой мыши на форме? Возникнет событие OnClick, в результате которого выполнится оператор (*), т. е. цвет формы остается красным.
Напишите приложение, в котором при каждом щелчке левой кнопкой мыши произвольным образом изменяется цвет формы.
Итак, щелчок левой кнопкой мыши по форме порождает событие OnClick формы, т. е. приводит к обращению к процедуре TMainF.FormClick, в результате чего выполняется оператор (*) -изменение цвета формы на красный. Изменим оператор (*) в соответствии с формулировкой задачи:
Запустите приложение. Убедитесь, что после каждого щелчка по форме левой кнопкой цвет изменяется произвольным образом.
Напишите приложение, в котором при нажатии на левую кнопку мыши происходит смена цвета с зеленого на красный, и, наоборот, с красного — на зеленый.
При щелчке по левой кнопке мыши происходит событие OnClick. В соответствии с условием задачи в обработчике события OnClick формы необходимо проанализировать свойство Color формы: если его значение соответствует красному, то изменить его на зеленый (clGreen), иначе присвоить значение красный.
Сохраните приложение, запустите его. Проверьте выполнение условия задачи.
Событие OnDblClick происходит, если пользователь выполняет двойной щелчок левой кнопки мыши.
Напишите приложение, в котором при двойном щелчке левой кнопкой мыши изменяется вид курсора.
Каждое значение свойства Cursor имеет свой числовой эквивалент в пределах от -21 (crHandPoint) до 0 (crDefault). При каждом двойном щелчке левой кнопкой мыши значение свойства Cursor будем увеличивать на единицу, при достижении значения 0 — восстановим значение —21. Введите в обработчик события формы OnDblClick следующий оператор:
Сохраните проект и запустите его. Объясните, почему при каждом двойном щелчке левой кнопкой мыши сначала изменяется цвет формы, а затем — вид курсора.
Событие OnMouseDown возникает, если пользователь нажимает на правую, левую или среднюю кнопку мыши. Заголовок обработчика этого события имеет вид:
Событие OnMouseUp происходит, если пользователь освобождает кнопку мыши, которая была нажата. Заголовок обработчика этого события имеет вид:
Событие OnMouseMove происходит, если пользователь перемещает указатель мыши. Заголовок обработчика этого события имеет вид:
В параметре Button обработчики этих событий получают одно из значений mbLeft, mbRight или mbMiddle, в зависимости от того, какая кнопка мыши была нажата — левая, правая или средняя.
Параметр Shift указывает состояние клавиш Alt, Ctrl, Shift и кнопок мыши. Тип TShiftState описан так:
Значения ssShift, ssAlt, ssCtrl принадлежат множеству Shift, если клавиши Shift, Alt, Ctrl, соответственно, были нажаты; ssLeft, ssMiddle, ssRight — если нажаты левая, средняя или правая кнопки мыши; ssDouble — если произошел двойной щелчок.
В параметрах X и Y процедура получает координаты указателя мыши, выраженные в пикселях относительно формы.
Напишите приложение, позволяющее рисовать отрезки на форме.
Создайте новое приложение, выполнив последовательность команд: File \New \Application. Сохраните новое приложение в папке Exercise2. Файл модуля — под именем Main.pas, файл проекта — Exercise2.dpr.
Чтобы нарисовать на форме пунктирную линию красного цвета от точки с координатами (10,10) до точки (300,300), создайте обработчик события формы Click и введите следующие операторы:
Поясним код обработчика события. С помощью свойства Реп можно установить параметры изображения линии, такие, как цвет (Color), тип (Style), толщина (Width).
Метод MoveTo(x.y) перемещает графический курсор в точку с координатами (х,у).
Метод LineTo(x.y) рисует отрезок от текущего положения графического курсора до точки с координатами (х,у).
Сохраните проект. Убедитесь, что после щелчка мышью по форме на канве отображается один отрезок, соединяющий пиксели с координатами (10, 10) и (300, 300).
Эксперимент. Сохраните приложение. Попробуйте с помощью приложения написать свое имя.
Создайте приложение, позволяющее изображать кривые линии.
Закройте предыдущий проект, выполнив команду Close \All меню File. Создайте новое приложение, выполнив последовательность команд: File \New \Application. Сохраните новое приложение в папке ExerciseS. Файл модуля — под именем Main.pas, файл проекта — ExerciseS.dpr.
Кривая линия — это изображение следа курсора мыши. Перемещение курсора мыши возбуждает событие OnMouseMove. Создайте обработчик этого события и введите следующий оператор:
Сохраните приложение и запустите его. Убедитесь, что при перемещении курсора мыши на форме изображается линия, началом которой служит левый верхний угол формы. Кроме этого не удается завершить рисование кривой.
Устраним этот недостаток. Обработчик события OnMouseMove в параметре Shift получает состояние клавиш Ctrl, Alt, Shift и кнопок мыши. Для определенности положим, что линию будем рисовать в том случае, когда нажата левая кнопка мыши. Измените обработчик события следующим образом:
Сохраните проект и запустите его. Проверьте, что линия рисуется только тогда, когда перемещение мыши происходит с нажатой левой кнопкой.
При возникновении события “нажата левая кнопка мыши” программа информируется о том, в каком месте это произошло. Если вы хотите получить доступ к такой информации, то должны вернуться в Инспектор Объектов и создать обработчик события OnMouseDown:
Напишите приложение, которое изображает прямоугольники (эллипсы).
Закройте предыдущий проект, выполнив команду Close All меню File. Создайте новое приложение, выполнив последовательность команд: File \New \Application. Сохраните новое приложение в папке Exercise4. Файл модуля — под именем Main, файл проекта — Exercise4.
Переменные xl и yl являются глобальными, но их использование ограничивается пределами данного модуля, поэтому опишите их в разделе private класса TMainF.
Напишите приложение, которое позволяет рисовать ломаные линии.
Создайте новое приложение и сохраните его в папке Exercise5. Файл модуля — под именем Main.pas, файл проекта —Exercise5. dpr.
Объединение отрезков AjA2, AgAg, . А^Ад образуют ломаную AjAgAg.-.A^. Начало ломаной — это точка ai конец — точка Ад. Для рисования ломаной нужно задать ее начало, затем нарисовать звенья (отрезки, причем конец одного является началом другого) и, наконец, завершить ломаную (отметить ее конец).
Начало (конец) рисования ломаной линии свяжем с событием OnDblClick. Введем логическую переменную Draw: ее значение, равное True, будет обозначать рисование ломаной, False -завершение ломаной. В разделе interface модуля введите раздел констант (после раздела описания переменных Var):
В обработчике события OnMouseDown будем рисовать звенья ломаной, если значение переменной Draw равно True и перемещать графический курсор, в противном случае:
Сохраните проект, используя написанное приложение, попробуйте изобразить треугольник, четырехугольник и пятиугольник.
1. Напишите приложения для рисования разноцветных отрезков.
2. Напишите приложения для рисования эллипсов с закрашенной внутренней областью.
3. Измените код модуля для рисования замкнутых ломаных.
Обработку клавиатуры можно выполнить, используя комбинацию трех событий.
Событие OnKeyDown происходит при нажатии любой клавиши, включая функциональные и специальные:
Событие OnKeyPress возникает при нажатии клавиши, генерирующей символы ASCII, включая управляющие клавиши:
Событие OnKeyUp происходит при освобождении любой клавиши:
Параметр Shift имеет тип TShiftState (см. события мыши).
Напишите приложение, закрывающиеся при одновременном нажатии клавиш Alt и X.
Создайте новое приложение и сохраните его в папке Exercise6. Файл модуля — под именем Main.pas, файл проекта —Exercise6.dpr.
Приложение должно закрываться, если одновременно нажаты обе клавиши, для обработки воспользуемся событием ОпКеуDown. Создайте обработчик этого события.
Воспользуемся значением параметра Shift для определения нажатия клавиши Alt:
Убедитесь, что нажатие клавиши Alt приведет к закрытию формы.
Определим код клавиши X. Добавьте в обработчик события OnKeyDown оператор:
Здесь IntToStr(x) — это функция, которая преобразует целое число х в значение строкового типа, Key — код нажатой клавиши.
Запустите приложение. Определите виртуальный код клавиши с латинской буквой «х».
Итак, виртуальный код клавиши с латинской буквой «х» равен 88. Для решения задачи напишем следующий код обработчика события OnKeyDown формы:
Сохраните приложение. Убедитесь, что при одновременном нажатии клавиш Alt и латинской буквы «х» независимо от выбранного языка приложение закрывается. Объясните это.
Напишите программу, которая определяет нажатую на клавиатуре клавишу и выводит в заголовок формы информацию об этой клавише.
Например, при нажатии строчной латинской буквы ‘а’ в заголовке должна быть надпись:
«Код виртуальной клавиши=65 а — строчная латинская буква А8СП-код=97»
(аналогично для русских букв, цифр, специальных символов — запятая, точка, скобки и т. д.); при нажатии клавиши стрелка вправо:
«Код виртуальной клавиши = 39» (аналогично для всех специальных клавиш — Fl, Insert и т. д.).
Создайте новое приложение и сохраните его в папке Exercise?. Файл модуля — под именем Main.pas, файл проекта –Exercise.dpr
При нажатии любой клавиши клавиатуры возникают события OnKeyDown и OnKeyUp. Для получения информации о коде виртуальной клавиши создадим обработчик события OnKeyDown:
Сохраните приложение. Убедитесь, что при нажатии любой клавиши в заголовке формы отображается виртуальный код этой клавиши
Для отображения информации о символах воспользуемся обработчиком события OnKeyPress, параметр Key которого содержит символьное значение, представляющее символ ASCII. Создайте обработчик события OnKeyPress и введите оператор:
Сохраните приложение и запустите его. При нажатии на клавишу «F» в заголовке формы отображается символ F. Попробуйте объяснить это.
Это объясняется тем, что при нажатии на клавишу вначале происходит событие OnKeyDown, после обработки которого возникает событие OnKeyPress, и в результате этого код виртуальной клавиши затирается изображением символа. Измените код следующим образом:
Сохраните приложение. Проверьте, является ли написанная программа решением поставленной задачи.
Единственное, что осталось пропущенным — почему система Windows так спроектирована.
Если кратко, программист в Windows почти никогда не должен напрямую проверять “железо”. Система выполняет эту задачу и передает информацию программе в виде сообщений.
Почти все, что происходит в Windows принимает форму сообщений и, если вы хотите их использовать в Delphi (в большей мере это необходимо при написании своих собственных компонент), то нужно понять, как эти сообщения работают.
Если посмотреть на DefWindowProc в справочнике по Windows API, то можно увидеть следующее определение:
Каждое сообщение, посылаемое в окно, состоит из четырех частей: первая часть — handle окна, получающего сообщение, Msg сообщает, что произошло, а третья и четвертая части (wParam и lParam) содержат дополнительную информацию о событии. Вместе эти четыре части являются аналогом показанной выше структуры TEvent.
Последние две переменные, длиной 16 и 32 бита, называются wParam и lParam. Они сообщают программисту важную дополнительную информацию о каждом событии. Например, при нажатии кнопки мыши, lParam содержит координаты указателя мыши.
Итак, если подвести итог, то должно стать ясным следующее:
Windows является системой ориентированной на события;
В недрах VCL Delphi сообщения Windows обрабатываются и преобразуются в более простую для программиста форму;
Обработка событий в Delphi сводится к написанию для каждого объекта своих обработчиков;
События в программе на Delphi вызываются не только сообщениями Windows, но и внутренними процессами.
1. Напишите программу отображения графиков функций: У=Х2. y=sin(x); y=tg(x).
2. Напишите программу отображения графика функции y=a*sin(bx). При нажатии на клавиши влево/вправо происходит изменение параметра Ь, при нажатии на клавиши вверх/вниз — параметра а. В заголовок формы выведите название графика функции, например, y=3sin(-2x).
3. Напишите программу, которая подсчитывает количество нажатий клавиш управления курсором. Например, ‘Влево -1, Вверх — 0, Вправо — 5, Вниз — 37’.
4. Напишите программу, которая при нажатии на клавиши управления курсором перемещает форму в соответствующем направлении; при нажатии комбинации клавиши и клавиши управления курсором — изменяет размеры формы.
1. Для чего предназначены события? Перечислить основные категории событий.
3. Привести несколько примеров при участии события OnClick.
4. Привести несколько примеров при участии события OnDblClick
5. Как узнать, какая кнопка мыши нажата пользователями: правая, левая или средняя? Привести примеры.
6. На что указывает параметр Shift? Приведите пример со значениями этого параметра.
7. Поясните методы MoveTo (x.y) и LineTo (x.y).
8. В каком порядке выполняются события клавиатуры: OnKeyPress, OnKeyUp, OnKeyDown?
Лабораторная работа № 14
2. Скопируйте блок A1:D1 в строки 3, 5, 7. Копирование выполняется аналогично перемещению, но при нажатой клавише Ctrl.
9 класс — Подготовка к ГИА-9 2012 (Семёнов А.В.)
Электронные таблицы (или табличные процессоры) — это прикладные программы, предназначенные для проведения табличных расчётов и сложных расчётов по формулам.
Электронная таблица Excel разделена на клетки, которые принято называть ячейками таблицы. Строки и столбцы таблицы имеют обозначения: строки — числовую нумерацию, а столбцы — буквы латинского алфавита. Каждая ячейка имеет свой адрес, который состоит из имени столбца и номера строки, например: 1, 2, 15.
В каждую ячейку можно занести текст, число или формулу.
Документом Excel является файл с произвольным именем и расширением XLS (в Excel 2007 — . XLSX). Такой файл называется рабочей книгой. В ней размещаются электронные таблицы, каждая из которых называется рабочим листом.
Если в столбце остается свободная ячейка, то автозаполнение сбрасывается. Это свойство очень полезно, когда столбцы данных должны содержать повторяющиеся названия фирм, городов, стран или другую подобную информацию.
В Excel существует несколько форм указателя мыши, которые меняются при перемещении по листу:
• При выборе и выделении ячеек используется указатель, который имеет вид большого белого креста.
• При заполнении ячеек указатель мыши принимает вид чёрного крестика. Он появляется тогда, когда указатель мыши расположен ниже правого нижнего угла активной ячейки у чёрного квадрата, который называется маркером заполнения.
• При установке указателя мыши на границу активной ячейки он принимает вид стрелки, с помощью которой можно перемещать активную ячейку.
При вводе повторяющихся данных можно произвести копирование ячеек, протянув маркер заполнения вниз, выделяя ячейки, в которые будет скопирована информации.
Редактирование таблиц заключается в изменении содержимого ячеек и вставке и удалении ячеек, срок и столбцов таблицы. Изменить содержимое ячейки можно двумя способами:
1. При активизации ячейки и вводе нового содержания старая информация стирается.
2. Можно отредактировать содержание ячейки в строке формул. Для этого следует активизировать ячейку и перейти в строку формул, где и отредактировать её, или, щёлкнув дважды по ячейке, отредактировать содержимое непосредственно в ней.
Для удаления содержимого ячейки нужно или щелкнуть на ячейке правой клавишей мыши и в контекстном меню выбрать Очистить содержимое, или нажать клавишу [Delete] на клавиатуре. Пункт Удалить в контекстном меню удаляет не только содержимое ячейки, но и саму ячейку.
Чтобы удалить содержимое, сначала нужно выделить строку или столбец, затем нажать клавишу DELETE на клавиатуре. Для удаления не только содержимого ячеек, но и всей строки применяется команда Правка|Удалить.
Задание формата ячеек. Если необходимо изменить цвет данных в ячейке, округлить данные, задать такой формат данных, чтобы после каждого числа стояло «руб», то нужно щелкнуть по ячейке или интервалу
ПРАВОЙ клавишей мыши и выбрать в появившемся меню пункт «Формат ячеек». (То же самое можно сделать, выполнив Формат|Формат ячеек.) Появляется диалоговое окно, в котором представлены различные категории форматов ячеек: числовой, текстовый, денежный, дата и т.д.
Щёлкнув по слову «Число», можно получить все возможные виды представления чисел, например:
• формат «О» показывает, что числа будут округляться до целого;
• 0,00 — числа округлятся до двух знаков после запятой;
• ###0 — через каждые три знака будет ставиться пробел; например, число 123456789 будет выглядеть так: 123 456 789;
• «Красный» — отрицательные числа будут выводиться красным цветом.
Цвет ячеек и рамки таблицы. Для того чтобы таблица имела более привлекательный и законченный вид, надо выделить её рамками. Для этого надо выделить интервал ячеек, в котором нужно провести линии и выполнить команды Формат|Ячейки|Граница. Появится окно, с помощью которого можно задать линии границы таблицы, цвет и т.п.
Заливку ячеек можно произвести, используя третью строку меню и команду заливки.
Если таблица перестанет помещаться на экране (по горизонтали и по вертикали), возникает необходимость «закрепить заголовок», чтобы при перемещении было видно название столбца и строки.
Установите маркер в указанное место и выполните Окно|Закрепить области. Теперь, если перемещать маркер вправо, то первые три столбца с экрана не исчезнут, а при перемещении маркера вниз не двигается шапка.
Ссылки на ячейки в формулах и функциях может производится с использованием относительных и абсолютных координат.
Относительные ссылки. В формуле А1 + В1, записанной в ячейку С1, использована относительная ссылка, которая основана на относительной позиции ячейки, содержащей формулу, и ячеек, на которую указывает ссылка. При копировании формулы в ячейку С 2 автоматически изменяется и ссылка на А2 + В2.
Абсолютные ссылки. При абсолютной адресации на ячейку в формуле происходит ссылка на ячейку, которая расположена в определенном месте. Абсолютная ссылка на ячейку А\ записывается $А$1, и при изменении позиции ячейки, содержащей формулу, абсолютная ссылка не изменяется. По умолчанию в новых формулах используются относительные ссылки.
Смешанные ссылки. Смешанная ссылка на ячейку в формуле может содержать либо абсолютно адресуемый столбец и относительно адресуемую строку, либо наоборот. Абсолютная ссылка на столбец имеет вид: $А1, $В1 и т. д., а на строку — А$1, В$1 и т. д. При переходе на другую ячейку, содержащую формулу, относительная ссылка изменяется, а абсолютная ссылка нет.
Формула может содержать ссылки на ячейки, которые расположены на другом рабочем листе или даже в таблице другого файла. Однажды введённая формула может быть в любое время модифицирована. Программа Excel позволяет работать со сложными формулами, которые содержат несколько операций.
Создание формул. Пусть число, которое находится в ячейке А1 таблицы, нужно умножить на число в ячейке В1 и результат поместить в ячейку С1. Для создания этой формулы существует три способа:
1. Активизировать ячейку С1, нажать знак =, щелкнуть по ячейке А1, ввести знак операции, щелкнуть по ячейке В1 и завершить ввод формулы кнопкой [Enter] на клавиатуре или щёлкнув зеленую галочку « Enter » на панели инструментов. Формула может содержать несколько ячеек и операций.
Можно ввести формулы, используя имя столбца. Например, столбец А1 озаглавить «Время», столбец В1 — «Скорость», а в столбец С1 ввести «=Время*Скорость» и закончить ввод. В столбец С1 будет записано произведение содержимого А\ на В\.
2. Ввод формул с помощью адресов нужных ячеек. Этот способ удобен, если ячейки находятся далеко друг от друга и применение 1 способа неудобно.
Если формула в таблице одна и та же, её можно скопировать, используя маркер заполнения, как при копировании содержимого ячеек.
Для того чтобы сослаться на содержимое других листов рабочей книги, при вводе формул нужно начать набор формулы на первом листе, затем, не нажимая [Enter], перейти на нужный лист и активизировать ячейку с теми данными, которые необходимы для вычислений. В строке формул появится имя листа и адрес ячейки. После этого нажать [Enter].
Для того чтобы сбросить условия, нужно выбрать параметр «Все»
Чтобы установить два условия по одному столбцу, нужно в ниспадающем списке условий выбрать «Условие». Можно установить условия и для нескольких полей.
Сортировка таблицы. Перед сортировкой таблицы её нужно сохранить на диске.
Если необходимо упорядочить (произвести сортировку) таблицы по названиям фирм, выполните Данные|Сортировка. Курсор должен находиться внутри таблицы. В появившемся окне нужно выбрать столбец и указать сортировку по возрастанию или по убыванию.
Построение диаграммы с помощью Мастера диаграмм. Запустите Мастер диаграмм, щёлкнув по соответствующей пиктограмме на панели инструментов. В появившемся окне представлены стандартные и нестандартные типы диаграмм. Для удобства выбора справа в окне появятся демонстрационные образцы диаграмм и их краткое описание.
Выполняя пошаговые команды Мастера диаграмм можно получить выбранную диаграмму заданного диапазона данных с необходимыми заголовками, подписями данных и легендой.
В полученной диаграмме можно изменять формат элементов данных, цвет координатной сетки.
11. Электронная таблица Microsoft Excel
В параметре Button обработчики этих событий получают одно из значений mbLeft, mbRight или mbMiddle, в зависимости от того, какая кнопка мыши была нажата — левая, правая или средняя.