- •Лабораторная работа №3. Тема: Создание простейшего приложения «Светофор» Цель: Изучение компонентов Button, Shape, Bevel, Edit, Label.
- •В обработчике события OnClick для кнопки Button1 напишем код:
- •Создание игры «Поймай кнопку» Цель: Изучение особенностей компонента Timer.
- •Тема: Создание логической игры Цель: Изучение возможностей использования свойства Tag и объекта Sender.
- •Генератор функций Цель: Изучение компонента PaintBox и методов рисования на канве. Компонент TrackBar
- •2. Сделайте так, чтобы в неинвертированном режиме синусоида изображалась красным цветом, а косинусоида – синим.
- •Создание простейшего калькулятора Цель: Изучение структуры case и особенностей работы с математическими функциями. Преобразование типов и обработка исключительных ситуаций.
- •Создание элементов интерфейса простейшего графического редактора Цель: Изучение компонентов ColorGrid, SpinEdit, RadioGroup, ListBox, ColorDialog.
- •Часть 1.
- •Часть 2.
- •Увеличить фигуру
- •Электронная записная книжка Цель: Изучение компонентов многостраничных панелей TabControl и PageControl.
- •Текстовый редактор Цель: Изучение компонентов Panel, Memo, OpenDialog, SaveDialog, MainMenu, PopupMenu, SpeedButton
- •Создание простейшего графического редактора
- •События мыши
Часть 2.
1. Создайте новый проект и сохраните его в своей папке.
2. Наша задача добиться следующего эффекта: при щелчке мышки по форме на ней должна появиться фигура. Ели клавиша Shift не нажата, это будет круг, если нажата – квадрат. Для этого в обработчике события OnMouseDown формы напишем код:
if Button=mbLeft then
if ssShift in Shift then
Canvas.Rectangle(x-10,y-10,x+10,y+10)
else canvas.Ellipse(x-10,y-10,x+10,y+10);
3. Сделаем так, чтобы при движении курсора мыши в заголовке формы отображались его координаты. В обработчике OnMouseMove запишем:
caption:=Format('Фигуры: X=%d, Y=%d', [X,Y]);
4. Поместим на форму компоненты MainMenu и ColorDialog.
Создадим главное меню, содержащее следующие пункты:
Файл: Цвет: Размер:
Новый Цвет карандаша Увеличить карандаш
Выход Цвет кисти Уменьшить карандаш
Увеличить фигуру
Уменьшить фигуру
5. Создадим глобальную переменную Radius, инициализируем ее при создании формы значением 10, и заменим ею константы при создании фигур в обработчике события OnMouseDown:
if button=mbLeft then
if ssShift in Shift then canvas.rectangle(x-radius,y-radius,x+radius,y+radius)
else canvas.Ellipse(x-radius,y-radius,x+radius,y+radius);
6. Обработаем события OnClick пунктов меню следующим образом:
Новый:
repaint;
Выход:
form1.Close;
Цвет карандаша:
colordialog1.Color:=canvas.Pen.color;
if colordialog1.Execute then
canvas.Pen.Color:=colordialog1.Color;
Цвет кисти:
colordialog1.Color:=canvas.brush.color;
if colordialog1.Execute then
canvas.brush.Color:=colordialog1.Color;
Увеличить карандаш:
canvas.Pen.Width:=canvas.Pen.Width+2;
Уменьшить карандаш:
canvas.Pen.Width:=canvas.Pen.Width-2;
if Canvas.Pen.Width<3 then canvas.Pen.Width=3; {ограничение на минимальную толщину карандаша)
Увеличить фигуру:
radius:=radius+5;
Уменьшить фигуру:
radius:=radius-5;
Выполнить самостоятельно:
1. Создать обработчик события OnClick пункта меню Выход с запросом о выходе из программы.
2. Создать ограничение на увеличение размера карандаша.
3. Создать ограничения на увеличение и уменьшение (не меньше чем Radius-10) размера фигуры.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Электронная записная книжка Цель: Изучение компонентов многостраничных панелей TabControl и PageControl.
Краткие теоретические сведения.
Многостраничные панели позволяют экономить пространство окна приложения, размещая на одном и том же месте страницы разного содержания. Каждая создаваемая вами страница компонента TabControl и PageControl является объектом типа TTabSheet. Это панель, на которой можно размещать любые управляющие компоненты, окна редактирования и т.п.
Страница имеет следующие основные свойства:
Name |
Имя, по которому можно ссылаться на страницу |
Caption |
Надпись, которая появляется на ярлычке закладки |
PageIndex |
Индекс страницы, по которому можно ссылаться на страницу |
ImageIndex |
Индекс изображения, которое может появляться на ярлычке закладки |
Из общих свойств компонента TabControl и PageControl можно отметить:
Style |
Определяет стиль отображения компонента: tsTabs — закладки, tsButtons — кнопки, tsFlatButtons — плоские кнопки. |
MultiLine |
Определяет, будут ли закладки размещаться в несколько рядов, если все они не помещаются в один ряд. |
TabPosition |
Определяет место расположения ярлычков закладок: tpBottom — внизу, tpLeft — слева, tpRight — справа и tpTop — вверху компонента. |
TabHeight и TabWidth |
Высота и ширина ярлычков закладок в пикселях. Если значения этих параметров заданы равными 0, то размеры ярлычков определяются автоматически по размерам надписей на них |
Images |
Ссылка на компонент ImageList, который содержит список изображений на ярлычках. Свойства ImageIndex страниц содержат индексы, соответствующие именно этому списку |
ScrollOpposite |
Определят способ перемещения закладок при размещении их в несколько рядов. |
ActivePage |
Имя активной страницы |
Pages[Index: Integer] |
Доступ к странице по индексу (первая страница имеет индекс 0). Свойство только для чтения |
PageCount |
Количество страниц. Свойство только для чтения |
Принципиальное отличие компонента TabControl от PageControl заключается в том, что TabControl не имеет множества панелей (страниц). Компонент представляет собой одну страницу с управляющим элементом типа кнопки со многими положениями. И надо написать соответствующие обработчики событий OnChanging и OnChange, чтобы определить, что именно должно происходить на панели при переключениях закладок пользователем. У компонента имеется еще одно свойство — MultySelect, позволяющее множественный выбор закладок. Если это свойство установлено в true, то в обработчиках событий надо описать реакцию на такой выбор пользователя.
Число закладок и их надписи определяются свойством Tabs типа TStrings. В нем вы можете задать надписи закладок. Сколько строчек надписей вы укажете, столько будет закладок. Текущее состояние переключателя определяется свойством TabIndex. Вы можете установить его в процессе проектирования, чтобы определить исходное состояние переключателя. А затем в обработчиках событий OnChanging и OnChange можете читать это свойство, чтобы определить, что именно выбрал пользователь.
Визуальные иневизуальные компоненты для создания СУБД в среде Delphi, а также методы создания таблиц БД описаны в методических указаниях к выполнению контрольных робот и в конспекте лекций.
Ход работы
Рассмотрим процесс создания приложения, имитирующего записную книжку со списком телефонов. Вид готового приложения будет следующим:
1. Создадим при помощи DataBase DeskTop таблицу notebook.db со следующими полями (процесс создания таблиц и псевдонимов подробно описан в рекомендациях по выполнению контрольных заданий)
Имя поля |
Тип поля |
Описание |
Name |
Alpha[25] |
Фамилия, инициалы |
Phone |
Alpha[18] |
Номер телефона |
Note |
Alpha[40] |
Для заметок |
2. Поместим на форму следующие компоненты: TabControl (вкладка Win32), DBGrid, DBNavigator (вкладка Data Controls), Table (вкладка BDE), DataSource (вкладка Data Access ).
Зададим свойству Align компонентов TabControl значение alClient (на все окно).
В свойстве Tabs компонента TabControl введем буквы алфавита:
Для того, чтобы закладки располагались сверху – вниз, справа – налево, зададим свойству Anchors компонента TabControl значения:
akLeft -true
akTop -true
akRight - true
akBottom – true
MultiLin=true
3. Установим компонентам следующие свойства:
Table:
DatabaseName (псевдоним базы данных) – выбираем из списка свой Alias.
TableName – выбираем имя своей таблицы.
AutoRefresh (обновление структуры таблицы) – устанавливаем значение true.
Active – устанавливаем true – подключаем таблицу.
DataSource:
DataSet (источник данных) – выбираем Table1.
DBGrid, DBNavigator:
свойству DataSource устанавливаем значение DataSource1.
Align (выравнивание): DBGrid – alClient (на все окно), DBNavigator – alBottom (внизу окна).
4. Создадим обработчик OnChange компонента TabControl:
procedure TForm1.TabControl1Change(Sender: TObject);
begin
table1.Filter:='Name='''+TabControl1.Tabs[TabControl1.TabIndex]+'*''';
end;
Фильтрация ведется по совпадению первой буквы фамилии. При выборе закладки автоматически формируется выражение фильтра, включающее в себя название (букву) выбранной закладки и символ «*».
5. Свойству Filtered компонента Table установим значение True.
Чтобы фильтрация выполнялась независимо от регистра букв и по частичному совпадению установим параметры свойства Filtered компонента Table следующим образом:
foCaseInsensitive – True
foNoPartialCompare – False
Для того, чтобы сразу же после загрузки приложения компоненты появлялись в отсортированном виде, для свойства OnCreate формы выберем из списка TabControl1Change.
Выполнить самостоятельно:
1. Создать всплывающие подсказки (Hint) для каждой из кнопок DBNavigator
2. Русифицировать названия полей таблицы (см. рекомендации к выполнению контрольных работ).
1 |
Переход на первую запись |
6 |
Удалить запись |
2 |
Переход на предыдущую запись |
7 |
Редактировать запись |
3 |
Переход на следующую запись |
8 |
Сохранить изменения |
4 |
Переход на последнюю запись |
9 |
Отменить изменения |
5 |
Добавить запись |
10 |
Перечитать таблицу |
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.