Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы П2 а,б,в. docx.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
6.25 Mб
Скачать
  1. Создать Form2 и Form3 для пункта «Помощь» с данными об авторе и о программе.

  2. Создать контекстное меню(PopupMenu1) для Memo1 с пунктами:

  1. Задание 2: загрузить данные из файла и найти самого высокого мужчину, средний рост, женщину с наиболее близким к среднему рост.

Файл содержит следующую информацию

Лабораторная работа №26 Создание текстового файла, ввод и вывод данных

1)

  1. Удалить, добавить и редактировать данные из файла, причем Memo использовать только для визуализации, а все действия производить над файлом.

Лабораторная работа №27 Создание типизированного файла, ввод и вывод данных

Пример программы с числовым файлом.

Задача. Организовать файл целых чисел из 10 компонент. Определить и вывести на экран среднее арифметическое компонент файла. Вывести содержимое файла на экран.

Интерфейс.

  1. Типизированный файл (запись и вывод) сделать свои данные по записи. Например товар: код (Edit + UpDown с min – 1 до max-1000 (или используйте SpinEdit (страница Samples)), наименование, поставщик (выбор из списка ComboBox), цена (MaskEdit ввод только цифр 4-х значных), наценка (5, 10 или 20 % в компоненте RadioGroup), стоимость (цена * на наценку в Edit – не редактируемая - Readonly), дата поставки (DateTimePicker – по умолчанию сегодняшняя дата), брак или нет (Checkbox),

Лабораторная работа №28 Создание инструментальных панелей

Компонент RichEdit работает с текстом в обогащенном формате RTF. При желании изменить атрибуты вновь вводимого фрагмента текста вы можете задать свойство SelAttributes. Это свойство типа TTextAttributes, которое в свою очередь имеет подсвойства: Color (цвет), Name (имя шрифта), Size (размер), Style (стиль) и ряд других. Например, введите на форму компонент RichEdit, диалог выбора шрифта FontDialog (см. раздел 8.4) и кнопку Button, которая позволит пользователю менять атрибуты текста. В обработчик щелчка кнопки можно было бы ввести текст:

if FontDialog1.Execute then

with RichEdit1.SelAttributes do

begin

Color:=FontDialog1.Font.Color;

Name:=FontDialog1.Font.Name;

Size:=FontDialog1.Font.Size;

Style:=FontDialog1.Font.Style;

end;

RichEdit1.SetFocus;

В приведенном коде присваивается поочередно значение каждого свойства. Но этот текст можно кардинально сократить, воспользовавшись тем, что объекты SelAttributes и Font совместимы по типу. Поэтому можно присвоить сразу все свойства одного объекта другому:

if FontDialog1.Execute then

RichEdit1.SelAttributes.Assign(FontDialog1.Font);

RichEdit1.SetFocus;

Запустите приложение и увидите, что вы можете менять атрибуты текста, выполняя отдельные фрагменты различными шрифтами, размерами, цветами, стилями. Устанавливаемые атрибуты влияют на выделенный текст или, если ничего не выделено, то на атрибуты нового текста, вводимого начиная с текущей позиции курсора (позиция курсора определяется свойством SelStart).

В компоненте имеется также свойство DefAttributes, содержащее атрибуты по умолчанию. Эти атрибуты действуют до того момента, когда изменяются атрибуты в свойстве SelAttributes.

Но значения атрибутов в DefAttributes сохраняются и в любой момент эти значения могут быть методом Assign присвоены атрибутам свойства SelAttributes, чтобы вернуться к прежнему стилю.

Свойство DefAttributes доступно только во время выполнения. Поэтому его атрибуты при необходимости можно задавать, например, в обработчике события OnCreate.

За выравнивание, отступы и т.д. в пределах текущего абзаца отвечает свойство Paragraph типа TParaAttributes. Этот тип в свою очередь имеет ряд свойств:

Alignment

Определяет выравнивание текста. Может принимать значения taLeftJustify (влево), taCenter (по центру) или taRightJustify (вправо).

FirstIndent

Число пикселей отступа красной строки.

Numbering

Управляет вставкой маркеров, как в списках. Может принимать значения nsNone — отсутствие маркеров, nsBullet — маркеры ставятся.

LeftIndent

Отступ в пикселях от левого поля.

RightIndent

Отступ в пикселях от правого поля.

TabCount

Количество позиций табуляции.

Tab

Значения позиций табуляции в пикселях.

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

RichEdit1.Paragraph.Alignment:=taLeftJustify; // Влево

RichEdit1.Paragraph.Alignment:=taCenter; // По центру

RichEdit1.Paragraph.Alignment:=taRightJustify;// Вправо

Следующий оператор приведет к тому, что текущий абзац будет отображаться как список, т.е. с маркерами:

RichEdit1.Paragraph.Numbering:=nsBullet;

Уничтожение списка в текущем абзаце осуществляется оператором

RichEdit1.Paragraph.Numbering:=nsNone;

В целом, если с помощью компонента ActionList (см. раздел 9.2) определено некоторое действие ввода и уничтожения списка, названное ABullet, то операторы обработки соответствующего действия могут иметь вид:

if (ABullet.Checked) then

RichEdit1.Paragraph.Numbering:=nsNone

else RichEdit1.Paragraph.Numbering :=nsBullet;

ABullet.Checked:=not ABullet.Checked;

Они обеспечивают переключение соответствующей быстрой кнопки и раздела меню из нажатого состояния (отмеченного) в ненажатое с соответствующим изменением вида текущего абзаца.

Свойства TabCount и Tab имеют смысл при вводе текста только при значении свойства компонента WantTabs = true. Это свойство разрешает пользователю вводить в текст символ табуляции. Если WantTabs = false, то нажатие пользователем клавиши табуляции просто переключит фокус на очередной компонент и символ табуляции в текст не введется.

Мы рассмотрели основные отличия Memo и RichEdit. Теперь остановимся на общих свойствах этих окон редактирования.

Свойства Alignment и WordWrap имеют тот же смысл, что, например, в метках, и определяют выравнивание текста и допустимость переноса длинных строк. Установка свойства ReadOnly в true задает текст только для чтения. Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. Свойства WantReturns и WantTab определяют допустимость ввода пользователем в текст символов перевода строки и табуляции.

Свойство ScrollBars определяет наличие полос прокрутка текста в окне. По умолчанию ScrollBars = ssNone, что означает их отсутствие. Пользователь может в этом случае перемещаться по тексту только с помощью курсора. Можно задать свойству ScrollBars значения ssHorizontal, ssVertical или ssBoth, что будет соответственно означать наличие горизонтальной, вертикальной или обеих полос прокрутки.

В качестве примера на рис. 3.8 приведен пример текстового редактора, использующего описанные выше свойства компонента RichEdit. Текст в окне редактора частично поясняет атрибуты шрифта, использованные при его написании.

Рис. 3.8 Пример редактора на основе компонента RichEdit

Лабораторная работа №29 Создание графика с помощью компонента Chart. Рисование на холсте Canvas

 Свойство Canvas

 Поверхности, на которую программа может выводить графику, соответствует свойство Canvas. Например, свойство Canvas имеют компоненты Form и PaintBox. В свою очередь, свойство canvas – это объект типа TCanvas. Методы этого типа обеспечивают вывод графических примитивов (точек, линий, окружностей, прямоугольников и т. д.), а свойства позволяют задать характеристики выводимых графических примитивов: цвет, толщину и стиль линий; цвет и вид заполнения областей; характеристики шрифта при выводе текстовой информации.

 

Методы вывода графических примитивов рассматривают свойство Canvas как некоторый абстрактный холст, на котором они могут рисовать (canvas переводится как "поверхность", "холст для рисования"). Канва состоит из отдельных точек – пикселей. Положение пикселя характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксель имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо. Значения координат правой нижней точки холста зависят от размера холста.

 

Размер канвы можно получить, обратившись к свойствам Height и Width области иллюстрации (image) или к свойствам формы: ClientHeight и Clientwidth.

 

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

 

Наименование

Рисование

Arc

Дуги

Chard

Хорды эллипса

Ellipse

Эллипса

FillRect

Заполненного прямоугольника

FrameRect

Незаполненного прямоугольника

MoveTo

Перемещение пера без прорисовки линии

LineTo

Линии

Poligon

Заполненного многоугольника

PolyLine

Незаполненного многоугольника

Rectangle

Заполненного прямоугольника

RoundRect

Заполненного прямоугольника со скруглёнными краями

 

 

Вид выводимых на канву графических элементов определяется свойствами канвы Pen (карандаш) и Brush (кисть). Свойство Pen отвечает за внешний вид вычерчиваемых линий и контуров, свойство Brush – за заливку областей, ограниченных контурами.

 

На канву можно также загрузить изображение из файла либо вывести на неё текст.

 

Канва имеет свойство Pixels. Это свойство представляет собой двумерный массив, который отвечает за цвета канвы. Например, Canvas.Pixels[10,20] соответствует цвету пикселя, 10-го слева и 20-го сверху. С массивом пикселей можно обращаться как с любым свойством: изменять цвет, задавая пикселю новое значение, или определять его цвет по хранящемуся в нем значению. Например, Canvas.Pixels[10,20] := 0 или Canvas.Pixels[10,20] := clBlack – это задание пикселю черного цвета.

Свойство Pixels можно использовать для рисования на канве.

Pen (карандаш)

 

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

 

Свойство

Назначение

Color

Цвет линии

Width

Толщину линии

Style

Вид линии

Mode

Режим отображения

 

Свойство Color задает цвет линии, вычерчиваемой карандашом. Существуют именованные константы, которые можно использовать в качестве значения свойства Color. Эти константы перечислены в следующей таблице:

 

Константа

Цвет

Константа

Цвет

clBlack

Черный

clSilver

Серебристый

clMaroon

Каштановый

clRed

Красный

clGreen

Зеленый

clLime

Салатный

clOlive

Оливковый

clBlue

Синий

clNavy

Темно-синий

clFuchsia

Ярко-розовый

clPurple

Розовый

clAqua

Бирюзовый

clTeal

Зелено-голубой

clWhite

Белый

clGray

Серый

 

 

 

Свойство Width задает толщину линии (в пикселях). Например, инструкция

Canvas. Pen. Width: =2 устанавливает толщину линии в 2 пикселя.

 

Свойство Style определяет вид (стиль) линии, которая может быть непрерывной или прерывистой, состоящей из штрихов различной длины. Толщина пунктирной линии не может быть больше 1. Если значение свойства Pen.Width больше единицы, то пунктирная линия будет выведена как сплошная. В следующей таблице перечислены именованные константы, позволяющие задать стиль линии:

 

Константа

Вид линии

psSolid

Сплошная линия

psDash

Пунктирная линия, длинные штрихи

psDot

Пунктирная линия, короткие штрихи

psDashDot

Пунктирная линия, чередование длинного и короткого штрихов

psDashDotDot

Пунктирная линия, чередование одного длинного и двух коротких штрихов

psClear

Линия не отображается (используется, если не надо изображать границу области, например, прямоугольника)

 

Свойство Mode определяет, как будет формироваться цвет точек линии в зависимости от цвета точек холста, через которые эта линия прочерчивается. По умолчанию вся линия вычерчивается цветом, определяемым значением свойства Pen.Color.

Однако программист может задать инверсный цвет линии по отношению к цвету фона. Это гарантирует, что независимо от цвета фона все участки линии будут видны, даже в том случае, если цвет линии и цвет фона совпадают.

В следующей таблице перечислены некоторые константы, которые можно использовать в качестве значения свойства Pen.Mode:

 

Константа

Цвет линии

pmBlack

Черный, не зависит от значения свойства Pen. Color

pmWhite

Белый, не зависит от значения свойства Pen. Color

pmCopy

Цвет линии определяется значением свойства Pen. Color

pmNotCopy

Цвет линии является инверсным по отношению к значению свойства Pen. Color

pmNot

Цвет точки линии определяется как инверсный по отношению к цвету точки холста, в которую выводится точка линии

 Brush (кисть)

 

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

 

Свойство

Назначение

Color

Цвет закрашивания замкнутой области

Style

Стиль (тип) заполнения области

 

Область внутри контура может быть закрашена или заштрихована. В первом случае область полностью перекрывает фон, а во втором - сквозь незаштрихованные участки области будет виден фон.

В качестве значения свойства Color можно использовать некоторые именованные константы, перечисленные в следующей таблице:

 

Константа

Тип заполнения (заливки) области

bsSolid

Сплошная заливка

bsClear

Область не закрашивается

bsHorizontal

Горизонтальная штриховка

bsVertical

Вертикальная штриховка

bsFDiagonal

Диагональная штриховка с наклоном линий вперед

bsBDiagonal

Диагональная штриховка с наклоном линий назад

bsCross

Горизонтально-вертикальная штриховка, в клетку

bsDiagCross

Диагональная штриховка, в клетку

 

Вывод текста

 

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

 

Объект.Canvas.TextOut(x, у, Текст)

 

где:

        объект – имя объекта, на поверхность которого выводится текст;

        х, у – координаты точки графической поверхности, от которой выполняется вывод текста (рис. 10.3);

        текст – переменная или константа символьного типа, значение которой определяет выводимый методом текст.

 

Шрифт, который используется для вывода текста, определяется значением свойства Font соответствующего объекта Сanvas. Свойство Font представляет собой объект типа TFont. В следующей таблице перечислены свойства, позволяющие задать характеристики шрифта, используемого методами TextOut и TextRect для вывода текста:

 

Свойство

Назначение

Name

Используемый шрифт. В качестве значения следует использовать название шрифта, например Arial

Size

Размер шрифта в пунктах (points). Пункт – это единица измерения размера шрифта, используемая в полиграфии. Один пункт равен 1/72 дюйма

Style

Стиль начертания символов. Может быть: нормальным, полужирным, курсивным, подчеркнутым, перечеркнутым. Стиль задается при помощи следующих констант: fsBold (полужирный), fsltalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый).

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

Объект. Canvas . Font : = [fsBold, fs Italic]

Color

Цвет символов. В качестве значения можно использовать именованную константу

 

Область вывода текста закрашивается текущим цветом кисти. Поэтому перед выводом текста свойству Brush.Color нужно присвоить значение bsClear или задать цвет кисти, совпадающий с цветом поверхности, на которую выводится текст.

Компонент Chart

 

Компонент Chart позволяет строить различные диаграммы и графики.

 

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

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

 

 

Редактор состоит из двух вкладок: Chart и Series, каждая из которых также обладает некоторым набором вкладок со средствами для установки параметров компонента Chart.

 

Назначение некоторых вкладок страницы Chart редактора диаграмм:

 

Название вкладки

Назначение

Series

управление сериями кривых

General

основные параметры, в том числе Zoom, позволяет во время выполнения приложения изменить масштаб фрагмента кривой

Axis

настройка осей графика

Title

текст над и под рисунком, в том числе их шрифт, бордюр и фон

Legend

вывод легенды кривых, в том числе состав и место вывода легенды

Panel

настройка панели для вывода кривых, в том числе параметры рамки и цвет фона панели

Walls

настройка «стен» – плоскостей вдоль осей

3D

настройка трёхмерного изображения диаграммы

 

Назначение кнопок вкладки Series, принадлежащей вкладке Chart

 

