§ 4. Элементы управления для работы с графикой

4.3. Построение диаграмм

Основные принципы построения гистограмм и круговых диаграмм разбирались в 10-м классе (примеры 4.6 и 6.8). Используя аналогичные методы канвы диаграммы можно построить в Delphi.

Пример 4.7. Создать проект, в котором построить гистограмму по данным массива из n элементов (n = 10). Массив описать с константными данными или добавить данные в массив случайным образом.

1. Поместить на форму компоненты: изображение (Image), и два компонента Button.

2. Изменить свойства Caption у компонента Button1 на «Диаграмма с константными данными».

3. Изменить свойства Caption у компонента Button2 на «Диаграмма со случайными данными».

4. Написать обработчик события OnClick для компонента Button1, в котором диаграмма строится с помощью прямоугольников.

4.1. Найти максимальный элемент в массиве — max.
4.2. Рассчитать масштабный коэффициент: .
4.3. В цикле строить n прямоугольников одинаковой ширины. Ширина прямоугольника  .

5. Обработчик для компонента Button2 будет отличаться от обработчика для компонента Button1 только способом получения элементов массива.

5.1.  Массив должен быть описан в разделе
var a: array[1..10] of integer;
5.2. Элементы массива со значениями от 20 до 100 можно получать следующим образом:

randomize;
for i := 1 to n do
   a[i] := random(80) + 20;

Пример 4.7. Форма на этапе конструирования:

Обработчик события OnClick для компонента Button1:

procedure
TForm1.Button1Click(Sender: TObject);
const a: array[1..10] of integer =
 (10, 14, 22, 75, 63, 12, 37, 61, 42, 48);
     n = 10;
var max, x, y1, y2, h, i, cr, cg, cb : integer;
    m :real;
begin
  max := a[1];
  for i := 2 to n do
    if a[i] > max then
      max := a[i];
  h:= trunc(Image1.Width/(2*n+1));
  m:= Image1.Height / max;
  x:= h;
  for i := 1 to n do
  begin
    cr := random(256);
    cg := random(256);
    cb := random(256);
    Image1.Canvas.Brush.Color := RGB(cr, cg, cb);
    y1 := Image1.Height;
    y2 := y1 - trunc(a[i] * m);
    Image1.Canvas.Rectangle(x, y1, x+h, y2);
    x := x + 2 * h;
  end;
end;

Работающее приложение: