Компоненты отображения графической информации. Использование графических возможностей Delphi. Краткие сведения из теории

Работа с графикой в Delphi это не только линии и рисунки, но также и и печать текстовых документов. Поэтому в Delphi работе с графикой нужно уделить немного времени. Работа с графикой в Delphi предполагает обращение к канве - свойству Canvas компонентов. Canvas Delphi это холст, который позволяет программисту иметь доступ к каждой своей точке (пикселу), и словно художнику отображать то, что требуется. Конечно, рисовать попиксельно для работы с графикой в Delphi не приходится, система Delphi предоставляет для мощные средства работы с графикой , облегчающие задачу программиста.

В работе с графикой в Delphi в распоряжении программиста находятся канва (холст, полотно - свойство Canvas Delphi компонентов), карандаш (свойство Pen ), кисть (свойство Brush) того компонента или объекта, на котором предполагается рисовать. У карандаша Pen и кисти Brush можно менять цвет (свойство Color) и стиль (свойство Style). Доступ к шрифтам предоставляет свойство канвы Font . Эти инструменты позволяют отображать как текст, так и достаточно сложные графики математического и инженерного содержания, а также рисунки. Кроме этого, работа с графикой позволяет использовать в Delphi такие ресурсы Windows как графические и видеофайлы.

Конечно, не все компоненты в Delphi имеют эти свойства. На вкладке Additional расположен специализированный компонент TImage , специально предназначенный для рисования, но также свойство Canvas имеют, например, такие компоненты как ListBox, ComboBox, StringGrid, а также и сама Форма, которая размещает наши компоненты! Кроме того, для печати документов Delphi обращается к свойству Canvas такого объекта как принтер.

Основное свойство такого объекта как Canvas Delphi - Pixels типа TColor , то есть это двумерный массив точек (пикселов), задаваемых своим цветом. Рисование на канве происходит в момент присвоения какой-либо точке канвы заданного цвета. Каждому пикселу может быть присвоен любой доступный для Windows цвет. Например, выполнение оператора

Image1.Canvas.Pixels:=clRed;

Приведёт к рисованию красной точки с координатами . Узнать цвет пиксела можно обратным присвоением:

Color:=Image1.Canvas.Pixels;

Тип TColor определён как длинное целое (LongInt). Его четыре байта содержат информацию о долях синего (B), зелёного (G), и красного (R) цветов. В 16-ричной системе это выглядит так: $00BBGGRR . Доля каждого цвета может меняться от 0 до 255. Поэтому чтобы отобразить максимально красную точку, ей нужно присвоить цвет $000000FF .
Для стандартных цветов в Delphi определён набор текстовых констант. Увидеть его можно, открыв в Инспекторе Объектов свойство Color, например, той же Формы.

Следующая таблица содержит некоторые свойства и методы канвы:

Процедура TextOut(X, Y: Integer; const Text: WideString);
Производит вывод строки Text начиная с (X, Y) - левого верхнего пиксела текста.
Свойство TextWidth(var Text: String): Integer;
Содержит длину строки Text в пикселах.
Свойство TextHeight(var Text: String): Integer;
Содержит высоту строки Text в пикселах.
Процедура MoveTo(X, Y: Integer);
Производит перемещение позиции к пикселу с адресом (X, Y).
Процедура LineTo(X, Y: Integer);
Производит рисование прямой линии из точки текущей позиции к пикселу с адресом (X, Y). Адрес (X, Y) становится точкой текущей позиции.
Процедура FillRect(const Rect: TRect);
Заполняет прямоугольник Rect на холсте, используя текущую кисть. Может использоваться, в том числе, для стирания части изображения на холсте.

Напишем, используя только эти методы канвы, приложение для изображения на канве компонента Image текста, который вводится в компонент Memo :

Первое, что мы сделаем, это инициализацию переменных при старте программы. Необходимо определить размеры области рисования (создадим для этого глобальную переменную Rect типа TRect) и сделать цвет фона Image белым:

procedure TForm1.FormCreate(Sender: TObject);
begin
Rect.Left:=0;
Rect.Top:=0;
Rect.Right:=Image1.Width;
Rect.Bottom:=Image1.Height;
Image1.Canvas.Brush.Color:=clWhite;
end ;

Затем нарисуем рамку по сторонам Image:

procedure TForm1.page;
begin
with Image1.Canvas do
begin
MoveTo(0, 0);
LineTo(Image1.Width-1, 0);
LineTo(Image1.Width-1, Image1.Height-1);
LineTo(0, Image1.Height-1);
LineTo(0, 0);
end ;
end ;

Попробуем, что получилось. Всё работает, но рамка пока не выводится. Поэтому добавим процедуру page в в процедуру FormCreate . Теперь красиво. Далее напишем простую процедуру стирания, очищения Image. Её нужно будет вызывать перед любым обновлением изображения, иначе предыдущее и последующее изображения будут перекрываться.

procedure TForm1.clearing;
begin
Image1.Canvas.FillRect(Rect); //Прямоугольник Rect заполняется белым цветом, изображение стирается.
end ;

Теперь пришла очередь непосредственно процедуры вывода текста. Начнём выводить текст от точки (3, 3) - верхнего левого угла листа, с небольшим отступом в 3 пиксела. Каждую последующую строку будем смещать на высоту строки:

procedure TForm1.prn;
var i: Integer;
begin
with Image1.Canvas do
for i:=1 to Memo1.Lines.Count do
TextOut(3, 3+(i-1)*TextHeight("A"), Memo1.Lines);
end ;

Теперь всё готово для вывода текста. Делать это будем по событию OnChange:

procedure TForm1.Memo1Change(Sender: TObject);
begin
clearing;
prn;
page;
end ;

Ну и напоследок процедура изменения размера шрифта:

procedure TForm1.Edit1Change(Sender: TObject);
begin
Memo1.Font.Size:=UpDown1.Position;
Image1.Canvas.Font.Size:=UpDown1.Position;
Memo1Change(Sender);
end ;

Можно модифицировать эту программу для вывода текста на печать. Для работы с принтером нужно подключить модуль Printers :

unit Unit1;

Interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Printers ;

При работе с принтером как с полотном для начала печати вызывается метод BeginDoc , затем производится вывод документа, завершается печать вызовом метода EndDoc :

Printer.BeginDoc;
with Printer.Canvas do
begin
... Печать документа...
end ;
Printer.EndDoc;

Ширина и высота полотна принтера доступны через свойства Printer.PageWidth и Printer.PageHeight . Закончить печать на одной странице и начать печатать на другой можно с помощью метода Printer.NewPage .


«Отображение графической информации в Delphi» План темы: 1.С С пппп оооо сссс оооо бббб ыыыы в в в в ыыыы вввв оооо дддд аааа г г г г рррр аааа фффф ииии чччч ееее сссс кккк оооо йййй ииии нннн фффф оооо рррр мммм аааа цццц ииии ииии в в в в D D D D eeee llll pppp hhhh iiii О О тттт оооо бббб рррр аааа жжжж ееее нннн ииии ееее к к к к аааа рррр тттт ииии нннн оооо кккк О О тттт оооо бббб рррр аааа жжжж ееее нннн ииии ееее г г г г ееее оооо мммм ееее тттт рррр ииии чччч ееее сссс кккк ииии хххх фффф ииии гггг уууу рррр П П оооо сссс тттт рррр оооо ееее нннн ииии ееее г г г г рррр аааа фффф ииии кккк оооо вввв и и и и д д д д ииии аааа гггг рррр аааа мммм мммм....


1. Способы вывода графической информации. В Delphi существует несколько способов вывода графической информации: В Вывод заранее приготовленных изображений (компоненты Image, Shape); П Построение графиков и диаграмм (компонент Chart и др.); Ф Формирование изображений программным способом (объект Canvas).


2.Отображение 2.Отображение картинок. Отображение картинок при помощи компонента Image мы рассмотрели в оооо дддд нннн оооо йййй и и и и зззз п п п п рррр ееее дддд ыыыы дддд уууу щщщщ ииии хххх т т т т ееее мммм.... Здесь мы рассмотрим пример осуществления простейшей анимации путем периодического изменения отображаемой картинки в компонентах Image. ПППП ееее рррр ееее йййй тттт ииии н н н н аааа п п п п рррр ииии мммм ееее рррр....






3.Отображение 3.Отображение геометрических фигур. И Из нескольких компонентов Shape можно создавать несложные рисунки. П Программно изменяя положение (.Left,.Top) размер (.Width,.Height) и цвет (Brush.Color) компонентов Shape в рисунке можно осуществить элементы простейшей анимации. Р Р Р Р аааа сссс сссс мммм оооо тттт рррр ееее тттт ьььь п п п п рррр ииии мммм ееее рррр....


4.Построение 4.Построение графиков и диаграмм. Диаграммы предназначены для более наглядного представления массивов численных данных, их визуального отображения и анализа. ПППП рррр ииии мммм ееее рррр.... Для построения диаграмм в Delphi имеется несколько компонентов, один из них компонент Chart (раздел TeeChart Std).










Графиков и диаграмм. Данные для отображения обычно передаются в Chart программно, пример: Series1.Clear; {очистить серию} for i:=1 to N do Series1.addxy(i, A[i], clGreen); Значение по оси X Значение по оси Y Подпись по оси X Цвет данных на диаграмме РР аааа сссс сссс мммм оооо тттт рррр ееее тттт ьььь п п п п рррр ииии мммм ееее рррр п п п п оооо сссс тттт рррр оооо ееее нннн ииии яяяя гггг рррр аааа фффф ииии кккк аааа ф ф ф ф уууу нннн кккк цццц ииии ииии y y y y = = = = S S S S iiii nnnn ((((xxxx))))


Далее: Лабораторная работа «««« ОООО тттт оооо бббб рррр аааа жжжж ееее нннн ииии ееее к к к к аааа рррр тттт ииии нннн оооо кккк и и и и г г г г ееее оооо мммм ееее тттт рррр ииии чччч ееее сссс кккк ииии хххх фффф ииии гггг уууу рррр, и и и и хххх а а а а нннн ииии мммм аааа цццц ииии яяяя »»»»....Задание: 1) Разработать приложение для осуществления простейшей анимации путем периодического изменения отображаемой картинки в компонентах Image. (Количество картинок не менее трех, картинки подобрать самостоятельно).




Далее: Лабораторная работа «««« ПППП оооо сссс тттт рррр оооо ееее нннн ииии ееее г г г г рррр аааа фффф ииии кккк оооо вввв и и и и д д д д ииии аааа гггг рррр аааа мммм мммм »»»»....Задание: 1)М одифицировать приложение из лабораторной работы 9 (Отображение данных в таблице). Добавить возможность отображения некоторых данных из таблицы на гистограмме или круговой диаграмме. 2) Построить график заданной функции.

Описание презентации по отдельным слайдам:

1 слайд

Описание слайда:

2 слайд

Описание слайда:

Среда визуального программирования Delphi, как и Windows, поддерживает графический интерфейс пользователя (GDI – Graphic Delphi Interface). В Delphi существует два способа вывода графической информации: вывод заранее подготовленных изображений; рисование из программы.

3 слайд

Описание слайда:

Первый способ основан на использовании компонентов Image и Shape. Можно воспользоваться готовой картинкой(пиктограммой) или создать их самостоятельно, используя Редактор Изображений Image Editor. Второй способ – это формирование изображений программным способом, используя объект Canvas.

4 слайд

Описание слайда:

Delphi имеет в своём распоряжении специальный объект, который оформлен в виде свойства Canvas. Оно доступно только во время работы приложения, так что управлять им можно только из программы, написав нужный код на языке Object Pascal. Если у объекта есть свойство Canvas, на его поверхности можно рисовать. Наиболее подходящими кандидатами на эту роль являются - сама форма и специальный компонент PaintBox.

5 слайд

Описание слайда:

Oбъект Canvas Свойства: Pen (Перо) –свойство для рисования линий и границ геометрических фигур. Перо следует командам графического курсора и, в свою очередь, имеет свои вложенные свойства: Color – определяет цвет линии (по умолчанию чёрный); Mode – стиль рисования (имеет множество значений, которые здесь не приводятся); Style – стиль линии, который может принимать значения: рsSolid – сплошная (по умолчанию); рsDosh – штриховая; рsDot – пунктирная; рsDoshDot – штрих пунктирная (и др.свойства); Widh – толщина линии (по умолчанию 1 пиксель);

6 слайд

Описание слайда:

Brush (Кисть) – свойство для заполнения фигур, имеющие следующие вложенные свойства: Color – цвет кисти (по умолчанию – белый); Style – орнамент кисти, который может принимать значения: bsClear – сплошная раскраска; bsHorizontal – горизонтальные линии; bsVertical – вертикальные линии; bsFDiagonal – левые диагональные линии; bsBDiagonal – правые диагональные линии; bsCross – клетка; bsDiagCross – косая клетка;

7 слайд

Описание слайда:

Font (Шрифт) – свойство для вывода текста, имеющее следующие вложенные свойства: Color – цвет символов; Height – высота шрифта в пикселях; Name – имя шрифта; Size – размер шрифта; Style –стиль шрифта, который может принимать следующие значения: fsBold – полужирный; fsItalic – курсив; fsUnderline – подчёркнутый; fsStrikeOut – перечёркнутый;

8 слайд

Описание слайда:

PenPos (Позиция пера) – свойство для хранения текущей позиции рисования (определяет положение пера в области рисования в данный момент времени); Pixels –свойство-массив для записи и считывания координат отдельных точек области рисования («холста»).

9 слайд

Описание слайда:

Методы объекта Canvas MoveTo(x,y: integer) –перемещает перо с текущей позиции в точку с заданными координатами х, у без рисования линии; LineTo(х.у: integer) -перемещает перо с текущей позиции в точку с заданными координатами х, у с прочерчиванием линии; Arc(х1, у1, х2, у2, х3, у3, х4, у4: integer) –рисует дугу эллипса, вписанного в прямоугольник с координатами (х1,у1) и (х2,у2). Дуга определяется радиусами эллипса, проходящими через точки (х3,у3) и (х4,у4);

10 слайд

Описание слайда:

Chord(х1, у1, х2, у2, х3, у3, х4, у4: integer) –рисует хорду эллипса по описанию, приведённому для метода Arc; Ellipse(х1, у1, х2, у2: integer) – рисует эллипс, вписанный в прямоугольник с левым верхним углом в точке (х1, у1) и нижним правым углом в точке (х2, у2); FillRect(Rect (х1, у1, х2, у2: integer)) – заполняет прямоугольник цветом, заданным в текущей кисти (Brush). Использует функцию Rect, которая представляет прямоугольник с заданными координатами;

11 слайд

Описание слайда:

FloodFill(х,у: integer; Color: TColor; FillStyle: TFillStyle) – заполнение текущим цветом, заданным в свойстве Brush: при FillStyle=fsBorder – замкнутой области от точки с координатами х, у до границы, определённой цветом Color; при FillStyle=fsSurface – тот участок поверхности, который имеет цвет Color; Pie(х1, у1, х2, у2, х3, у3, х4, у4: integer) –рисует сектор эллипса, вписанного в прямоугольник с координатами (х1, у1) и (х2, у2). Сектор определяется двумя радиусами эллипса, проходящими через точки (х3,у3) и (х4, у4);

12 слайд

Описание слайда:

Polyline (Points: array of TPoint) – рисует ломаную линию, последовательно соединяя точки массива Points; Polygon (Points: array of TPoint) – вычерчивает многоугольники, последовательно соединяя точки массива Рoints. Отличается от метода Polyline тем, что автоматически соединяет конец ломаной с её началом; Rectangle (х1, у1, х2, у2: integer) – рисует прямоугольник с левым верхним углом в точке (х1, у1) и нижним правым углом в точке (х2,y2);

13 слайд

Описание слайда:

Retresh –метод вызывается при необходимости перерисовки изображения; RoundRect (х1, у1, х2, у2, х3, у3: integer) –рисует прямоугольник с закруглёнными углами. Углы рисуются как четверти эллипса с шириной х3 и высотой у3; TextOut (х, у:integer, Text:String) –вывод текста, указанного в параметре Text. Текст вписывается в прямоугольник, верхний левый угол которого имеет координаты х, у.

Тема:
Цель лабораторной работы Delphi .

Студенты должны научиться:

  • Создавать графики

Теоретическая часть

Пиктограмма Название Страница Назначение
Image (изображение) Additional
Shape (форма) Additional
DrawGrid

(таблица рисунков)

Additional
Chart

(диаграммы и графики)

Additional
PaintBox

(окно для рисования)

System

Shape Brush

Image:

Chart:

Метод Clear

Метод Add

Метод AddXY

PaintBox:

Задание 1

Задание 2

Задание 3

with PaintBox1, canvas do

Brush.Color:= clRed;

Pen.Color:= clGreen;

Pen.Style:= psDash;

Pen.Color:= clRed;

Пояснение:

Задание 4

Var i:integer;

Series1.Clear;

for i:=0 to 22 do

Series1. AddXY(i*0.29,10* sin(i*0.29),”, clGreen);, где i*0.29 (AXValue) это аргумент, а 10* sin(i*0.29) (AYValue)

  1. y=3.2*(14*x)
  2. y=sin (x)
  3. y=cos (x)
  4. y=x 2 +cos(x)
  5. y=x 2 -4.5*4

Задание 5

with ComboBox1 do begin

Items:=Screen.Fonts;

  1. Сохраните и запустите проект.
  1. Задание к работе.
  2. Вставить код, написанный вами
  3. Вывод о проделанной работе.Тема: Использование графических возможностей.

    Цель лабораторной работы – Познакомиться с графическими возможностями Delphi .

    Студенты должны научиться:

    • Создавать какие-либо графические штуки J
    • Использовать графические возможности
    • Применять графические возможности
    • Создавать графики

    Теоретическая часть

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

    Пиктограмма Название Страница Назначение
    Image (изображение) Additional Используется для отображения графики: пиктограмм, битовых изображений и метафайлов
    Shape (форма) Additional Используется для построения геометрических примитивов
    DrawGrid

    (таблица рисунков)

    Additional Используется для создания в приложении таблицы, которая может содержать графические изображения
    Chart

    (диаграммы и графики)

    Additional Используется для создания диаграмм и графиков
    PaintBox

    (окно для рисования)

    System Используется для создания на форме некоторой области, в которой можно рисовать

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

    Shape : только условно может быть отнесен к средствам отображения графической информации, поскольку просто представляет собой различные геометрические фигуры, соответствующим образом заштрихованные. Основное свойство этого компонента - Shape (форма), которое может принимать значения, Brush (кисть) – это свойство является объектом типа TBrush, имеющим ряд подсвойств, в частности: цвет (Brush.Color) и стиль (Brush.Style) заливки фигуры. Третье из специфических свойство компонента Shape - Pen (перо), определяющее стиль линий.

    Image: основные свойства: Picture – отвечает за загрузку изображения, Stretch – отвечает за размер изображения в компоненте Image, AutoSize – отвечает за размер компонента, в который было загружено изображение с учетом размера изображения.

    Chart: Для задания отображаемых значений надо использовать методы серий Series. Рассмотрим три из них.

    Метод Clear очищает серию от занесенных ранее данных.

    Метод Add : – Add(Const AValue: Double; Const ALabel: String; AColor: TColor)

    позволяет добавить в диаграмму новую точку. Параметр AValue соответствует добавляемому значению функции, а значение аргумента функции заполняется автоматически, поэтому его задавать не нужно, параметр ALabel – название, которое будет отображаться на диаграмме и в легенде, AColor – цвет. Параметр ALabel – не обязательный, его можно задать пустым: ”.

    Метод AddXY – AddXY(Const AXValue, AYValue: Double; Const ALabel: String; AColor: TColor)

    позволяет добавить новую точку в график функции. Параметры AXValue и AYValue соответствуют аргументу и функции. Параметры ALabel и AColor те же, что и в методе Add.

    PaintBox: находиться на странице System. Он представляет из себя простое окно с канвой, где можно рисовать произвольные изображения. Графические инструменты содержаться в свойствах Font, Brush и Pen. Канва (холст) содержится в свойстве Canvas компонента. Само рисование программируется в обработчике события onPaint.

    Задание 1

    1. Создать программу, которые знакомит вас с компонентом Image. Необходимо поместить компоненты: Label, Image, BitBtn, Button. Подписать как на изображении и загрузить любое изображение. Настройте компоненты, чтоб в Image1 изображение входило в рамки, а в Image2 изображение соответствовало своему размеру. Сделайте всплывающие подсказки, при наведении на каждое изображение, свойство Hint отвечает за подсказки, для отображения нужно ввести текст и включить подсказки в свойстве ShowHint.

    Задание 2

    1. Увеличить размер формы, и добавить компоненты: Shape, Label. Подписать.
    2. Каждому компоненту Shape применить свои стили согласно изображению:

    Задание 3

    1. Для примера, расположим компонент PaintBox на форму. Обработчик onPaint:

    with PaintBox1, canvas do

    Brush.Color:= clRed;

    Pie(12,100,140,280,12,100,140,280);

    Pen.Color:= clGreen;

    Pen.Style:= psDash;

    Rectangle(120,60,Width,Height);

    Pen.Color:= clRed;

    Polyline();

    TextOut(75,20,’Здесь может быть Ваш текст!’);

    Пояснение: Первая строка задает цвет заполнения: Brush.Color:= clRed; Вторая рисует часть эллипса: Pie(12,100,140,280,12,100,140,280); Следующие строки задают параметры пера (какая будет окантовка у фигур), ширину, цвет и стиль линии: Pen.Width:= 4; Pen.Color:= clGreen; Pen.Style:= psDash; Но в данном случае мы будем видеть одну сплошную линию, так как при толщине более одного пиксела стиль линий будет psSolid (сплошной). За прорисовку квадрата отвечает следующая строка: Rectangle(120,60,Width,Height); Красную звездочку рисует нижеследующая команда: Polyline(); За вывод текста отвечает последняя строка: TextOut(75,20,’Здесь может быть Ваш текст!’);

    Задание 4

    1. Сделать программу, которая строит заданный график функции y=10*sin(x)

    1. Увеличить в размерах форму и поместить на нее компонентTСhart из вкладки Additional, и разместить компонент Button, Label. Растянуть новый TСhart до удобного для разработки размера.
    2. Заходим в редактор графиков двойным нажатием на компонент. Редактируем и настраиваем внешний вид Series. Для этого нажимаем Add и выбираем тип графика Line и жмем ОК. Для смены заголовка, нажать Title и ввести формулу y=10*sin(x).
    3. Прописать код для вычерчивания графика в событии OnClick компонента Button:

    Var i:integer;

    Series1.Clear;

    for i:=0 to 22 do

    Series1.AddXY(i*0.29,10*sin(i*0.29),”,clGreen);

    Пояснение: метод Series1.Clear; очищает серию от занесенных ранее данных, чтоб при обновлении не было старых значений. Для рисования графика, необходимы значения, в нашем случае 22 значения, при которых происходит прорисовывание графика функцией Series1. AddXY(i*0.29,10* sin(i*0.29),”, clGreen);, где i*0.29 (AXValue) это аргумент, а 10* sin(i*0.29) (AYValue) значение вычисления функции, ” (ALabel) название, которое будет отображаться на диаграмме и в легенде, можно оставить пустым, и clGreen (AColor) – цвет линий.

    1. Самостоятельно выполнить следующее задание: нарисовать график функций
    2. y=3.2*(14*x)
    3. y=sin (x)
    4. y=cos (x)
    5. y=x 2 +cos(x)
    6. y=x 2 -4.5*4

    Задание 5

    1. Создайте приложение, которое позволяет просматривать символы системных шрифтов.
    2. Увеличить в размерах форму, разместить DrawGrid1, ComboBox1, Label. Настройте у компонента DrawGrid1 следующие свойства: RowCount=7, ColCount=32, FixedCols=0, FixedRows=0, DafaultColWidth=20, DefaultRowHeight=20.
    3. Для того чтобы содержимое каждой ячейки перерисовывалось, создайте обработчик события OnDrawCell для компонента DrawGrid1. Для изображения символов шрифта воспользуемся свойством Canvas компонента DrawGrid1. Непосредственно нам понадобится метод TextRect свойства Canvas. Этот метод используется для вывода текстовой информации в определенной ячейке. Обработчик события будет выглядеть так:

    DrawGrid1.Canvas.textrect(rect, Rect.Left, Rect.Top, char ((ARow+1)*32+acol));

    1. Сохраните проект. Убедитесь, что в ячейках таблицы отображаются символы системного шрифта, установленного по умолчанию.
    2. Для выбора шрифта воспользуемся компонентом ComboBox1. Для того чтобы данный компонент содержал все экранные шрифты, надо при создании формы занести их в список. Названия всех экранных шрифтов можно узнать с помощью глобальной переменной Screen типа TScreen. Данная переменная автоматически добавляется во все приложения Delphi. Пе­ременная Screen содержит информацию о текущем состоянии экрана приложения: названия форм и модулей данных, кото­рые используются приложением; данные об активной форме и компонентах, используемых этой формой; размер и разрешение используемого экрана; информацию о доступных приложению курсорах и шрифтах. Информация о доступных приложению шрифтах содержит­ся в свойстве Font, принадлежащем переменной Screen.
    3. Создайте для формы обработчик события onCreate и внесите в него операторы:

    with ComboBox1 do begin

    Items:=Screen.Fonts;

    ItemIndex:=Items.IndexOf(Font.Name);

    1. Сохраните и запустите проект. Компонент DrawGrid1 содержит символы шрифта, установленного в ComboBox1.
    2. Для того чтобы связать значение имени шрифта у DrawGrid1 и ComboBox1, создадим еще один обработчик события:

    DrawGrid1.Font.Name:=ComboBox1.Text;

    1. Сохраните и запустите проект.
    1. Номер, тема, цель лабораторной работы.
    2. Задание к работе.
    3. Описание входных, промежуточных и результирующих данных с указанием их типа.
    4. Программа на языке программирования.
    5. Результат выполнения программы (Введенное данные и полученные данные)
    6. Вставить код, написанный вами
    7. Вывод о проделанной работе.

Для отображения графической информации в библиотеке Delphi предусмотре­ны компоненты, список которых дан в табл. 6.

Таблица 6

Компоненты отображения графической информации

Компонент Страница Описание
Image (изображение) Additional Используется для отображения графики
PaintBox (окно для рисования) System Используется для создания на форме некоторой области, в кото­рой можно рисовать
DrawGrid (таблица рисунков) Additional Используется для отображения в строках и столбцах нетекстовых данных
Chart (диаграммы и графики) Additional Компонент принадлежит к семей­ству компонентов TeeChart, кото­рые используются для создания диаграмм и графиков
Chartfx (диаграммы и графики) ActiveX Редактор диаграмм и графиков
FIBook (страницы Excel) ActiveX Компонент ввода и обработки числовой информации
VtChart (диаграммы) ActiveX Окно построения диаграмм

Кроме того, отображать и вводить графическую информацию можно на повер­хности любого оконного компонента, имеющего свойство Canvas - канва.

Таблицы изображений – компоненты DrawGrid и StringGrid

Компонент DrawGrid используется для создания в приложении таблицы, ко­торая может содержать графические изображения. Этот компонент подобен компоненту StringGrid, поскольку послед­ний является производным от DrawGrid. Поэтому в DrawGrid присутствуют все свойства, методы, события компонента StringGrid, кроме относящихся к тексту, т.е. кроме свойств Cells , Cols, Rows, Objects. С этой точки зрения компонент StringGrid обладает существенно большими возможностями, чем DrawGrid, поскольку он может хранить в ячейках и изображения, и тексты. А если вы захотите внести текст в какие-то ячейки DrawGrid, то вам надо будет использовать для это­го методы вывода текста на канву, что не очень удобно.

Компоненты DrawGrid и StringGrid имеют канву Canvas, на которой можно размещать изображения.

Имеется метод Cell-Rect, который возвращает область канвы, отведенную под заданную ячейку. Этот метод определен как

function CellRect(ACol, ARow: Longint): TRect;

где ACol и ARow - индексы столбца и строки, начинающиеся с 0, на пересечении которых расположена ячейка. Возвращаемая этой функцией область является об­ластью канвы, в которой можно рисовать необходимое изображение. Например, оператор

DrawGridl.Canvas.CopyRect(DrawGridl.CellRect(1,1),

BitMap.Canvas,Rect(0,0,BitMap.Height,BitMap.Width));

копирует методом CopyRect в ячейку (1,1) таблицы DrawGridl изображение из компонента BitMap. Эта ячейка является второй слева и второй сверху в таблице, поскольку индексы начинаются с 0. Учтите, что если размеры ячейки меньше, чем размер копируемого изображения, то в ячейке поя­вится только левая верхняя часть картинки.

Изображение на канве компонентов DrawGrid и StringGrid, как и на канве любого компонента, подвержено стиранию при перекрытии окна приложения дру­гими окнами или, например, при сворачивании приложения.

Удобным способом занесения изображений в ячейки DrawGrid является испо­льзование обработчика событий OnDrawCell. Эти события наступают для каждой ячейки таблицы в момент ее перерисовки. Заголовок обработчика имеет вид:

procedure TForml.DrawGridlDrawCell(Sender: TObject;

ACol, ARow: Integer; Rect: TRect; State: TGridDrawState)

Параметр State указывает состояние ячейки. Он является множест­вом, которое может содержать следующие элементы: gdSelected - выделенная ячейка, gdFocused - ячейка, находящаяся в фокусе, gdFixed - ячейка в фикси­рованной области таблицы. Параметр State можно использовать для различного характера отображения ячеек в различных состояниях.

Компонент Shape

Компонент Shape только условно может быть отнесен к средствам отображе­ния графической информации, поскольку просто представляет собой различные геометрические фигуры, соответствующим образом заштрихованные. Основное свойство этого компонента - Shape (форма), которое может принимать значения:

StRectangle – прямоугольник;

StSquare – квадрат;

StRoundRect - прямоугольник со скругленными углами;

StRouhdSquare - квадрат со скруглен­ными углами;

StEllipse – эллипс;

StCircle – круг.

Другое существенное свойство компонента - Brush (кисть). Это свойство яв­ляется объектом типа TBrush, имеющим ряд подсвойств, в частности цвет (Brush.Color) и стиль (Brush.Style) заливки фигуры. Заливку при некоторых зна­чениях Style вы можете видеть на рис. 3.2. Третье из специфических свойство компонента Shape - Pen (перо), определяющее стиль линий.

Компонент Chart

Теперь рассмотрим компонент Chart. Этот компонент позволяет строить раз­личные диаграммы и графики, которые выглядят очень эффектно. Ком­понент Chart имеет множество свойств, методов, событий, так что если все их рас­сматривать, то этому пришлось бы посвятить целую главу. Поэтому ограничимся рассмотрением только основных характеристик Chart. А с остальными вы можете ознакомиться во встроенной справке Delphi или просто опробовать их, экспери­ментируя с диаграммами.

Компонент Chart является контейнером объектов Series - наследников клас­са TChartSeries. Каждый такой объект представляет серию данных, характеризующихся определенным стилем отображения: тем или иным графиком или диа­граммой. Каждый компонент Chart может включать несколько серий. Если вы хо­тите отображать график, то каждая серия будет соответствовать одной кривой на графике. Если вы хотите отображать диаграммы, то для некоторых видов диа­грамм можно наложить друг на друга несколько различных серий, для других (на­пример для круговых диаграмм) это, вероятно, будет выглядеть некрасиво. Одна­ко и в этом случае вы можете задать для одного компонента Chart несколько се­рий одинаковых данных с разным типом диаграммы. Тогда, делая в каждый мо­мент времени активной одну из них, вы можете предоставить пользователю выбор типа диаграммы, отображающей интересующие его данные.

Разместите один или два компонента Chart на форме и посмотрите открывшиеся в Инспекторе Объектов свойства. При­ведем пояснения некоторых из них.

AllowPanning - определяет возможность пользователя прокручивать наблюда­емую часть графика во время выполнения, нажимая правую кнопку мыши. Возможные значения: pmNone - прокрутка запрещена, pmHori/ontal, pm Vertical или pmBoth - разреше­на соответственно прокрутка только в горизонтальном направ­лении, только в вертикальном или в обоих направлениях.

AhowZoom - позволяет пользователю изменять во время выполнения масш­таб изображения, вырезая фрагменты диаграммы или графика курсором мыши. Если рамка фрагмента рисуется вправо и вниз, то этот фрагмент растягивается на все поле графика. А если рамка ри­суется вверх и влево, то восстанавливается исходный масштаб.

Title - определяет заголовок диаграммы.

