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

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

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

После ввода данных необходимо сразу же сформировать два массива введенных координат X и Y, отсортировать их по оси X, после чего необходимо перерисовать окно с графиком.

Замечание

При необходимости перерисовки компонента в ответ на какое-то событие, например нажатие кнопки, сразу нерисуйте, а вызовите метод Invalidate и создайте обработчик события OnPaint визуального компонента, например формы или TPaintBox.

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

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

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

Для изображения произвольной графики в Delphi обычно используется компонент TPaintBox, находящийся на закладке System палитры компонентов. Этот компонент имеет событие OnPair.t, для которого мы и должны создать обработчик для рисования графика.

Для рисования произвольных изображений в Delphi используется класс TCanvas. В табл. 11-14 приведено краткое описание свойств и методов объектов для рисования графики.

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

Теперь рассмотрим вопрос автоматического изменения положения и размеров визуальных компонентов при изменении формы. Для этого у компонентов имеются такие свойства, как Align и Anchors. Собственно, свойство Align является подмножеством возможностей свойства Anchors. Свойство Anchors имеет 4 логических подсвойства: akLefn, akTop, akRight, akBotton Например, если свойство akRight установлено в True, то правая сторона элемента будет находиться на одинаковом расстоянии от правой стороны содержащей его формы при изменении пользователем ее размера, иначе правая сторона элемента будет находиться на одинаковом расстоянии от левой стороны. При изменении свойства Align на самом деле изменяется свойство Anchors, которое впоследствии и учитывается при изменении размеров.

Таблица 11. Основные свойства объектов типа tcanvas
Свойство Тип Комментарий
Brush TBrush Параметры заливки сплошных областей
Pen TPen Параметры отображения линий
Font TFont Параметры отображения текстовых надписей
Pixels[X,Y] TColor Цвет точки с координатами (X,Y)
Таблица 12. Основные методы объектов типа tcanvas
Метод Комментарий
Ellipse(Xl,Yl,X2,Y2) Изображает эллипс, вписанный в прямоугольник с заданными координатами
LineTo(X,Y) Рисует линию из текущей позиции в новую точку
MoveTo(X,Y) Устанавливает текущую позицию
Polyline:(array of:TPoint) Рисует полилинию по набору точек
Polygon (array of ТPoint) Рисует полигон по набору точек
Rectangle(X1,Y1,X2,Y2} Рисует прямоугольник по координатам двух противоположных углов
TextOut{X,Y,Text) Выводит текст в заданной позиции
Таблица 13. Основные свойства объектов типа TBrush.
Свойство Тип Комментарий
Color TColor Цвет заливки
Style TBrushStyle Стиль заливки (bsSolid - сплошная, bsCiear -нет, bsHorizontal — горизонтальные линии, bsVertical - вертикальные)
Таблица 14. Основные свойства объектов типа ТРеn.
Свойство Тип Комментарий
Color TColor Цвет линий
Style TPenStyle Стиль линий (psSolid - сплошная, psDash - штрих, psDot - точки, psDashDot - штрих-пунктир, psDashDotDot - штрих-штрих-пунктир, psClear - нет линии)
Width Integer Ширина сплошной линии
Таблица 15. Основные свойства объектов типа TFont.
Свойство Тип Комментарий
Color TColor Цвет шрифта
Name String Имя шрифта
Size Integer Размер шрифта
Style TFontStyles Стили шрифта: жирность, наклон, подчеркивание, зачеркивание

Замечание

По возможности делайте любое окно растягиваемым, но при этом не забывайте отслеживать, чтобы внутренности окна изменялись при изменении его размеров. Для этого используйте свойства Аlign и Anchors.

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

На рис. 20 приведен внешний вид запущенного приложения после того, как окно растянуто. В листинге 13 приведен текст файла модуля.

Листинг 13. Текст главного модуля Charts.pas

unit Charts;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: