У вікні програми Діаграма відображається діаграма, яка ілюструє зміну курсу долара. Програма спроектована так, що, незалежно від розміру вікна, діаграма розташовується в центрі вікна і займає більшу його частину, навіть після того, як користувач змінить розмір вікна.

Код написання програми
float data[] = {27.98, 28.01 , 27.96, 27.96, 27.96, 28.11 , 28.08,
28.00, 27.98, 28.15, 28.15, 28.11 , 27.94,
27.86, 27.88, 27.95, 27.95};
AnsiString Title = "Зміна курсу долара";
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
int x,y;
// заголовок
Canvas->Font->Name = "Tahoma";
Canvas->Font->Size =12;
x = (ClientWidth - Canvas->TextWidth(Title))/2;
Canvas->Brush->Style = bsClear;
Canvas->TextOutA(x,10,Title);
// гістограма
int n; // кількість стовпців
int wCol; // ширина стовпця
#define MC 5 // відстань між стовпчиками по горизонталі
n = sizeof(data) / sizeof(float);
wCol = (ClientWidth - (n - 1)*MC - 20) / n;
x = 10;
y = ClientHeight - 20; // знайти мінімальне і максимальне значення даних
int min,max; // індекс мінімального і максимального елемента
min =0 ; // нехай перший елемент мінімальний
max =0 ; // нехай перший елемент максимальний
for (int i = 1; i < n; i++)
{
if (data[i] < data[min]) min = i;
if (data[i] > data[max]) max = i;
}
/* Якщо відхилення значень ряду від середнього значення
незначне, то діаграма виходить ненаглядною.
У цьому випадку можна побудувати не абсолютні значення,
а відхилення від мінімального значення ряду. */
bool frmin = true; // true - відраховувати від мінімального
int h; // висота стовпчика
// максимальному значенню відповідає
// стовпчик висотою ClientHeight - 90
Canvas->Font->Size -= 2;
for ( int i = 0; i < n; i++)
{
if (!frmin)
h = (ClientHeight - 90) * data[i]/data[max];
else
/* Відраховувати від мінімального значення.
Мінімальне значення відобразимо стовпчиком
висотою 10 пікселів */
h = (ClientHeight - 90) * (data[i] -data[min])/(data[max] - data[min]) + 10;
Canvas->Brush->Style = bsSolid;
Canvas->Brush->Color = clLime;
Canvas->Rectangle(x,y,x+wCol,y-h); // стовпчик
// підпис даних
AnsiString st;
st = FloatToStrF(data[i],ffGeneral,5,2);
Canvas->Brush->Style = bsClear; // область виведення
// тексту - прозора
Canvas->TextOutA(x,y-h-20,st);
x = x + wCol + MC;
}
}
void __fastcall TForm1::FormResize(TObject *Sender)
{
Form1->Refresh(); // оновити вміст вікна
}
програмування