Foot - определяет подпись под диаграммой. По умолчанию отсутству­ет. Текст подписи определяется подсвойством Text.

Frame - определяет рамку вокруг диаграммы.

Рядом со многими из перечисленных свойств в Инспекторе Объектов располо­жены кнопки с многоточием, которые позволяют вызвать ту или иную страницу Редактора Диаграмм - многостраничного окна, позволяющего установить все свойства диаграмм. Вызов Редактора Диаграмм возможен также двойным щелч­ком на компоненте Chart или щелчком на нем правой кнопкой мыши и выбором команды Edit Chart во всплывшем меню.

Cделайте двойной щелчок на верхнем компоненте Chart. Вы попадете в окно Редактора Диаграмм на страницу Chart, которая имеет несколько закладок. Прежде всего вас будет интересовать на ней закладка Series. Щелкните на кнопке Add - добавить серию. Вы попадете в окно, в котором вы мо­жете выбрать тип диаграммы или графика. В данном случае выберите Pie - круго­вую диаграмму. Воспользовавшись закладкой Titles вы можете задать заголовок диаграммы, закладка Legend позволяет задать параметры отображения легенды диаграммы (списка обозначений) или вообще убрать ее с экрана, закладка Panel определяет вид панели, на которой отображается диаграмма, закладка 3D дает вам возможность изменить внешний вид вашей диаграммы: наклон, сдвиг, толщину и т.д.

Когда вы работаете с Редактором Диаграмм и выбрали тип диаграммы, в ком­понентах Chart на вашей форме отображается ее вид с занесенными в нее условны­ми данными. Поэтому вы сразу можете наблюдать результат приме­нения различных опций к вашему приложению, что очень удобно.

Страница Series, также имеющая ряд закладок, дает вам возможность выбрать дополнительные характеристики отображения серии. В частности, для круговой диаграммы на закладке Format полезно включить опцию Circled Pie, которая обес­печит при любом размере компонента Chart отображение диаграммы в виде круга. На закладке Marks кнопки группы Style определяют, что будет написано на ярлыч­ках, относящихся к отдельным сегментам диаграммы: Value - значение, Percent - проценты, Label - названия данных и т.д.

Вы можете, если хотите, добавить на этот компонент Chart еще одну тождест­венную серию, нажав на закладке Series страницы Chart кнопку Clone, а затем для этой новой серии нажать кнопку Change (изменить) и выбрать другой тип диаграм­мы, например Bar.

Выйдите из Редактора Диаграмм, выделите в вашем приложении нижний компонент Chart и повторите для него задание свойств с помощью Редактора Диа­грамм. В данном случае вам надо будет задать две серии, если хотите отображать на графике две кривые, и выбрать тип диаграммы Line. Поскольку речь идет о гра­фиках, вы можете воспользоваться закладками Axis и Walls для задания координат­ных характеристик осей и трехмерных граней графика.

На этом проектирование внешнего вида приложения завершается. Осталось написать код, задающий данные, которые вы хотите отображать. Для тестового приложения давайте зададим в круговой диаграмме просто некоторые констант­ные данные, а в графиках - некоторые функции.

Для задания отображаемых значений надо использовать методы серий Series. Остановимся только на трех основных методах.

Метод Clear очищает серию от занесенных ранее данных.

Метод Add:

Add(Const AValue:Double; Const ALabel:String; AColor:TColor) ,

позволяет добавить в диаграмму новую точку. Параметр AValue соответствует до­бавляемому значению, параметр ALabel - метка, которая будет отображаться на диаграмме и в легенде, AColor - цвет. Параметр ALabel - не обязательный, его можно задать пустым: ‘ ’. Метод AddXY:

AddXY(Const AXValue, AYValue: Double; Const ALabel: String; AColor: TColor)

позволяет добавить новую точку в график функции. Параметры AXValue и AYVa­lue соответствуют аргументу и функции. Параметры ALabel и AColor те же, что и в методе Add.

Таким образом, процедура, обеспечивающая загрузку данных в нашем приме­ре, может иметь вид:

const Al=155; A2=251; A3=203; A4=404; var i:word; begin

With Seriesl do begin

Add(Al,"Цех l",clYellow);

Add(A2,"Цех 2",clBlue);

Add(A3,"Цех 3",clRed);

Add(A4,"Цех 4",clPurple); end;

Series2.Clear; SeriesS.Clear; for i:=0 to 100 do begin

Series2.AddXY(0.02*Pi*i,sin(0.02*Pi*i)

SeriesS.AddXY(0.02*Pi*i,cos(0.02*Pi*i) end;

ClRed); ,clBlue);

Операторы Clear нужны, если в процессе работы приложения вы собираетесь обновлять данные.

На этом мы закончим знакомство с компонентом Chart. Правда, мы рассмот­рели только малую часть его возможностей.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то