Пример программы на Delphi

Порядок создания приложения:

1. Запускаем Delphi. (См. раздел " Начало работы").

2. Создаем на сервере папку для размещения нового приложения.

3. Сохраняем наш проект в этой папке. (См. раздел "Сохранение проекта").

4. Изменяем форму нашего нового приложения.

Требуемый вид формы показан на рис. 2. На форме не размещены никакие дополнительные компоненты, а только изменены сами свойства формы в соответствии с таблицей 15.

  Таблица 15
Свойство Значение
Caption График функции
ClientHight  
ClientWidth  
Color clWhite
Hight  
Width  

Свойства изменяются в окне Инспектор объектов на вкладке Свойства. Расшифровка свойств: дана в таблице 16.

5. Определяем для объекта Form1 реакцию на два события: OnPaint и OnResize.

Для этого переходим в окне Инспектор объектов на вкладку События, находим в списке событий события OnPaint и OnResize, и дважды щелкаем мышкой напротив каждого из них. Среда программирования Delphi в этом случае автоматически добавит к описанию объекта TForm1 (дочернему экземпляру класса Tform) в Окне кода две заготовки для методов:

procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

Событие OnPaint перерисовывает изображение окна приложения. Наступает, когда приходит сообщение Windows о необходимости перерисовать испорченное изображение. Изображение может испортиться из-за временного перекрытия данного окна другим окном того же или постороннего приложения.

Событие OnResize наступает перед изменением размера компонента. В обработчике можно задать новое значение ширины (NewWidth), высоты (NewHeight) и можно отказаться от изменения размеров (Resize = False).

  Таблица 16
Свойство Пояснение
Caption Определяет строку текста, которая будет отображаться в заголовке окна приложения.
ClientHight Задает высоту области окна приложения в пикселях, в которую будет выводиться график.
ClientWidth Горизонтальный размер в пикселях области окна приложения, в которую будет выводиться график.
Color Цвет фона окна приложения.
Hight Определяет высоту формы в пикселях.
Width Определяет горизонтальный размер формы в пикселях.

В итоге в окне кода получаем следующую заготовку для модуля формы (Листинг 4):

Листинг 4. Заготовка главного модуля программы построения графика функции.

unit Unit1;

interface

uses

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

Dialogs;

type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedureTForm1.FormPaint(Sender: TObject);

begin

end;

procedure TForm1.FormResize(Sender: TObject);

begin

end;

end.

6. Дополняем программу (Листинг 4) описанием функции f(x), график которой нужно построить, описанием процедуры построения графика GrOfFunc. Наполняем операторами заготовки методов обработки событий OnPaint и OnResize, и получаем полный текст модуля программы построения графика (Листинг 5).

Листинг 5. Полный текст главного модуля программы построения графика функции.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

// Функция, график которой надо построить

Function f(x:real):real;

begin

f:=2*Sin(x)*exp(x/5);

end;

// Процедура, которая строит график функции

procedure GrOfFunc;

var

x1,x2:real; // границы изменения аргумента функции

y1,y2:real; // границы изменения значения функции

x:real; // аргумент функции

y:real; // значение функции в точке x

dx:real; // приращение аргумента

l,b:integer; // левый нижний угол области вывода графика

w,h:integer; // ширина и высота области вывода графика

mx,my:real; // масштаб по осям X и Y

x0,y0:integer; // точка - начало координат

begin

// область вывода графика

l:=10; // X - координата левого верхнего угла

b:=Form1.ClientHeight-20; //Y - координата левого верхнего угла

h:=Form1.ClientHeight-40; // высота

w:=Form1.Width-40; // ширина

x1:=0; // нижняя граница диапазона аргумента

x2:=25; // верхняя граница диапазона аргумента

dx:=0.01; // шаг аргумента

// найдем максимальное и минимальное значения

// функции на отрезке [x1,x2]

y1:=f(x1); // минимум

y2:=f(x1); // максимум

x:=x1;

repeat

y:= f(x);

if y < y1 then y1:=y;

if y > y2 then y2:=y;

x:=x+dx;

until (x>=x2);

// вычислим масштаб

my:=h/abs(y2-y1); // масштаб по оси Y

mx:=w/abs(x2-x1); // масштаб по оси X

// оси

x0:=l;

y0:=b-Abs(Round(y1*my));

with Form1.Canvas do

begin

// оси

MoveTo(l,b);LineTo(l,b-h);

MoveTo(x0,y0);LineTo(x0+w,y0);

TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));

TextOut(l+5,b,FloatToStrF(y1,ffGeneral,6,3));

// построение графика

x:=x1;

repeat

y:=f(x);

Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;

x:=x+dx;

until (x>=x2);

end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

GrOfFunc;

end;

// изменился размер окна программы

procedure TForm1.FormResize(Sender: TObject);

begin

// очистить форму

Form1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));

// построить график

GrOfFunc;

end;

end.

В процедуре построения графика функции GrOfFunc использованы стандартные методы поверхности формы Form1 (свойства Canvas).

Метод

Form1.Canvas.MoveTo(..)

изменяет текущую позицию курсора на заданную точкой (X, Y), ничего не рисуя при этом.

Метод

Form1.Canvas.LineTo(..)

рисует на поверхности формы Form1 (на канве) прямую линию, начинающуюся с текущей позиции курсора и кончающуюся точкой (X, Y), исключая саму точку (X, Y). Текущая позиция курсора перемещается в точку (X, Y).

Функция

Form1.Canvas.TextOut(..)

пишет строку текста на поверхности формы Form1 (на канве), начиная с позиции с координатами (X, Y). Надпись делается в соответствии с текущими установками шрифта Font. Фон надписи определяется установками текущей кисти (свойство Brush). Текущая позиция курсора перемещается к концу выведенного текста.

Метод

Form1.Canvas.FillRect(..) заполняет прямоугольник канвы, указанный параметром Rect, используя текущее значение свойства Brush. Заполняемая область включает верхнюю и левую стороны прямоугольника, но не включает правую и нижнюю стороны.

Кроме того, использована стандартная функция

FloatToStrF(Value:Extended;Format:TFloatFormat;Precision,Digits:Integer):String;

которая преобразует Value в строку, используя формат Format с точностью Precision и числом цифр Digits.

Свойство канвы Pixels(..) определяет цвет пикселя канвы с координатами X и Y в пределах текущей области. Задание значений пикселей позволяет рисовать по пикселям графики и линии.

7. Запускаем программу на выполнение. (См. раздел "Запуск программы").

8. Если при запуске программы возникли ошибки, выполняем отладку программы. (См. раздел "Отладка программы").

На рис. 3 приведен вид окна приложения работающей программы.

Задания по курсу


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




Подборка статей по вашей теме: