пятница, 17 января 2020 г.

Візуалізація елементів табличної величини за допомогою графічних примітивів



Відобразити у вигляді лінійчатої діаграми дані таблиці

 У розділі опису глобальних змінних опишемо:

var
  Form1: TForm1;
  sh: array[1..4] of TShape;  
  lb: array[1..4] of TLabel; 

Заповнення масивів відбуватиметься під час створення форми:

procedure TForm1.FormCreate(Sender: TObject);
  var   i: Integer;
begin
  Image1.Canvas.Brush.Color := clWhite; 
  Image1.Canvas.FillRect(Image1.ClientRect);
  sh[1] := Shape1; 
  sh[2] := Shape2;
  sh[3] := Shape3;
  sh[4] := Shape4;
  lb[1] := Label1;
  lb[2] := Label2;
  lb[3] := Label3;
  lb[4] := Label4;
end;  

Код процедури обробки події onclick для кнопки Побудувати діаграму може бути таким:

procedure TForm1.Button1Click(Sender: TObject);
  const D: array[1..4] of Integer = (981, 705, 591, 174);
  Nazva: array[1..4] of String = ('Дніпро', 'Дністер', 'Десна', 'Дунай');
  var   i: Integer;
begin
  For i := 1 to 4 do
      begin
        sh[i].Width := D[i] div 5;
        lb[i].Caption := Nazva[i];
        sh[i].Top := 25*i;   lb[i].Top := 25*i;
        Image1.Canvas.TextOut (D[i] div 5+20, 25*i, IntToStr(D[i]));
      end;
end;

Побудова гістограми з використанням графічних методів 

  

Код процедури обробки події onclick для кнопки Побудувати діаграму може бути таким:

procedure TForm1.Button1Click(Sender: TObject);
const SrBal: array[1..4] of Real = (9.8, 8.5, 9.1, 7.4);
Nazva: array[1..4] of String = ('Інформатика', 'Алгебра', 'Геометрія', 'Фізика');
var i: Integer;
begin
  Label1.Caption :='';
   Image1.Canvas.Brush.Color := clWhite;
   Image1.Canvas.FillRect(Image1.ClientRect);
   Image1.Canvas.Polyline ([Point(5,5),Point(5,140),Point (240,140)]);
   Image1.Canvas.Polyline ([Point (2,8), Point (5,5), Point (9,9)]);
   Image1.Canvas.Polyline ([Point (235,137), Point (240,140), Point (235,143)]);

   For i := 1 to 4 do begin
        With Image1.Canvas do begin
         
             Brush.Color := RGBToColor (i*50, 150, 150);
             Brush.Style := bsSolid;
             Rectangle (i*50, Round(150-SrBal[i]*10), i*50+30, 140);
             Brush.Style := bsClear;
             Font.Size := 12;
             TextOut (i*50, Round(130-SrBal[i]*10), FloatToStr(SrBal[i]));
        end;
 
   Label1.Caption := Label1.Caption + ' ' + Nazva[i];
  end;
end;
                       

Комментариев нет:

Отправить комментарий