Главная страница

1. Задачи проектирования программных систем. Программное обеспечение (ПО)


Скачать 122.86 Kb.
Название1. Задачи проектирования программных систем. Программное обеспечение (ПО)
Дата17.03.2019
Размер122.86 Kb.
Формат файлаdocx
Имя файлаotvety_na_ekzamen_po_prikladnomu_programirovaniyu.docx
ТипДокументы
#70653
страница3 из 5
1   2   3   4   5

Sender типа Object содержит указатель на компонент, в котором произошло событие.
Пример (папка "Меняем цвет формы по щелчку"):

Изменение цвета фона формы при отпускании клавиши мышки.

Обработчик события выглядит следующим образом.
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if button=mbLeft then form1.Color:=clYellow; //щелчок левой кнопкой - фон формы желтый

if ssAlt in Shift then form1.Color:=clRed; //Alt + щелчок левой кнопкой - фон формы красный

if button=mbRight then form1.Color:=clCream; //щелчок правой кнопкой - фон формы кремовый

end;
Пример (Как распознать, какой пункт меню нажат после щелчка мышью):

Событие OnClick имеет только класс TMenuItem, класс TMainMenu такого события не имеет.

Поэтому надо написать одну процедуру, которая будет вызываться каждым обработчиком события OnClick для каждого пункта меню. А в этой процедуре уже определять, используя объект Sender, по какому объекту произведен щелчок (в данном случае сравнивается с заданным имя объекта, см. А.Я Архангельский, стр. 331).
if (Sender=N21) then Form1.Label1.Caption:='Выбран пункт меню 2-1'

Пример:

Нарисовать линию от места нажатия кнопки мыши до места ее отпускания.

Добавьте на форму компонент PaintBox (страница System).

PaintBox - окно для рисования. Создает прямоугольную область, предназначенную для прорисовки графических изображений.

Обработчик события нажатия кнопки должен выглядеть следующим образом:

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

//перемещаем курсор рисования к координате нажатия кнопки

PaintBox1.Canvas.MoveTo(X,Y);

end;
Обработчик события отпускания кнопки должен выглядеть следующим образом:

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

//рисуем линию до координаты отпускания кнопки

PaintBox1.Canvas.LineTo(X,Y);

end;

Свойство Canvas (канва, холст) позволяет рисовать на компоненте, которые имеют такое свойство. Его имеют формы (т.е. можно рисовать прямо на форме), компоненты Image, BitMap и уже известная нам PainBox.

Методы и свойства объекта Canvas позволяют работать с графикой в Delphi.

24. Обработка события OnTimer

Достаточно часто в приложениях требуется запрограммировать действия, которые будут повторяться через заданные интервалы времени. В этом случае используется компонент TTimer (страница System).

Компонент TTimer (таймер) служит для отсчета интервалов реального времени. Его свойство interval определяет интервал времени в миллисекундах, который должен пройти от включения таймера до наступления события onTimer.

Таймер включается при установке его свойства Enabled в True. Раз включенный таймер все время будет возбуждать события OnTimer до тех пор, пока его свойство Enabled не примет значения False.

Таймер - невизуальный компонент, котрый может размещаться в любом месте формы. Для вставки в модуль обработчика события OnTimer надо выполнить двойной щелчок по компоненту TTimer на форме.
Следует учесть, что в силу специфики реализации аппаратного таймера персонального IBM-совместимого компьютера минимальный реально достижимый интервал отсчета времени не может быть меньше 55 миллисекунд (этот интервал называется тиком). Более того, любой интервал времени, отсчитываемый с помощью таймера, всегда кратен 55 миллисекундам.

В качестве примера использования компонента рассмотрим простенькую программу "Часы" (папка проекта "Часы").

На форму Form1 помещены таймер Timer1 метка Label1. Обработчиком события OnTimer является процедура procedure OnTimer1(Sender: TObject).

type

TForm1 = class(TForm)

Label1: TLabel;

Timer1: TTimer;

