// відлік вести від мінімального значення
y = y0 - (ClientHeight - 90) * (data[i] - data[min])/(data[max] - data[min]) - 10;
// малюємо квадрат (точку на графіку)
// розміром 4 пікеля
Canvas->Rectangle(x-2,y-2,x+2,y+2);
// якщо не перша точка
if (i != 0)
Canvas->LineTo(x,y); // малюємо лінію між точками
// підпис даних
if ( ( i == 0) || (data[i] != data[i-1]))
{
AnsiString st; // допоміжна змінна
// приводимо значення точки
// до строкового типу
st = FloatToStrF(data[i], ffGeneral, 5,2);
// виводимо підпис змістивши текст
// на 20 пікселів по осі Y
Canvas->TextOutA(x, y - 20, st);
// повертаємо попередні координати
Canvas->MoveTo(x,y);
x += dx; // придаємо зміщення
}
}
Основний алгоритм роботи циклу такий: проходимо по всім значенням масиву, будуємо квадрат (точку) на поверхні форми; якщо це не перша точка то з’єднуємо дві сусідні точки лінією; підписуємо данні використовуючи метод TextOutA об’єкту Canvas форми, дещо змістивши текст відносно точки.
Приклад роботи програми: