Inc(days_count);
{...и строим линию от значения в предыдущий день до значения в тек. день}
Canvas.LineTo(Canvas.PenPos.X+PixelStep,
(Height div 2) - CalculatePoints(DCalc.DateTime + days_count,
DBirth.DateTime,btPhys));
end; {end while}
{Психологический}
{...устанавливаем цвет в соответствии с выбранным}
Canvas.Pen.Color := clbPsy.Selected;
{...сколько дней брать до даты расчета}
days_count := -7;
{...устанавливаем начальную точку графика на значение биоритма в этот день}
Canvas.MoveTo(0,
(Height div 2) - CalculatePoints(DCalc.DateTime + days_count,
DBirth.DateTime,btPsy));
{...пока не нарисовали последнюю точку на графике}
while (Canvas.PenPos.X < Width) do begin
{...берем следующий день}
Inc(days_count);
{...и строим линию от значения в предыдущий день до значения в тек. день}
Canvas.LineTo(Canvas.PenPos.X+PixelStep,
(Height div 2) - CalculatePoints(DCalc.DateTime + days_count,
DBirth.DateTime,btPsy));
end; {end while}
{Интеллектуальный}
{...устанавливаем цвет в соответствии с выбранным}
Canvas.Pen.Color := clbInt.Selected;
{...сколько дней брать до даты расчета}
days_count := -7;
{...устанавливаем начальную точку графика на значение биоритма в этот день}
Canvas.MoveTo(0,
(Height div 2) - CalculatePoints(DCalc.DateTime + days_count,
DBirth.DateTime,btInt));
{...пока не нарисовали последнюю точку на графике}
while (Canvas.PenPos.X < Width) do begin
{...берем следующий день}
inc(days_count);
{...и строим линию от значения в предыдущий день до значения в тек. день}
Canvas.LineTo(Canvas.PenPos.X+PixelStep,
(Height div 2) - CalculatePoints(DCalc.DateTime + days_count,
DBirth.DateTime,btInt));
end; {end while}
end;{with aBitmap}
end;
{*******************************************************************************
Процедура DrawAxis
Назначение: Процедура рисования осей и градуировки шкалы.
Параметры:
1. aBitmap - "холст", на котором строятся графики
2. PixelStep - расстояние между соседними днями по оси календаря.
Это значение так же используется для ообозначения процентного уровня.
*******************************************************************************}
procedure TfrmMain.DrawAxis(aBitmap: TBitmap; PixelStep : integer);
var Days : integer;
svFont : TFont;
svPos : TPoint;
DayName : string;
begin
with aBitmap do begin
{Сохраняем параметры шрифта}
svFont := Canvas.Font;
{Рисуем координатную сетку)
{... вертикальные линии}
Canvas.MoveTo(0,0);
{... используем прерывистую линию}
Canvas.Pen.Style := psDot;
{... в качестве цвета, выбираем серый}
Canvas.Pen.Color := clMedGray;
{... и рисуем слева на право с шагом PixelStep}
while (Canvas.PenPos.X < Width) do begin
{... устанавливем начальную точку линии}
Canvas.MoveTo(Canvas.PenPos.X + PixelStep, PixelStep);
{... и рисуем саму линию}
Canvas.LineTo(Canvas.PenPos.X, Height - PixelStep);
end; {end while}
{... а теперь - горизонтальные линии}
Canvas.MoveTo(0,0);
{... и рисуем сверху вниз с шагом PixelStep}
while (Canvas.PenPos.Y < Width) do begin
{... устанавливем начальную точку линии}
Canvas.MoveTo(2,Canvas.PenPos.Y + PixelStep);
{... и рисуем саму линию}
Canvas.LineTo(Width - 2, Canvas.PenPos.Y);
end; {end while}
{Рисуем горизонтальную ось...}
{... выбираем сплошную линию}
Canvas.Pen.Style := psSolid;
{... устанавливаем черный цвет}
Canvas.Pen.Color := clBlack;
{... устанавливем начальную точку линии}
Canvas.MoveTo(0, Height div 2);
{... и рисуем саму линию}
Canvas.LineTo(Width, Height div 2);
{Рисуем вертикальную ось...}
{... устанавливем начальную точку линии}
Canvas.MoveTo(Width div 2, PixelStep);
{... и рисуем саму линию}
Canvas.LineTo(Width div 2, Height-PixelStep);
{--------------------------------------------------------------------------}
{Подписываем оси...}
Days := -7;
{... сначала - горизонтальную...}
Canvas.MoveTo(0,Height div 2);
{... устанавливаем черный цвет}
Canvas.Pen.Color := clBlack;
{... мелким шрифтом}
Canvas.Font.Size := 7;
while (Canvas.PenPos.X < Width) do begin
svPos := Canvas.PenPos;
{... сначала выводим число (дату)}
Canvas.TextOut(Canvas.PenPos.X +2, Canvas.PenPos.Y - 11,
IntToStr(DayOfTheMonth(DCalc.DateTime + Days)));
Canvas.MoveTo(svPos.X, svPos.Y);
{... а теперь название дня недели}
case DayOfTheWeek(DCalc.DateTime + Days) of
DayMonday : DayName := 'пн';
DayTuesday : DayName := 'вт';
DayWednesday : DayName := 'ср';
DayThursday : DayName := 'чт';
DayFriday : DayName := 'пт';
DaySaturday : DayName := 'сб';
DaySunday : DayName := 'вс';
else
{...а вдруг кто-то/что-то сглючило :)}
DayName := 'Ошибка.'
end;
{... выводим название дня недели на рисунке}
Canvas.TextOut(Canvas.PenPos.X +2, Canvas.PenPos.Y + 1, DayName);
Canvas.MoveTo(svPos.X + PixelStep, Height div 2);