procedure OnTimer1(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Используются следующие переменные:

var

Form1: TForm1;

DT:TDateTime; //переменная для запоминания текущего времени
Чтобы вывести в метку текущее время, надо:

- установить свойство Enabled таймера в True;

- установить свойство interval таймера, например, в 1000 (обновление показаний времени каждую секунду;

- запрограммировать обработчик события от таймера следующим образом:
procedure TForm1.OnTimer1(Sender: TObject);

begin

DT:=Time;

Label1.Caption:=FormatDateTime('hh:nn:ss',DT);

end;
Функция Time (модуль Sysutils) возвращает текущее время.

Объявление:

function Time: TDateTime;

Функция Time возвращает текущее время в виде значения типа TDateTime. Это значение может быть преобразовано в строку функцией TimeToStr. Функцией DecodeTime можно выделить из времени отдельно час, минуту, секунду и миллисекунду.
Более сложный пример - проект "Таймер" (папка "Таймер"). Позволяет организовать счетчик времени с начала пуска таймера с возможности его сброса и остановки на время. Рассмотрите этот проект самостоятельно на лабораторной работе.

25. Графические и мультимедийные возможности Delphi

Для отрисовки графического изображения внутри рабочей области формы используется событие OnPaint.

Технология вывода графической информации на экран основывается на понятии холста (класс TCanvas), который имеет набор стандартных свойств и методов, позволяющих выполнять простейшие графические операции. Например, свойство Brush позволяет задать цвет, а метод Ellipse используется для отрисовки эллипса.

Отметим также следующие графические компоненты : Image, Shape и Bevel.

Мультимедийные возможности Delphi реализованы в компоненте MediaPlayer, который предназначен для воспроизведения в рамках программы музыкальных файлов и видеоклипов в различных форматах. Управление воспроизведением осуществляется при помощи набора кнопок, напоминающих кнопки музыкальных центров.

26.Графические возможности Delphi.Использование готовых графических файлов
Для вставки в приложение графического единичного объекта используется компонент TImage (страница Additional).

Этот компонент служит для размещения на форме одного из трех поддерживаемых Delphi типов изображений: растровой картинки, пиктограммы или метафайла. Любой из этих типов изображения содержится в центральном свойстве компонента - picture.

Для работы с базой картинок используется компонент DBImage (страница Data Controls).

Рассмотрим процесс создания несложного просмотрщика изображений.

Поместите на форму панель TPanel (страница Standart), очистите ее свойство Caption.

Разместите на панели кнопку TButton с надписью "Загрузить".

На любое свободное место формы (над панелью) поместите компонент TImage (страница Additional) и установите в его свойство Align значение alClient (картинка будет занимать всю панель).

На любое место (TImage, TPanel или даже TButton) поместите стандартный диалог TOpenPictureDialog (страница Dialogs) - с его помощью пользователь вашей программы сможете разыскать нужный файл с изображением.

Напишите такой обработчик события onСlick для кнопки Button1:
procedure TForm1.Button1Click(Sender: TObject);

begin

if OpenPictureDialog1.Execute then

begin

Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName);

Image1.Stretch := True

end
end;

Оператор Imagel.Stretch := True масштабирует изображение так, чтобы оно занимало всю рабочую область TImage.

Свойства компонента:

property Center: Boolean;

Указывает, надо ли центрировать изображение в границах компонента. Игнорируется, если Autosize=True или если Stretch =True и изображение не является пиктограммой (ICO)

property Canvas : TCanvas;

Содержит канву для прорисовки изображения

property Transparent: Boolean;

Запрещает/разрешает накладывать собственный фон изображения на фон компонента

property Proportional: Boolean;property Stretch: Boolean;

Разрешает/запрещает изменять размер изображения так, чтобы оно целиком заполнило клиентскую область компонента

property Picture: TPicture;

Разрешает/запрещает пропорционально уменьшать высоту и ширину изображения, если оно не может целиком уместиться в рабочей зоне компонента

property IncrementalDisplay: Boolean;

Разрешает/запрещает показ большого изображения по мере его загрузки Центральное свойство класса. Служит контейнером изображения

27.Рисование графических примитивов.Понятие канвы, карандаша и кисти
Для вывода графических примитовов в Delphi используется класс TCanvas (канва, холст).

TCanvas обеспечивает пространство (холст, канву) для создания, хранения и модификации графических объектов

Модуль graphics.

Класс TCanvas является основой графической подсистемы Delphi.

Канва обеспечивает:

  • Загрузку и хранение графических изображений

  • Создание новых и изменение хранимых изображений с помощью пера, кисти, шрифта

  • Рисование и закраску различных фигур, линий, текстов

  • Комбинирование различных изображений


Свойство Canvas (канва, холст) позволяет рисовать на компоненте, которые имеют такое свойство. Его имеют формы (т.е. можно рисовать прямо на форме), компоненты Image, BitMap и уже известная нам PaintBox (страница System).

Каждая точка канвы имеет координаты X, Y, отсчитываемые, начиная с нуля, с левого верхнего угла. Возрастание координаты идет слева-направо и сверху-вниз.
Свойство Canvas типа TCanvas используется для рисования пером Pen и кистью Brush, для модификации изображения, наложения друг на друга нескольких изображений.

Свойство Brush определяет цвет и стиль заполнения фона окна. Присуще многим оконным объектам, включая Canvas. Его можно читать, чтобы определить цвет и стиль заполнения фона окна. Это свойство только для чтения. Однако, атрибуты объекта Brush можно изменять, используя свойства Color и Style. Кроме того все свойства объекта могут быть изменены методом Assign.
Свойство канвы Pen определяет атрибуты пера, используемого для рисования линий и фигур. Это свойство является объектом типа TPen. Атрибуты объекта типа определяют цвет, ширину, стиль линий и режим рисования пера. Присваивание свойства Pen может производиться методом Assign.

Основные свойства пера (класса TPen).

Color: TColor Цвет пера. По умолчанию - clBlack.

Mode: TPenMode Определяет режим рисования линий.

Style: TBrush,Style Определяет стиль рисования линий.

Width: Integer Определяет толщину линии в пикселях. Влияет на Style.

Для определения положения пера на канве используется свойство PenPos.

Координаты пера, определенные этим свойством, задают начальную точку рисования линии методом LineTo. Свойство PenPos изменяется методом MoveTo и некоторыми методами рисования (например, методом LineTo). Непосредственная установка PenPos эквивалентна применению метода MoveTo.

Прорисовка графических примитовов и текста

Для прорисовки графических примитовов используются следующие методы канвы.
Arc Рисует дугу окружности или эллипса.

Chord Рисует замкнутую фигуру, ограниченную дугой окружности или эллипса и хордой.

Draw Рисует графическое изображение в указанную позицию канвы .

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

Ellipse Рисует окружность или эллипс.

FillRect Заполняет указанный прямоугольник канвы, используя текущее значение кисти Brush.

FloodFill Закрашивает текущей кистью замкнутую область канвы, определенную цветом.

FrameRect Рисует на канве текущей кистью прямоугольную рамку.

LineTo Рисует на канве прямую линию, начинающуюся с текущей позиции пера и кончающуюся указанной точкой.

MoveTo Изменяет текущую позицию пера на заданную, ничего не рисуя.

Pie Рисует сектор окружности или эллипса.

Polygon Рисует замкнутую фигуру с кусочно-линейной границей.

Polyline Рисует кусочно-линейную кривую.

Rectangle Рисует прямоугольник.

RoundRect Рисует прямоугольник со скругленными углами.

StretchDraw Рисует графическое изображение в указанную прямоугольную область канвы, подгоняя размер изображения под заданную область.

Пример (папка "Эллипс"):

Оператор
with PaintBox1 do

begin

Canvas.Pen.Color:=clBlue;

Canvas.Pen.Style:=psSolid;

Canvas.Pen.Width:=2;

Canvas.Brush.Color := clRed;

Canvas.Brush.Style := bsDiagCross;

Canvas.Ellipse(0, 0, PaintBox1.Width, PaintBox1.Height);

end;
рисует после щелчка мышкой по холсту синий эллипс, вписанный в компонент PaintBox1 и заполненный красной штриховкой.


Для вывода текста используются методы.

TextExtent Возвращает длину и высоту в пикселях текста, который предполагается написать на канве текущим шрифтом.

TextHeight Возвращает высоту в пикселях текста, который предполагается написать на канве текущим шрифтом.

TextOut Пишет указанную строку текста на канве, начиная с указанной позиции.

TextRect Пишет указанную строку текста на канве, начиная с указанной позиции и усекая текст, выходящий за пределы указанной прямоугольной области.

TextWidth Возвращает длину в пикселях текста, который предполагается написать на канве текущим шрифтом.
Пример: Рисуем некоторые примитивы (папка "Примитивы")
На форме расположены:

  • панель Panel1: TPanel и на ней PaintBox1: TPaintBox;

  • таймер Timer1: TTimer


Таймер один раз после запуска приложения выполняет процедуру:
procedure Timer1Timer(Sender: TObject);
Ее тело:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

with PaintBox1.Canvas do

begin

Pen.Color:=ClRed; //цветлинии

Pen.Width:=2; // шириналинии

Brush.Color:=ClBlue; //цветзаливки

Brush.Style:=bsCross; //стильзаливки

Ellipse(10,10,160,100); //рисуемэллипс
Pen.Color:=ClGreen;

Brush.Color:=clYellow;

Brush.Style:=bsDiagCross;

Pie(400,10,500,110,400,60,500,60); //рисуемсектор
Pen.Color:=clPurple;

Brush.Color:=clOlive;

Brush.Style:=bsBDiagonal;

//рисуеммногоугольник

Polygon([Point(10,200),Point(200,200),Point(200,250),Point(150,250)]);

end;
Timer1.Enabled:=false; //отключаемтаймер

end;
Рассмотрим методы, изображающие примитивы:
procedure Ellipse(X1, Y1, X2, Y2: Integer);
Метод Ellipse рисует окружность или эллипс с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush.

Точки (X1, Y1) и (X2, Y2) определяют прямоугольник, описывающий эллипс.
procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);
Метод Pie рисует замкнутую фигуру - сектор окружности или эллипса, с помощью текущих параметров пера Pen. Фигура заполняется текущим значением Brush.

Точки (X1, Y1) и (X2, Y2) определяют прямоугольник, описывающий эллипс.

Начальная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (X3, Y3).

Конечная точка дуги определяется пересечением эллипса с прямой, проходящей через его центр и точку (X4, Y4).

Дуга рисуется против часовой стрелки от начальной до конечной точки. Рисуются прямые, ограничивающие сегмент и проходящие через центр эллипса и точки (X3, Y3) и (X4, Y4).
procedure Polygon(Points: array of TPoint);
Метод Polygon рисует на канве замкнутую фигуру (полигон, многоугольник) по множеству угловых точек, заданному массивом Points. Первая из указанных точек соединяется прямой с последней.
Polygon([Point(10,10),Point(30,10),Point(130,30),Point(240, 120)]);
рисует на канве формы четырехугольник по точкам, заданным функциями Point.
1   2   3   4   5


написать администратору сайта