Название вкладки

Назначение

Add

добавить серию в компонент

Delete

удалить выбранную серию

Title

установить наименование серии (вместо Series i, заданного по умолчанию)

Clone

дополнить компонент серией, идентичной выбранной серии

Change

Изменить тип вывода серии

 

Для выбора нового типа (кнопка Add) и изменения типа имеющейся серии (кнопка Change) вызывается окно TeeChart Gallery. Оно содержит пиктограммы образцов кривых различных типов. Вид страницы редактора с галереей типов кривых представлен на следующем рисунке:

 

 

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

 

На следующем рисунке представлен вид вкладки Series для кривой типа Line (лентами):

 

 

Для задания отображаемых значений надо использовать методы серий 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.

Пример 1. Рисование на канве

 

В данном примере представлено приложение, которое рисует по пикселям график синусоиды на канве формы.

Измените ширину и высоту формы будущего приложения примерно так, как это показано на рисунках ниже.

 

Способ 1

Для рисования будем использовать свойство канвы Pixels.

В окне Object Inspector на вкладке Events выберите событие OnPaint и сделайте двойной щелчок в строке напротив этого события. Перед вами появится окно редактора кода с заготовкой процедуры для обработки события OnPaint. Разместите следующий код в теле процедуры:

 

procedure TForm1.FormPaint(Sender: TObject);

 var

  X,Y: real;      //  координаты функции

  PX,PY: longint; //  координаты пикселей

