§ 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;

Дадатак у час работы: