фывфыв. Практикум по дисциплине Разработка приложений в визуальных средах для студентов специальностей
![]()
|
2. Постановка задачиРазработать приложение, поддерживающее чтение и сохранение настроек в Ini – файлах. 3. ЗаданиеРеализовать чтение и сохранение параметров при запуске и завершении программы. В качестве задания использовать лабораторную работу №5. ЛАБОРАТОРНАЯ РАБОТА 11Разработка приложения, поддерживающего создание графических изображенийЦель лабораторной работы: Изучить основные графические компоненты, их свойства и методы. 1. Краткие сведенияЛюбая Windows-программа осуществляет вывод информации на экран с помощью GDI (GraphicDeviceInterface). Функции, реализованные в GDI, являются аппаратно независимыми. Эти функции взаимодействуют с конкретным устройством не напрямую, а через специальную программу, которая называется драйвером устройства. Для любых устройств (мониторов, принтеров, плоттеров и т.д.) используется соответствующий драйвер. Функции GDI взаимодействуют с драйвером устройства через специальную структуру, называемую контекстом устройства (Device Context). В качестве контекста в Delphi выступает объект Canvas. В Delphi имеется несколько независимых классов, которые определяют средства создания изображений. К ним можно отнести TCanvas - холст, TPen - перо, TBrush - кисть, TFont - шрифт. Данные классы Delphi иногда называют классами-надстройками, так как связанные с ними объекты самостоятельно в программе не используются, а выступают как свойства того или иного элемента управления (Form, Edit, …). Рассмотрим основные свойства этих классов. Класс TPen С помощью этого класса производится рисование линий и контуров различных геометрических фигур. Перо характеризуется цветом, стилем и толщиной. Основные свойства класса: Color: TColor - для задания конкретного цвета. Цвет в Windows задается в формате RGB, т.е. тройкой чисел, определяющих степени интенсивности трех его цветовых составляющих – красной, зеленой и синей. Для задания конкретного цвета используется тип TColor, описанный в Unit Graphics как: Type TColor = -$7FFFFFFF..$7FFFFFFF, т.е. для задания конкретного цвета выделяется целое число в 4 байта. Самый крайний байт определяет интенсивность красной составляющей. В шеснадцатиричной системе счисления соответствующие составляющие изменяются в диапазонах: $00 00 00 00 - $00 00 00 FF - красная составляющая, $00 00 00 00 - $00 00 FF 00 – зеленая составляющая, $00 00 00 00 - $00 FF 00 00 – синяя составляющая. Левый байт задает палитру. Для наиболее часто используемых цветов определены соответствующие константы. Они разбиваются на 2 группы: Цвета, безотносительно, к какому элементу они применяются, например: clBlack .. clWhite, clNone. Цвета, предназначенные для окрашивания каких-либо деталей изображения: полос скроллинга, фона рабочего окна Windows, фона меню и т.д. Это такие цвета как: clWindows, clMenu и т.д. Цвета второй группы могут меняться в зависимости от настроек Windows. Замечания. Получить составной цвет можно также смешав три составляющие при вызове функции RGB: Color:= RGB(255, 0, 0); //ярко – красный цвет. Если требуется выделить из смешанного цвета одну из его составляющих, то это можно сделать функциями GetRValue, GetGValue, GetBValue, например: RedValue:= GetRValue(Color). Style : TPenStyle - задает тип линии путем использования констант: ![]() ![]() ![]() ![]() ![]() psClean; Width: Integer - задает толщину линий. Класс TBrush С помощью этого класса задаются характеристики кисти. Основные свойства, определенные в классе: Color: TColor - задает цвет кисти. По умолчанию clWhite. Style: TBrushStyle - определяет стиль кисти. Для задания стиля используются константы: bsSolid ![]() bsClear ![]() bsBDiagonal ![]() bsFDiagonal ![]() bsCross ![]() bsDiagCross ![]() bsHorizontal ![]() bsVertical ![]() Класс TFont С помощью этого класса задаются характеристики текста с помощью свойств: Color: TColor - - задает цвет шрифта. По умолчанию clBlack. Name: TFontName - - задает название шрифта, например: ‘Arial’. Size: Integer - задает размер букв. Style: TFontStyle - задает стиль букв. Для задания стиля используются константы: [fsBold], [fsItalic] [fsUnderline], [fsStrikeOut]. Способы отображения графики Delphi предоставляет программисту 4 способа отображения графики: использование заранее созданных графических изображений; создание изображений с помощью графических компонентов; создание изображений с помощью примитивов (линия, круг и т.д.) непосредственно во время работы программы. представление информации в виде графиков. 1-й способ. Компонента TImage Если графическое изображение уже создано, например, с помощью графического редактора (например, Paint), то его можно показать с помощью компонентыTImage. В Delphi с помощью этого компонента можно отобразить следующие графические изображения: растровое (*.bmp), пиктограммы (*.ico), типа метафайла (*.wmf), курсора (*.cur). Вместе с тем известны и другие способы хранения изображений (*.pcx, *.gif, *.tiff, *.jpeg, *.dwg). Для того, чтобы включить изображения других форматов их нужно перевести в формат *.bmp. Основные свойства компонента TImage: Canvas - содержит канву для прорисовки изображения; Center - указывает, надо ли центрировать изображение в границах компонента. Игнорируется, если: AutoSize := True; или Stretch := True; и изображение не является пиктограммой (ICO); Increment - разрешает/запрещает показ большого изображения по мере его загрузки; Picture - центральное свойство класса. Служит контейнером изображения TPicture; Proportional - разрешает/запрещает пропорционально уменьшать высоту и ширину изображения, если оно не может целиком уместиться в рабочей зоне компонента; Stretch - разрешает/запрещает изменять размер изображения так, чтобы оно целиком заполнило клиентскую область компонента; Transparent - запрещает/разрешает накладывать собственный фон изображения на фон компонента. Компонент TImage позволяет поместить графическое изображение в любое место на форме. Собственно картинку можно загрузить во время дизайна в редакторе свойства Picture (Инспектор Объектов). Картинка должна храниться в файле в формате BMP (bitmap), WMF (Windows Meta File) или ICO (icon). При проектировании следует помнить, что изображение, помещенное на форму во время дизайна, включается в файл .DPR и затем прикомпилируется к EXE-файлу. Поэтому такой EXE-файл может получиться достаточно большой. Как альтернативу можно рассмотреть загрузку картинки во время выполнения программы, для этого у свойства Picture (которое является объектом со своим набором свойств и методов) есть специальный метод LoadFromFile. Пример. По нажатию кнопки необходимо загрузить в компоненту TImage изображение. Обработчик нажатия кнопки Button1Click выглядит следующим образом: procedure TForm1.Button1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); Image1.Stretch := True; end; end; Если изображение, находящееся в TImage, нужно сохранить в файле, можно применить метод SaveToFile, который также принадлежит свойству Picture. Shape_,_TBeve_l'>2-й способ. Компоненты TShape, TBevel С помощью этого способа имеется возможность рисовать простейшие геометрические фигуры (прямоугольник, квадрат, скругленный прямоугольник, скругленный квадрат, эллипс, окружность). Фигура полностью занимает пространство компонента. Если задан квадрат или круг, а размеры элемента по горизонтали и вертикали отличаются, фигура чертится с размером меньшего измерения. Для создания таких фигур используется компонента TShape, расположенная на закладке Additional под пиктограммой ![]() Могут быть использованы следующие свойства компонента: Shape : TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle) – тип геометрической фигуры, где stRectangle – прямоугольник, stSquare- квадрат, stRoundRect- скругленный прямоугольник, stRoundSquare- скругленный квадрат, stEllipse- эллипс, stCircle- окружность. Выбранная фигура рисуется на весь экран компонента TShape. Изменение свойства Shape приводит к немедленной перерисовке изображения. Brush : TBrush – используется для заливки области; Pen : TPen -- используются для изменения параметров рамки. Пример: Procedure TForm1.FormCreate( ); begin with Shape1 do begin Shape := stRectangle; //Фигура - прямоугольник Brush.Color := clRed; //Красный цвет заливки Pen.Color := Blue; //Синий цвет рамки Brush.Style := bsHorizontal; //Дискретная заливка в виде горизонтальных линий Pen.Style := psSolid; //Сплошной тип линии рамки Pen.Width := 2; //Толщина линии рамки end; end; Bitmap : TBitmap - позволяет в качестве закраски или заливки использовать растровое изображение, например: Shape1.Brush.Bitmap := Image1.Picture.Bitmap;. Компонент TBevel Этот компонент ![]() Изменения внешнего вида компонента осуществляется с помощью свойств: Shape : TBevelShape = (bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine, bsRightLine) – геометрия компонента; Style :TBevelStyle = (bsLowered, bsRaised) – вид (вдавленный, выпуклый) компонента. 3-й способ. Поддержка графических операций низкого уровня Для создания графических изображений в области некоторых компонент (TForm, TImage, TPaintBox, TPrinter, TListBox, TComboBox, TDrawGrid), используется свойство Canvas. С каждым из перечисленных компонент связано событие OnPaint. Это событие возникает, когда ядру Windows необходимо перерисовать содержимое компонента (например, при активизации формы, когда один из перечисленных компонентов становится видимым). Чтобы отрисовать графическое изображение внутри рабочей области перечисленных компонент нужно обработать событие OnPaint, т.е. записать соответствующий обработчик. Можно воспроизвести на соответствующих компонентах любые графические объекты без использования компонент TImage, TShape, TLabel. Класс TCanvas Класс TCanvas имеет свойства: Pen: TPen - - устанавливает цвет, толщину, стиль линий и границ геометрических фигур, например: with Canvas do begin Pen.Color := clBlue; Pen.Width := 2; Pen.Style := psDash; end; Brush: TBrush – это свойство позволяет устанавливать цвет и шаблон кисти; Font: TFont – это свойство позволяет устанавливать параметры текста; PenPos: TPoint - выдает текущую позицию пера; Pixels : TColor - двухмерный массив, содержащий цвета пикселей, например: Procedure TForm1.Button1Click( ); Var i, j : LongInt; begin Button1.Visible := false; with Canvas do begin for i:=1 to Width do for j:=1 to Height do Pixels[i,j] := i*j; Button1.Visible := true; end; end; Методы класса TCanvas Большое количество методов класса TCanvas позволяют отображать различные геометрические фигуры с помощью свойства Pen. Если фигура замкнута, то ее поверхность закрашивается Brush. Все тексты изображаются шрифтом Font. В процессе работы программы эти характеристики можно изменять. Так: Arc(x1, y1, x2, y2, x3, y3, x4, y4) - рисует дугу: ![]() Chord(x1, y1, x2, y2, x3, y3, x4, y4) - рисует сегмент из дуги эллипса и хорды: ![]() Ellipse(x1, y1, x2, y2) - рисует эллипс; FillRect(Rect) - закрашивание прямоугольника; MoveTo (x, y) - - перемещает перо в точку с координатами x, y; LineTo(x, y) - рисует линию из текущего положения пера в точку с координатами x и y; Pie(x1, y1, x2, y2, x3, y3, x4, y4) - - рисует сектор эллипса; Poligon(Point: array of TPoint) - вычерчивание заданного многоугольника. Пример. var P: array[1..3] of TPoint; begin P[1].x := 10; P[1].y := 300; P[2].x := 200; P[2].y := 300; P[3].x := 100; P[3].y := 20; Canvas.Poligon(P); end; Poliline(Point: array of TPoint) - рисует ломаную; RoundRect(x1, y1, x2, y2, x3, y3) - вычерчивание и заполнение прямоугольника со скругленными углами ![]() TextOut(x, y, S: String) - осуществляет вывод строки; Метод TextRec выводит текст только внутри указанного прямоугольника. Длину и высоту текста можно узнать с помощью функций TextWidth и TextHeight; Draw(x, y, Graphic: TGraphic) - прорисовка графического объекта Graphic так, чтобы левый верхний угол располагался в (x, y). Объект Graphic может быть типа Bitmap, Icon и Metafile; StretchDraw(Rect: TRect; Graphic: TGraphic) - вычерчивание и масштабирование объекта Graphic до полного заполнения Rect. Пример. На форме имеется Image1. С помощью свойства Picture в нее помещена картинка. Требуется переместить эту картинку в другое положение. Procedure TForm1.FormPaint( ); begin with Canvas do begin Draw (0, 0, Image1.Picture.Bitmap); StretchDraw (Rect(250,0,350,50), Image1.Picture.Bitmap); end; end; Как правило, все графические операции осуществляются не на форме, а посредством специальных графических компонент, например компонента Image, который позволяет разместить на экране растровое изображение, пиктограмму, метафайл, либо собственное изображение. Для более простых графических операций используется компонент TPaintBox. |