Компьютерное проектирование интерфейса пользователя
Особенности создания ряда игровых приложений, логической игры. Программное обеспечение простейшего калькулятора, генератора функций. Разработка элементов интерфейса простейшего графического редактора, электронной записной книжки, текстового редактора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 24.10.2012 |
Размер файла | 788,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Методические указания
к выполнению лабораторных работ
Компьютерное проектирование интерфейса пользователя
Кривой Рог 2007
Содержание
программный интерфейс приложение редактор
Введение
Лабораторная работа №1
Тема: Создание простейшего приложения "Светофор"
Лабораторная работа №2
Тема: Создание игры «Поймай кнопку»
Лабораторная работа №3
Тема: Создание логической игры
Лабораторная работа №4
Тема: Генератор функций
Лабораторная работа №5
Тема: Создание простейшего калькулятора
Лабораторная работа №6
Тема: Создания элементов интерфейса простейшего графического редактора
Лабораторная работа № 7
Тема: Электронная записная книжка
Лабораторная работа №8
Тема: Текстовый редактор
Лабораторная работа №9
Тема: Создание простейшего графического редактора
Список рекомендованной литературы
Введение
Данное методическое пособие предназначено для самостоятельной работы студентов специальности «Гибкие компьютеризированные системы и робототехника» дневной и заочной формы обучения при выполнении лабораторных работ по дисциплине «Компьютерное проектирование интерфейса пользователя».
Методическое пособие содержит краткие теоретические сведения, задания на выполнение лабораторных работ, подробное описание хода их выполнения, а также задания для самостоятельной работы.
Лабораторная работа №1. Тема: Создание простейшего приложения «Светофор»
Цель: Изучение компонентов Button, Shape, Bevel, Edit, Label.
Краткие теоретические сведения.
Компонент Bevel предназначен для внешнего оформления формы. Стиль отображения Bevel определяется свойством Style, которое может принимать значения bsLowered -- утопленный, и bsRaised -- приподнятый. А контур компонента определяется свойством Shape, которое может принимать значения: bsBox -- прямоугольник, bsFrame -- рамка, bsSpacer -- пунктирная рамка, bsTopLine, bsBottomLine, bsLeftLine, bsRightLine -- соответственной верхняя, нижняя, левая и правая линии. В зависимости от значения Style линии могут быть утопленными или выступающими.
Компонент Shape только условно может быть отнесен к средствам отображения графической информации, поскольку просто представляет собой различные геометрические фигуры, соответствующим образом заштрихованные. Основное свойство этого компонента -- Shape (форма), которое может принимать значения:
stRectangle |
прямоугольник |
|
stRoundRect |
прямоугольник со скругленными углами |
|
stEllipse |
эллипс |
|
stSquare |
квадрат |
|
stRoundSquare |
квадрат со скругленными углами |
|
stCircle |
круг |
Другое существенное свойство компонента -- Brush (кисть). Это свойство является объектом типа TBrush, имеющим ряд подсвойств, в частности: цвет (Brush.Color) и стиль (Brush.Style) заливки фигуры. Третье из специфических свойство компонента Shape -- Pen (перо), определяющее стиль линий.
Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button, расположенная на странице библиотеки Standard.
Основное с точки зрения внешнего вида свойство кнопки -- Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанта «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Основное событие любой кнопки -- OnClick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши.
Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок «Отменить» в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc.
Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.
Для отображения различных надписей на форме используются в основном компонент Label.
Тексты, отображаемые в компоненте, определяются значением свойства Caption. Его можно устанавливать в процессе проектирования или задавать и изменять программно во время выполнения приложения. Например:
Label1.Caption := 'Новый текст';
Цвет фона определяется свойством Color, а цвет надписи -- подсвойством Color свойства Font.
Компонент Edit предназначен для отображения, ввода и редактирования однострочных текстов. Имеется возможность оформления объемного бордюра. Основное свойство -- Text. Это свойство можно устанавливать в процессе проектирования или задавать программно.
Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 -- нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь.
Ход работы.
1. Для начала запустим Delphi. При этом автоматически будет создан новый проект с формой. Давайте назовём форму "Светофор". Для этого в Инспекторе объектов на вкладке Свойства находим свойство Caption и задаём заголовок окна Светофор.
2. Из вкладки Additional палитры компонентов, вставляем на форму компонент Bevel и располагаем его так, чтобы он служил как обрамление для светофора
3. Выделим компонент Bevel и из вкладки Additional вставим компонент Shape.
В Инспекторе объектов на вкладке Свойства компонента Shape, в свойстве Shape стоит наименование stRectangle, меняем его на stEllipse. (для того чтобы изменить свойства компонента, его нужно выбрать, для этого достаточно щелкнуть по нему мышкой). Далее выбираем этот компонент снова и выбираем в меню Правка / Копировать, а затем 2 раза Правка / Вставить - теперь у нас стало 3 таких компонента.
4. Из вкладки Standart палитры компонентов, вставляем на форму компонент Button (Кнопка). Описанным выше образом размножим кнопки до количества 3.
В Инспекторе объектов первой кнопки находим свойство Caption и задаём ему название "Красный", второй кнопки "Желтый", а третьей "Зелёный". Шрифт надписи на кнопке можно изменить, щелкнув по свойству кнопки Fonts. Теперь всё это красиво расположим на форме (как на рисунке).
5. Теперь выберем «Красную» кнопку, щелкнем по ней 2 раза и запишем исходный код (пишем только выделенный жирным код - остальное генерируется автоматически):
procedure TForm1.Button1Click(Sender: TObject);
begin
Shape1.Brush.Color:=clRed; //свойство Brush определяет заливку объекта
Shape2.Brush.Color:=clWhite;
Shape3.Brush.Color:=clWhite;
end;
Это означает следующее - при щелчке на первой кнопке цвет первого «глаза» светофора изменится на красный, остальные - на белый.
Аналогично поступаем с остальными кнопками. Для «Желтой» кнопки:
Shape1.Brush.Color:=clWhite;
Shape2.Brush.Color:=clYellow;
Shape3.Brush.Color:=clWhite;
и для «Зеленой»
Shape1.Brush. Color:=clWhite;
Shape2.Brush. Color:=clWhite;
Shape3.Brush. Color:=clGreen;
6. Сделаем так, чтобы «глаза» светофора подпрыгивали при щелчке мышки. Чтобы создать обработчик события необходимо: выделить объект, перейти в Инспекторе объектов на вкладку События, найти название нужного события и щелкнуть два раза в текстовом окне напротив него. При этом появится заготовка процедуры, между begin и end мы пишем необходимые операторы.
В обработчике события OnMouseDown каждого из «глаз» поместим код:
shape1.Top:= shape1.Top+10; // элемент переместится на 10 единиц вниз по вертикали - вернется на место
Это событие возникает, когда пользователь нажал левую клавишу мыши на объекте.
В обработчике события OnMouseUp напишем:
shape1.Top:= shape1.Top-10; // элемент переместится на 10 единиц вверх по вертикали
Это событие возникает, когда пользователь отпустил левую клавишу мыши.
!!!! Не забудьте поменять номера компонентов shape2, shape3.
7. Для непонятливых сделаем подсказку.
Свойству ShowHint каждого из компонентов Shape («глаза светофора») установим значение True. В свойстве Hint напишем сам текст подсказки, например, «Нажми меня!» или любое другое, подходящее к данному случаю.
8. Усложняем наше приложение. Сделаем так, чтобы при запуске приложения на экране появлялось окно с запросом пароля.
Создайте новую форму, нажав на кнопку Новая форма.
Для Form1 (нашей первой, главной формы, не забудьте щелкнуть по ней, выбрав в качестве объекта) в обработчике события OnShow (При появлении) напишем:
procedure TForm1.FormShow(Sender: TObject);
begin
form2.Showmodal
end;
Это означает, что при появлении окна-формы1 на экран выскочит окно-форма-2.
Зададим заголовок форме «Смена пароля». Подсвойству biSystemMenu свойства BorderIcons формы (подсвойства появляются, когда нажмешь на плюсик) зададим значение false. Это означает, что никаких кнопок в заголовке окна не будет.
Добавим в список переменных модуля Unit2 переменную логического типа. Для этого необходимо нажать на кнопку Показать список модулей (Ctrl+F12) и выбрать в списке нужный.
Найдем в модуле блок описания глобальных переменных и добавим строку, выделенную жирным.
var
Form2: TForm2;
f:boolean;
В обработчике события OnCreate form2 запишем код:
procedure TForm2.FormCreate(Sender: TObject);
begin
f:=false
end;
При создании формы переменная f инициализируется с начальным значением false.
Для обработчика события OnClose:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if f=false then form1.close;
end;
Таким образом, если какой-то умник нажмет Alt+F4 для закрытия окна ввода пароля, он ничего не добьется - автоматически закроется и главная форма, если пароль не был введен правильно.
9. Поместите на Form2 компонент Label (Метка). Определите для него шрифт MS Sans Serif 12 полужирный (для того, чтобы изменить шрифт необходимо щелкнуть мышкой по кнопке с тремя точками напротив свойства Font компонента в Инспекторе объектов). Разместим на новой форме еще два компонента - кнопку Button и поле для ввода текста Edit. Переименуем и разместим их как показано на рисунке.
Удалим текст из свойства Text компонента Edit, установим его свойство AutoSize в false, а свойству PasswordChar присвоим значение *
В обработчике события OnClick для кнопки Button1 напишем код:
procedure TForm2.Button1Click(Sender: TObject);
begin
if edit1.Text='secret' then
begin
f:=true; form2.Close;
end
else showmessage('Пароль введен неверно!')
end;
Это означает, что если пароль введен верно (это secret), то окно ввода пароля закроется и на экране появится главное окно, иначе - программа выдаст сообщение о неправильном вводе.
Выполнить самостоятельно:
1. Сделать так, чтобы при нажатии Enter в окне ввода пароля было аналогично нажатию кнопки ОК. (Для этого используем событие OnKeyPress для компонента Edit1).
2. Измените заголовок окна сообщения о неправильном вводе пароля на «Ошибка!». При неправильном вводе пароля фокус должен возвращаться в поле ввода.
3. Сделайте так, чтобы при троекратном неправильном вводе окно автоматически закрывалось.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа №2. Создание игры «Поймай кнопку»
Цель: Изучение особенностей компонента Timer.
Краткие теоретические сведения.
Компонент Timer (палитра System) позволяет задавать в приложении интервалы времени. Таймер находит многочисленные применения: синхронизация мультипликации, закрытие каких-то окон, с которыми пользователь долгое время не работает, включение хранителя экрана или закрытие связей с удаленным сервером при отсутствии действий пользователя, регулярный опрос каких-то источников информации, задание времени на ответ в обучающих программах -- все это множество задач, в которых требуется задавать интервалы времени, решается с помощью таймера.
Таймер -- невизуальный компонент, который может размещаться в любом месте формы. Он имеет два свойства, позволяющие им управлять: Interval -- интервал времени в миллисекундах и Enabled -- доступность. Свойство Interval задает период срабатывания таймера. Через заданный интервал времени после предыдущего срабатывания, или после программной установки свойства Interval, или после запуска приложения, если значение Interval установлено во время проектирования, таймер срабатывает, вызывая событие OnTimer. В обработчике этого события записываются необходимые операции.
Если задать Interval = 0 или Enabled = false, то таймер перестает работать. Чтобы запустить отсчет времени надо или задать Enabled = true, если установлено положительное значение Interval, или задать положительное значение Interval, если Enabled = true.
Например, если требуется, чтобы через 5 секунд после запуска приложения закрылась форма -- заставка, отображающая логотип приложения, на ней надо разместить таймер, задать в нем интервал Interval = 5000, а в обработчик события OnTimer вставить оператор Close, закрывающий окно формы.
Ход работы
1. Для оформления окна программы понадобится три компонента - прыгающая командная кнопка (Button1), кнопка выхода (Button2) и таймер. Примерный вид формы показан на рисунке:
2. Зададим первой кнопке следующие свойства:
Caption - Введем заголовок.
TabStop - False. Это свойство разрешает выбирать элемент управления клавишей TAB. В этой игре клавиатурой пользоваться нельзя.
Visible - false. Сначала кнопка должна быть невидима, чтобы пользователь не знал, где она находится.
Height - 30, Width - 80
Left -10, Top -10. В левом верхнем положении расстояние между кнопкой и краями формы 10 пикселей.
3. Теперь необходимо вычислить, какой размер будет иметь окно программы. Рисунок иллюстрирует, как именно это было сделано.
Зададим свойству формы ClientWidth (Внутренняя ширина) - значение 300, свойству ClientHeight (Внутренняя высота) - 200.
Чтобы размер окна нельзя было изменить в ходе работы программы, зададим свойству формы BorderStyle - bsSingle
4. Для кнопки «Выход» Button2 определим свойства:
Left - 110, Top - 160, Width - 80, Height - 30.
Default - True. Фокус ввода всегда будет принадлежать этой кнопке и нажатие клавиши Enter будет связано только с ней..
5. Разместим на форме компонент Timer (вкладка System). Свойству Interval зададим значение 500.
Промежуток времени задается в миллисекундах. Поэтому наша кнопка будет прыгать на новое место каждые полсекунды.
Создадим для компонента Timer обработчик события OnTimer (Сигнал таймера).
procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;//описываем локальную переменную
begin
i:=random(9); //случайное значение в диапазоне от 0 до 9
button1.Visible:=true;
button1.Top:=10+50*(i div 3);
button1.Left:=10+100*(i mod 3);
end;
Таким образом, при каждом сигнале таймера, положение кнопки (свойства Left и Top) будут меняться случайным образом.
6. Обработаем щелчок на кнопке Button1 следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Caption:='Готово!';
button1.enabled:=false;
timer1.enabled:=false;
end;
Если щелчок произошел, значит, игра закончилась победой. Чтобы сообщить об этом, изменяем надпись на кнопке и отключаем кнопку и таймер (свойство Enabled)
7. В завершении программы создадим еще два обработчика:
При щелчке на кнопке Button2 (Выход):
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Close
end;
Для инициализации процедуры генерации случайных чисел создадим процедуру обработки загрузки формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize
end;
Выполнить самостоятельно:
1. Добавить две кнопки «Быстрее» и «Медленнее». Щелчок по одной из них будет увеличивать значение интервала таймера на 100 миллисекунд, а по другой - уменьшать его в 2 раза.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа №3. Тема: Создание логической игры
Цель: Изучение возможностей использования свойства Tag и объекта Sender.
Краткие теоретические сведения.
Целью данной лабораторной работы является написание следующей программы. Игровая доска содержит семь клеток. На трех левых клетках стоят красные фишки, на трех правых - синие. Центральная клетка пуста. Задача заключается в том, чтобы, делая допустимые ходы, поменять фишки местами. Вид рабочего окна игры представлен ниже.
Правила ходов такие:
1. Красные фишки могут ходить только вправо, синие - только влево.
2. Ходить разрешается только на свободное поле.
3. Разрешены перемещения на соседнее поле и «прыжок» через фишку.
В ходе решения головоломки кнопки будут двигаться, а вид окна изменяться. Поэтому необходимо точно задать геометрические параметры объектов. Настраивать параметры будем, изменяя свойства Top, Left, Height, Width компонентов. Параметры должны быть следующими:
В чем заключается ход в игре? В том, что одна из фишек-кнопок переносится на свободное место. Это значит, что достаточно указать, какой фишкой надо пойти. Если фишка может сделать ход, то он только один.
Итак, пользователь может выбрать ход, щелкнув на одной из кнопок. То есть мы будем обрабатывать событие OnClick (При щелчке).
Но мы должны различать кнопки, а также знать, где они находятся и где находится свободная клетка. Поэтому мы поступим так: будем хранить дополнительные данные прямо в свойствах объекта-кнопки. Для этого нам нужно «свободное» свойство. Такое свойство есть: все компоненты системы Delphi предоставляют свойство Tag, которое программист может использовать по своему усмотрению.
Свойство Tag может хранить любое целое число. Нам нужно хранить два числа. Во-первых, номер клетки, в которой находится кнопка, а во вторых, признак «цвета» фишки (от него зависит, в какую сторону она может ходить). Эти данные легко «упаковать» в одно целое число: умножим номер клетки на 2 и, если фишка синяя, прибавим к нему единицу. Такое значение легко «разобрать» обратно на составляющие. Разделим его на 2. Частное даст номер клетки, а остаток будет признаком цвета фишки.
Ход работы.
1. Разместим на форме компонент Panel (401 x 65). На панели расположим 6 компонентов BitBtn (панель Additional) размером 49 на 49. Свойство Top всех компонентов будет равно 8, Left - 64,120,232,288,344.
2. Создайте при помощи графического редактора изображения красного и синего треугольников или любых других фигур на ваш вкус и сохраните их в формате bmp. Затем, используя свойство Glyph компонента, поместите изображения на кнопки.
3. Теперь можно задать значения свойства Tag для всех кнопок. Поочередно выберем фишки слева направо и зададим для свойства Tag значения, приведенные в таблице.
Значение свойства |
Комментарий |
|
2 |
первая клетка, красная фишка |
|
4 |
вторая клетка, красная фишка |
|
6 |
третья клетка, красная фишка |
|
11 |
пятая клетка, синяя фишка |
|
13 |
шестая клетка, синяя фишка |
|
15 |
седьмая клетка, синяя фишка |
4. Опишем глобальную переменную n, в которой будем хранить номер пустой клетки и переменную win, в которой будет содержаться количество ходов.
var
Form1: TForm1;
n:integer=4;
win:integer=24;
Здесь мы не только описываем нужные переменные, но и сразу присваиваем им начальное значение. Первоначально у нас пуста четвертая клетка, отсюда и выбор этого числа, 24 - максимально возможное число ходов.
5. Выберем первую кнопку и создадим обработчик OnClick для нее.
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,c,k,ak:integer;
begin
with Sender as TBitBtn do
begin
i:=Tag div 2;
c:=Tag mod 2;
k:=n-i;
ak:=abs(k);
if ak<3 then
if ((c=0) and (k>0)) or
((c=1) and (k<0)) then
begin
tag:=tag+2*k;
left:=left +56*k;
win:=win-ak;
n:=i;
end;
end;
if win=0 then
begin
caption:='Vaw!!!!';
panel1.Color:=clFuchsia; //меняем цвет панели
panel1.Enabled:=false; /все кнопки, находящиеся на панели становятся недоступными/
end;
end;
Обратите внимание на то, что в процедуру передается параметр -- объект Sender. Он представляет именно тот объект, который вызвал событие, и может дать доступ к его свойствам. Но напрямую это не получится. Программе надо специально указать, что объект Sender в данном случае следует считать кнопкой. Для этого служит ключевое слово as. После него указывают тип, которому на самом деле принадлежит объект Sender: Sender as TBitBtn
6. Для каждой из кнопок на вкладке События в окне напротив OnClick выберите из списка уже описанную нами процедуру.
Выполнить самостоятельно:
Попробуйте выиграть!!!
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа №4. Генератор функций
Цель: Изучение компонента PaintBox и методов рисования на канве. Компонент TrackBar
Краткие теоретические сведения.
PaintBox представляет собой некоторую ограниченную поверхность с канвой, на которую можно заносить изображения. Канва представляет собой область компонента, на которой можно рисовать или отображать готовые изображения. Она содержит свойства и методы, существенно упрощающие графику Delphi.
Канва имеет свойство Pixels. Это свойство представляет собой двумерный массив, который отвечает за цвета канвы. Например, Canvas.Pixels[10,20] соответствует цвету пикселя, 10-го слева и 20-го сверху. С массивом пикселей можно обращаться как с любым свойством: изменять цвет, задавая пикселю новое значение, или определять его цвет по хранящемуся в нем значению. Например, Canvas.Pixels[10,20] := 0 или Canvas.Pixels[10,20] := clBlack -- это задание пикселю черного цвета.
Канва -- объект класса TCanvas имеет множество методов, которые позволяют рисовать графики, линии, фигуры с помощью свойства Pen -- перо. Это свойство является объектом, в свою очередь имеющим ряд свойств. Одно из них уже известное вам свойство Color -- цвет, которым наносится рисунок. Второе свойство -- Width (ширина линии). Ширина задается в пикселях. По умолчанию ширина равна 1. Свойство Style определяет вид линии.
Фигуры в общем случае рисуются не пустыми, а закрашенными с помощью свойства канвы Brush -- кисть. Свойство Brush является объектом, имеющим в свою очередь ряд свойств. Свойство Color определяет цвет заполнения. Свойство Style определяет шаблон заполнения (штриховку). По умолчанию значение Style равно bsSolid, что означает сплошное закрашивание цветом Color.
Компонент TrackBar представляет собой элемент управления в виде ползунка, который пользователь может перемещать курсором мыши или клавишами во время выполнения. Таким образом, пользователь может управлять какими-то процессами: громкостью звука, размером изображения и т.п. Основное свойство компонента -- Position. Это свойство можно задавать во время проектирования или программно во время выполнения. При перемещении пользователем ползунка можно прочитать значение Position, характеризующее позицию, в которую пользователь переместил ползунок. Свойство Position -- целое, значение которого может изменяться в пределах, задаваемых свойствами Min и Мах.
Ход работы
1. После запуска Delphi программа имеет только одно окно Form1, у которого сразу переименовываем заголовок (свойство Caption) на «Генератор функций». Устанавливаем свойство Form1.Position в poDesktopCenter, чтобы окно при каждом запуске и при любом экранном разрешении всегда было ровно посередине экрана. Устанавливаем свойство Form1.BorderStyle в bsSingle, для неизменяемого размера окна. Оставляем во вложенных свойствах BorderIcons только biSystemMenu в true, остальные в false. Это для того, чтобы окно нельзя было свернуть в значок, развернуть во весь экран и окно имело иконку в заголовке.
2. Устанавливаем в форму компонент PaintBox (вкладка System), два компонента RadioButton, один компонент CheckBox, три кнопки Button (все компоненты расположены на панели Standard) и ползунок прокрутки TrackBar, расположенный на вкладке Win32. Расположим компоненты, как это указано на рисунке ниже.
3. RadioButton1.Caption переименовываем в "Sin". Этот флаг будет признаком рисования синусоиды. RadioButton2.Caption переименовываем в "Cos" - косинусоида. Начальное значение свойства Checked для RadioButton1 устанавливаем в true.
4. CheckBox1.Caption переименовываем в "Все". Если этот флаг установлен, то будет рисоваться два графика.
5. Названия кнопок Button1 - "Старт", Button2 - "Стоп (пауза)" и Button3 - "Выход". Названия на кнопках меняются через свойство Caption. Теперь назначение этих кнопок понятно.
6. Компонент TrackBar1 свойство минимального значения Min устанавливаем в 1, максимальное значение Max - 50.
7. Для PaintBox1, на котором будет непосредственно рисоваться график задаем размеры высоты Height=140, ширина Width=500.
8. Сразу после слова implementation в модуле окна объявляем глобальные переменные, которые будут доступны из любой процедуры в этом модуле. Var stop:boolean; // признак рисования x:Integer; // координата оси X
9. В обработчике события OnClick для кнопки Button1 («Старт») напишем следующее:
procedure TForm1.Button1Click(Sender: TObject);Var y:Integer; // ось Ybeginif x=0 then // если точка в начале координат, то:beginPaintBox1.Canvas.Brush.Color:=clWhite; // цвет фона белыйPaintBox1.Canvas.FillRect(ClientRect); // заливка всей рабочей областиend;stop:=false; // флаг старта процесса рисованияWhile not stop do // бесконечный цикл, пока флаг остановки не поднят:beginif (RadioButton1.Checked)or(CheckBox1.Checked) then // если установлен "Sin" или "Все", то:beginy:=Round(Sin(pi*x/100)*50)+70; // вычисление положения синусоидыPaintBox1.Canvas.Pixels[x,y]:=clBlack; // нарисовать черную точкуend;if (RadioButton2.Checked)or(CheckBox1.Checked) then // если установлен "Cos" или "Все", то:beginy:=Round(Cos(pi*x/100)*50)+70; // вычисление положения косинусоидыPaintBox1.Canvas.Pixels[x,y]:=clBlack; // нарисовать черную точкуend;inc(x); // увеличить значение X на едицину. Аналог X:=X+1if x>500 then // если X вышел за пределы PaintBox1, то:beginx:=0; // установить X на начало координатPaintBox1.Canvas.Brush.Color:=clWhite; // Цвет фона белыйPaintBox1.Canvas.FillRect(ClientRect); // Очистка рабочей области PaintBox1end;Sleep(TrackBar1.Position); // Процедура "засыпает" на заданное время в миллисекундахApplication.ProcessMessages; // Обработка всей очереди сообщенийend;end;
Коротко расскажем работу этой процедуры. Как только нажата кнопка "Старт" Компонент PaintBox1 очищается и начинается бесконечный цикл While, выйти из которого можно только, пока переменная Stop не примет значение true. Это можно сделать кнопкой Button2, соответствующая процедура которой обработается во время Application.ProcessMessages. С помощью бегунка TrackBar1 можно менять скорость рисования кривой. Этот параметр передается в команду Sleep.
10. Процедура нажатия на кнопку остановки Button2:
procedure TForm1.Button2Click(Sender: TObject);
begin
Stop:=true; // установить флаг остановки процесса рисования
end;
11. Процедура создания окна Form1OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=0; // начальное значение X
end;
12. Если нажата кнопка "Выход", то реакция на это событие будет таким:
procedure TForm1.Button3Click(Sender: TObject); begin Close; // закрыть окно end;
13. И реакция перед закрытием окна OnClose. Без этой процедуры, если рисование включено, то окно не закроется.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Stop:=true; // остановить (если включен) цикл рисования end; После запуска программы, установки флажка "Все" и нажатии на кнопку "Старт" на экране отобразится график:
Выполнить самостоятельно:
1. Добавьте CheckBox «Инвертировать», при выборе которого цвет области построения становится черным, а графики функций вырисовываются белым цветом.
2. Сделайте так, чтобы в неинвертированном режиме синусоида изображалась красным цветом, а косинусоида - синим.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа №5. Создание простейшего калькулятора
Цель: Изучение структуры CASE и особенностей работы с математическими функциями. Преобразование типов и обработка исключительных ситуаций.
Краткие теоретические сведения.
Математические функции языка Object Pascal
abs(x) |
Модуль аргумента - |
|
arctan(x) |
Арктангенс аргумента (угол в радианах) |
|
sin(x) |
Синус |
|
cos(x) |
Косинус |
|
exp(x) |
Экспонента - |
|
sqr(x) |
Квадрат аргумента - |
|
sqrt(x) |
Корень квадратный аргумента - |
|
ln(x) |
Логарифм натуральный |
|
frac(x) |
Дробная часть числа |
|
int(x) |
Целая часть числа |
|
trunc(x) |
Отбрасывает дробную часть числа |
|
round(x) |
Округляет x до ближайшего целого значения |
|
pi |
=3.141592653… |
|
random(x) |
Псевдослучайное число, расположенное в диапазоне 0…(х-1) |
Так как функции тангенса и котангенса в языке Pascal отсутствуют, они выражаются через значения синуса и косинуса:
Десятичный логарифм можно выразить следующим способом -
В языке Pascal нет возведения в степень. Возведение в степень для положительных значений можно выполнить с помощью следующих соотношений:
Примеры выражений:
В Object Pascal это выражение будет выглядеть так:
0.3*exp(5*ln((sqr(sin(x))-sqr(cos(x)))/exp(x))
x*sqrt(abs(cos(x)-1))/sqrt(exp(3*ln(abs(x))))
При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. FloatToStr и IntToStr преобразуют соответственно вещественные и целочисленные переменные в строковые. Функция StrToFloat предназначена для преобразование строки в значение с плавающей запятой, и StrToInt -- преобразование строки в целое значение.
Для реакции на конкретный тип исключительной ситуации применяется блок try..except. В простейшем виде синтаксис его следующий:
try <0ператоры, которые могут вызвать исключительную ситуацию>
except
< Операторы >;
end;
Выполнение блока начинается с секции try. При отсутствии исключительных ситуаций только она и выполняется. Секция except получает управление в случае если они возникли. Например
try
I := 5 /0;
except
showmessage(`Делить на ноль нельзя!');
end;
Ход работы
1. Разместим на форме 2 компонента Panel, 16 компонентов Button и окошко редактирования Edit. Расположим их на форме следующим образом.
Размеры панелей и кнопок могут быть произвольными, в данном примере были использованы следующие параметры:
Panel1 |
Panel2 |
Button… |
|
Width-180 |
Width-70 |
Width-50 |
|
Height - 235 |
Height - 235 |
Height - 50 |
Очистим свойство Text компонента Edit1, а свойствам Caption компонентов зададим соответствующие значения.
2. Итак, приступим к коду. Добавим в наш код 4 глобальных переменных.
var
Form1: TForm1;
i,p,r:real;
//они будут сохранять числа введенные пользователем (i- значение первого введенного числа, р - второго, r - полученный результат)
mode:integer;
//режим калькулятора (умножить, разделить и т.д)
Переменная mode будет содержать числовое значение действия: 1 - прибавление, 2 - вычитание, 3 - деление, 4 - умножение.
3. Теперь приступим к нашим кнопкам. В каждой цифровой кнопке обработаем событие OnClick. Код будет идентичен для всех цифровых кнопок (от 1 до 10-й). Приведем пример кода для первой кнопки (цифра 1):
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'1';// для всех остальных кнопок заменяйте 1 на нужное вам число
end;
Далее пишем обработчики OnClick для кнопок операций.
Для кнопки «+»:
procedure TForm1.ButtonPlusClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=1;
Edit1.Text:=''; //это две одинарные кавычки
end;
Для кнопки «-»
procedure TForm1.ButtonMinusClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=2;
Edit1.Text:='';
end;
Для кнопки «*»
procedure TForm1.ButtonMultiplyClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=3;
Edit1.Text:='';
end;
Для кнопки «/»
procedure TForm1.ButtonDIVClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=4;
Edit1.Text:='';
end;
Кратко поясним, что мы сделали. При нажатии на кнопку мы сохраняем значения введенного числа в переменной I, затем переменной mode присваиваем значения действия. Теперь у нас есть все необходимые данные для обработки события OnClick для кнопки "=".
procedure TForm1.ButtonRezultClick(Sender: TObject);
begin
case mode of
1:begin
p:=StrToFloat(Edit1.Text);
r:=i+p;
Edit1.Text:=FloatToStr(r);
end;
2:begin
p:=StrToFloat(Edit1.Text);
r:=i-p;
Edit1.Text:=FloatToStr(r);
end;
3:begin
p:=StrToFloat(Edit1.Text);
r:=i*p;
Edit1.Text:=FloatToStr(r);
end;
4:begin
p:=StrToFloat(Edit1.Text);
r:=i/p;
Edit1.Text:=FloatToStr(r);
end;
end;
end;
Создадим обработчик для кнопки С (Сброс):
procedure TForm1.ButtonResetClick(Sender: TObject);
begin
edit1.Text:='';
r:=0; i:=0; p:=0;
end;
Чтобы при появлении окна калькулятора фокус был передан окну ввода напишем обработчик OnShow для Form1.
procedure TForm1.FormShow(Sender: TObject);
begin
edit1.SetFocus;
end;
Аналогичным образом, сделаем так, чтобы при нажатии кнопок «=» и «С», а также кнопок математических операций, фокус передавался окну ввода.
Выполнить самостоятельно
(создание простенького калькулятора):
1. Настроить параметры формы таким образом, чтобы размеры окна нельзя было изменить и кнопка «Развернуть /Maximize/» отсутствовала.
2. Добавить кнопку «,» для ввода разделителя между целой и дробной частью числа. Для этого в обработчик OnClick кнопки добавим:
if pos(',',edit1.Text)<>0 then exit // если символ «,» в строке уже имеется
else edit1.Text:=edit1.Text+','
3. Добавить кнопку «+/-» для изменения знака числа на противоположный.
procedure TForm1.BitBtn2Click(Sender: TObject);
var s:string;
begin
s:=Edit1.Text;
if s[1]='-' then delete(s,1,1) else
insert('-',s,1);
edit1.Text:=s;
end;
4. Запретить ввод с клавиатуры в текстовое окно любых символов кроме цифровых и «-» (минус), «,» (запятая) - смотрим в конспект лекций.
5. Создать кнопки для следующих математических операций:
· возведение в степень r:=exp(p*ln(i));
· целочисленное деление (div) и остаток от деления (mod)- для преобразования типов использовать функцию round;
· возведение в квадрат (sqr);
· извлечение квадратного корня (sqrt);
· вычисления натурального и десятичного логарифма;
· вычисления sin-са, cos-са и tg-са аргумента;
· вычисления экспоненты (e^x);
· для вычисления 1/x;
· ввода числа ;
· для нахождения факториала числа.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа №6. Создание элементов интерфейса простейшего графического редактора
Цель: Изучение компонентов ColorGrid, SpinEdit, RadioGroup, ListBox, ColorDialog.
Краткие теоретические сведения.
ColorGrid - пример компонента, используемого для создания таблицы цветов, в которой пользователь выбирает требуемый цвет. Компонент визуальный. Свойство GridOrdering определяет внешний вид сетки (количество строк и столбцов). Свойство ForegroundColor определяет цвет, выбранный пользователем левой клавишей, BackgroundColor - правой.
SpinEdit - окно редактирования в комбинации с кнопкой-счетчиком. Свойства MinValue и МахValue компонента задают соответственно минимальное и максимальное значения чисел, свойство Increment задает приращение числа при каждом нажатии на кнопку. Свойство Value определяет текущее значение числа. Это свойство можно читать, чтобы узнать, какое число задал пользователь.
Радиокнопки образуют группы взаимосвязанных индикаторов, из которых обычно может быть выбран только один. Компонент RadioGroup -- панель группы радиокнопок, которая может содержать регулярно расположенные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк. В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете -- столько и будет кнопок.
Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, которое показывает индекс выбранной кнопки. Индексы, как всегда в Delphi, начинаются с 0. По умолчанию ItemIndex = -1, что означает отсутствие выбранной кнопки.
Компонент ListBox отображает списки строк. ListBox отображает список в раскрытом виде и автоматически добавляет в список полосы прокрутки, если все строки не помещаются в окне компонента.
Основное свойство компонента, содержащее список строк, -- Items, имеющее тип TStrings. Заполнить его во время проектирования можно, нажав кнопку с многоточием около этого свойства в окне Инспектора Объектов. Во время выполнения работать с этим свойством можно, пользуясь свойствами и методами класса TStrings -- Clear, Add и другими. Номер выбранной строки можжно узнать из свойства ItemIndex. Если ни одна строка не выбрана, то ItemIndex = -1.
Компонент ColorDialog вызывает диалоговое окно выбора цвета. Основное свойство компонента ColorDialog -- Color. Это свойство соответствует тому цвету, который выбрал в диалоге пользователь.
Ход работы
Часть 1.
1. Создайте новый проект и сохраните его в своей папке.
Поместите на форму компонент Shape (палитра Aditional) и ColorGrid (палитра Samples). Свойству Shape компонента Shape присвоить значение stRectangle. Свойству GridOrdering компонента ColorGrid присвоить значение go8x2.
Расположить компоненты на форме следующим образом:
2. Создадим обработчик события OnChange компонента ColorGrid
Shape1.Pen.Color:=ColorGrid1.ForegroundColor;
Shape1.Brush.Color:=ColorGrid1.BackgroundColor;
Запустим программу и посмотрим как она работает. Левым щелчком по палитре выбирается цвет контура (передний цвет), правым - цвет фона (задний цвет).
3. Используя компонент SpinEdit (палитра Samples) создадим возможность изменения толщины контура от 1 до 50.
Свойству MaxValue зададим значение 50, MinValue - 1
В обработчике события OnChange компонента SpinEdit запишем:
shape1.Pen.Width:=SpinEdit1.Value;
Расположим компонент Label (свойство Caption - Контур) и SpinEdit, как это показано на рисунке ниже.
4. Расположим на форме компонент RadioGroup.
Присвоим его свойству Captions и свойству Items (содержит названия строк списка) значения, как это показано на рисунке ниже. Сделаем так, чтобы по умолчанию был выбран первый компонент списка. Для этого свойству ItemIndex компонент а RadioGroupзададим значение 0 (нумерация в списке начинается с нуля)
5. В обработчике OnClick для RadioGroup1 запишем:
if RadioGroup1.ItemIndex=0 then Shape1.Shape:=stCircle; {если выбран первый элемент списка}
if RadioGroup1.ItemIndex=1 then Shape1.Shape:=stEllipse;
if RadioGroup1.ItemIndex=2 then Shape1.Shape:=stRoundRect;
if RadioGroup1.ItemIndex=3 then Shape1.Shape:=stRoundSquare;
if RadioGroup1.ItemIndex=4 then Shape1.Shape:=stSquare;
6. Расположим на форме компоненты Label (свойство Caption - Способ заливки) и компонент ListBox. В Редакторе списка строк компонента ListBox (вызывается щелчком по свойству Items) введите значения, как это показано на рисунке выше.
7. В обработчик OnClick компонента ListBox введем следующий код:
if ListBox1.Selected[0] then Shape1.Brush.Style:=bsSolid;
if ListBox1.Selected[1] then Shape1.Brush.Style:=bsClear;
if ListBox1.Selected[2] then Shape1.Brush.Style:=bsBDiagonal;
if ListBox1.Selected[3] then Shape1.Brush.Style:=bsFDiagonal;
if ListBox1.Selected[4] then Shape1.Brush.Style:=bsCross;
if ListBox1.Selected[5] then Shape1.Brush.Style:=bsDiagCross;
if ListBox1.Selected[6] then Shape1.Brush.Style:=bsHorizontal;
if ListBox1.Selected[7] then Shape1.Brush.Style:=bsVertical;
Запустим программу и посмотрим как она работает.
Часть 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) размера фигуры.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа № 7. Электронная записная книжка
Цель: Изучение компонентов многостраничных панелей 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 |
Перечитать таблицу |
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Лабораторная работа №8. Текстовый редактор
Цель: Изучение компонентов Panel, Memo, OpenDialog, SaveDialog, MainMenu, PopupMenu, SpeedButton
Подобные документы
Дизайн интерфейса приложения как связь человека и персонального компьютера. Adobe Photoshop и его возможности, анализ функциональности и содержание главных операций. Используемые инструменты для разработки дизайна интерфейса текстового редактора.
контрольная работа [407,5 K], добавлен 12.10.2015Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.
курсовая работа [1,3 M], добавлен 28.07.2013Принципы создания приложений с GUI. Панель инструментов для добавления элементов интерфейса. Расположение кнопки и осей в окне приложения. Управление свойствами объектов. Установка свойств при редактировании. Программное изменение свойств. Флаги и рамки.
методичка [1,1 M], добавлен 06.07.2009Составление Win32 App проекта - простейшего текстового редактора, который позволяет выполнять такие операции: редактирование текста, копирование и вставку из одного окна проекта в другое окно проекта. Методы вызова диалогов сохранения и открытия файла.
курсовая работа [716,3 K], добавлен 09.11.2010Типы, основные функции, элементы и принцип работы текстового редактора (компьютерной программы). Методы вставки внешних объектов в текст. Особенности текстового процессора Microsoft Word, его специальные возможности. Типовая структура интерфейса.
реферат [15,8 K], добавлен 07.12.2010Особенности процесса взаимодействия пользователя с компьютером. Графический интерфейс ОС Windows, его преимущества и недостатки. Основы простейшего SILK-интерфейса. Основные черты и специфика структуры WIMP-интерфейса. Общепринятые соглашения для меню.
реферат [26,8 K], добавлен 02.10.2012Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.
дипломная работа [3,3 M], добавлен 18.02.2017Изучение основных алгоритмов генерации различных видов фракталов. Выбор языка и среды программирования. Характеристика структурных элементов растрового графического редактора фракталов. Описание интерфейса приложения, порядок редактирования изображений.
курсовая работа [1,2 M], добавлен 04.04.2014Создание консольных приложений с использованием графического интерфейса пользователя. Содержание палитры компонентов программы С++ Builder. Использование возможностей объектно-ориентированного программирования, особенности редактора кода и форм в С++.
лекция [27,0 K], добавлен 22.12.2010Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016