begin

 Color := clWhite;

 for PX := 0 to ClientWidth do

  begin

   {X – аргумент графика, соответствующий пикселю с координатой РХ}

   X := PX*4*Pi/ClientWidth;

   Y:=Sin(X);

   {PY – координата пикселя, соответствующая координате Y}

   PY:=trunc(ClientHeight - (Y+1)*ClientHeight/2);

   {Устанавливается черный цвет выбранного пикселя (0 яркости)}

   Canvas.Pixels [PX, PY] := 0;

  end;

end;

 

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

 

 

График получился нечётким, разбитым на отдельные точки – пиксели.

 

Способ 2

Теперь воспользуемся для рисования свойствами канвы Pen и LineTo. Cвойство Pen в свою очередь также обладает рядом свойств, о чём говорилось ранее.

Процедура обработки события должна иметь вид:

 

procedure TForm1.FormPaint(Sender: TObject);

var

 X,Y: real;

 PX,PY: longint;

begin

 Color:=clWhite;

 Canvas.Pen.Color:=clRed;

 Canvas.MoveTo(0,ClientHeight div 2);

 for PX:=0 to ClientWidth do

  begin

   X := PX*4*Pi/ClientWidth;

   Y := Sin(X);

   PY := trunc(ClientHeight - (Y+1)*ClientHeight/2);

   Canvas.LineTo(PX,PY);

  end;

end;

 

В данной процедуре для вычерчивания линии красного цвета было задано следующее свойство: Canvas.Pen.Color:=clRed, если эту строчку исключить из кода программы, то линия будет чёрной.

 

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

 

Пример 2. Геометрические фигуры. Типы заливок

 

В данном примере представлено приложение, демонстрирующее построение на канве различных геометрических фигур с применением к ним заливок, а также отображение текста на канве.

 

Вид приложения во время его выполнения:

 

 

Текст файла Unit1.pas

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs;

 

type

  TForm1 = class(TForm)

    procedure FormPaint(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

Для рисования фигур используем процедуру TForm1.FormPaint:

procedure TForm1.FormPaint(Sender: TObject);

begin

 Color:=clInfoBk; // устанавливаем цвет фона светло-жёлтым

 

Для каждой фигуры отдельно устанавливаются свойства "Кисть" и "Карандаш".

В данном фрагменте приводится метод для прорисовки многоугольника, причем количество вершин многоугольника определяется количеством точек в множестве Points

 Canvas.Brush.Style:=bsSolid;

 Canvas.Pen.Color:=clBlue;

 Canvas.Brush.Color:=clYellow;

 

 Canvas.Polygon([Point(40, 20), Point(48, 40),

 Point(70, 40), Point(52, 52),Point(60, 75),

 Point(40, 60), Point(20, 75),

 Point(28, 52), Point(10, 40),Point(32, 40)]);

 

 Canvas.Brush.Color:=clInfoBk;

 Canvas.TextOut( 90, 50,'Polygon' );

 

Аналогичным образом прорисовываются остальные фигуры:

 Canvas.Brush.Style:=bsCross;

 Canvas.Pen.Color:= clTeal;

 Canvas.Brush.Color := clRed;

 Canvas.Ellipse(10, 95, 65, 150); // эллипс

 

 Canvas.TextOut( 90, 115,'Ellipse' );

 

 Canvas.Pen.Color := clPurple;

 Canvas.MoveTo( 180, 20 );

 Canvas.LineTo( 200, 40 );

 Canvas.LineTo( 180, 60 );

 Canvas.LineTo( 240, 60 );

 Canvas.LineTo( 240, 75 );

 

 Canvas.TextOut( 260, 50,'LineTo' );

 

 Canvas.Pen.Color := clMaroon;

 Canvas.Brush.Color := clLime;

 Canvas.Brush.Style:=bsFDiagonal;

 Canvas.Rectangle(10, 170, 65, 225); // прямоугольник

 

 Canvas.TextOut( 90, 185,'Rectangle' );

 

 Canvas.Pen.Color := clTeal;

 Canvas.Brush.Color := clBtnFace;

 Canvas.Brush.Style:=bsDiagCross;

 Canvas.RoundRect(180, 95, 240, 150,20,20);

 

 Canvas.TextOut( 260, 115,'RoundRect' );

 

 Canvas.Brush.Style:=bsSolid;

 Canvas.Pen.Color:=clBlue;

 Canvas.Brush.Color:=clAqua;

 Canvas.Polygon([Point(180, 210), Point(230, 170), Point(240, 225)]);

 {многоугольник, в данном случае - треугольник}

 

 Canvas.Brush.Color:=clInfoBk;

 Canvas.TextOut( 260, 185,'Polygon' );

end;

 

end.

Пример 4. Построение графика с помощью компонента Chart

 

В данном примере представлено приложение, в котором осуществляется построение графика функции с помощью компонента Chart.

 

Компонент Chart находится на странице Additional. Поместите его на форму. Запустите редактор диаграмм и создайте одну кривую типа Fast Line. На вкладке Chart перейдите к вкладке 3D и снимите флажок с пункта 3 Dimension для того, чтобы убрать трёхмерное отображение графика. Перейдите к вкладке Legend и снимите флажок с пункта Visible. Перейдите к вкладке Titles и в текстовом поле наберите следующее: «парабола»

 

Перейдите к вкладке Series редактора диаграмм и на вкладке Format щёлкните по кнопке Border. Появится окно, в котором можно настроить цвет линии. После того как цвет выбран, нажмите кнопку OK для закрытия окна. Чтобы закрыть окно редактора диаграмм нажмите в нём кнопку Close. Все изменения, производимые в окне редактора диаграмм, отображаются сразу же на эскизе графика.

Вид приложения на этапе разработки представлен на следующем рисунке:

 

 

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

 

Текст файла Unit1.pas

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

 

type

  TForm1 = class(TForm)

    Chart1: TChart;

    Series1: TFastLineSeries;

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.FormCreate(Sender: TObject);

var

 i: integer;

begin

  begin

  Series1.Clear;

  for i:=(-30) to 30 do

  Series1.AddXY(i, i*i, '', clBlue);

  end;

end;

end.

 

Вид приложения во время его выполнения:

 

 

Пример 3. Метод базовой точки

 

Создадим приложение, демонстрирующее анимацию, основанную на методе базовой точки.

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls;

 

type

  TForm1 = class(TForm)

    Timer1: TTimer;

    procedure Timer1Timer(Sender: TObject);

    procedure FormActivate(Sender: TObject);

 

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  x, y: integer;

implementation

 

{$R *.dfm}

 

procedure Train(x,y: integer;   // координаты базовой точки

                  color: TColor); // цвет линий

const

  dx = 5;

  dy = 5;

var

  buf: TColor;

begin

  with form1.canvas do

  begin

    buf:=pen.Color;   // сохраним текущий цвет

    pen.Color:=color; // установим нужный цвет

    //  вагон

    Rectangle(x,y,x+16*dx,y+9*dy);

    Rectangle(x+dx,y+dy,x+5*dx,y+5*dy);

    Rectangle(x+6*dx,y+dy,x+10*dx,y+5*dy);

    Rectangle(x+6*dx,y+dy,x+10*dx,y+5*dy);

    Rectangle(x+11*dx,y+dy,x+15*dx,y+5*dy);

 

    //колёса вагона

    Ellipse(x+dx,y+7*dy,x+5*dx,y+11*dy);

    Ellipse(x+2*dx,y+8*dy,x+4*dx,y+10*dy);

    Ellipse(x+11*dx,y+7*dy,x+15*dx,y+11*dy);

    Ellipse(x+12*dx,y+8*dy,x+14*dx,y+10*dy);

    // кабина

    MoveTo(x+16*dx,y+6*dy);

    LineTo(x+18*dx,y+6*dy);

    MoveTo(x+16*dx,y+8*dy);

    LineTo(x+18*dx,y+8*dy);

 

    MoveTo(x+17*dx,y);

    LineTo(x+24*dx,y);

    arc(x+24*dx,y-dy,x+17*dx,y+2*dy,x+24*dx,y,x+17*dx,y);

    Rectangle(x+18*dx,y,x+23*dx,y+9*dy);

 

    Rectangle(x+19*dx,y+dy,x+22*dx,y+4*dy+1);

    Rectangle(x+19*dx,y+4*dy,x+22*dx,y+8*dy);

    Rectangle(x+23*dx-1,y+4*dy,x+36*dx,y+9*dy);

    // труба

    Rectangle(x+32*dx-1,y-dy,x+34*dx,y+4*dy+1);

    // колёса

    Ellipse(x+20*dx,y+7*dy,x+24*dx,y+11*dy);

    Ellipse(x+21*dx,y+8*dy,x+23*dx,y+10*dy);

 

    Ellipse(x+25*dx,y+7*dy,x+29*dx,y+11*dy);

    Ellipse(x+26*dx,y+8*dy,x+28*dx,y+10*dy);

 

    Ellipse(x+30*dx,y+7*dy,x+34*dx,y+11*dy);

    Ellipse(x+31*dx,y+8*dy,x+33*dx,y+10*dy);

 

    Polygon([Point(x+35*dx,y+8*dy), Point(x+36*dx,y+8*dy),

    Point(x+37*dx,y+10*dy), Point(x+35*dx,y+10*dy)]);

    pen.Color:=buf; // восстановим старый цвет карандаша

 

  end;

end;

 

// обработка сигнала таймера

procedure TForm1.Timer1Timer(Sender: TObject);

begin

   Train(x,y,form1.color); // стереть рисунок

   if x < Form1.ClientWidth

      then x := x+5

      else begin // новый рейс

        x := 0;

        y := Random(50) + 100;

      end;

   Train(x,y,clMaroon);     // нарисовать в новой точке

end;

 

procedure TForm1.FormActivate(Sender: TObject);

begin

     x:=0;

     y:=50;

     Form1.Color:=clInfoBk;

     Timer1.Interval := 50; // сигнал таймера каждые 50 мСек

      flower(10,10,clRed);

 

end;

end.

 

Вид приложения во время его выполнения: