Графічне відображення даних мовами програмування 

Проект 1. Озон. При натискання на кнопку Збільшити розміри малюнка збільшується імітується ефект наближення)

 

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Top:=Image1.Top+100;
  Image1.Left:=Image1.Left+250;
  Image1.Height:=Image1.Height+100;
  Image1.Width:=Image1.Width+100;
end;

Проект 2. Ставлення графічних примітивів на форму та їх фарбування.

procedure TForm1.Button1Click(Sender: TObject);
begin
  shape1.Brush.Color:=clRed;
  shape1.Brush.Style:=bsSolid;
  shape2.Brush.Color:=clAqua;
  shape2.Brush.Style:=bsBDiagonal;
  shape3.Brush.Color:=clLime;
  shape3.Brush.Style:=bsDiagCross;
  shape4.Brush.Color:=clGray;
  shape4.Brush.Style:=bsHorizontal;
end;

Проект Малювання на формі різних фігур

procedure TForm1.Button1Click(Sender: TObject);
begin
with Form1.Canvas do
  Begin
     Pen.Color:=clRed;
     Pen.Width:=2;
     Line(10,10,100,200);
   End;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  form1.Canvas.Brush.Color:=RGBToColor(random(255),random(255),random(255));
  form1.Canvas.Rectangle(80,50, 250,100);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  form1.Canvas.Brush.Color:=RGBToColor(random(255),random(255),random(255));
  form1.Canvas.Ellipse(250,50,350,250);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  form1.Canvas.Brush.Color:=RGBToColor(random(255),random(255),random(255));
  form1.Canvas.Ellipse(350,10,450,110);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
form1.Canvas.brush.Color:=clwhite;
form1.canvas.FillRect(0,0,500,400);
end;       

Проект Перетворення.

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

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X,Y:Integer);
begin
  if RadioGroup1.ItemIndex=0 then Shape1.Brush.Color:=clRed;
  if RadioGroup1.ItemIndex=1 then Shape1.Brush.Color:=clBlue;
  if RadioGroup1.ItemIndex=2 then Shape1.Brush.Color:=clGreen;
end;

procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X,Y:Integer);
begin
  Shape2.Brush.Color:=clPurple;
  if RadioGroup2.ItemIndex=0 then Shape2.Brush.Style:=bsHorizontal;
  if RadioGroup2.ItemIndex=1 then Shape2.Brush.Style:=bsVertical;
  if RadioGroup2.ItemIndex=2 then Shape2.Brush.Style:=bsSolid;
end;   

Проект. Прямокутники. Використовуючи цикл та випадкові числа, побудувати 10 прямокутників

procedure TForm1.Button1Click(Sender: TObject);
var x,y,i:integer;
begin
randomize;
for i:=1 to 10 do
begin
x:=random(300);
y:=random(150);
Form1.Canvas.Rectangle(x,y, x+100,y+50);
end;
end;    

Проект Малюнок із ліній.

На формі малюватимуться лінії за допомогою протягування мишею: початок лінії буде розташовано в позиції, у якій натиснули кнопку миші, а кінець - де відпустили кнопку миші (проект розроблено авторами підручника)

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   DownM := True;
   Canvas.MoveTo(X,Y);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if DownM = True  then Canvas.LineTo   (X,Y);
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DownM := False;
end;   

Проект Переміщення (По формі переміщати круг мишею)

procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  flag := False;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If flag Then with Tshape (Sender) do
begin
  Left := Left + x - x1;
  Top := Top + y - y1;
end;
end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x1 := x; y1 := y; flag := True
end;      

Проект Інтерактивне малювання.

Створення форми пензля (у вигляді еліпса)

 

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var startx,starty,a:integer;
begin
case RadioGroup1.ItemIndex of
0: a:=clBlack;
1: a:=clRed;
2: a:=clYellow;
end;
if not (ssleft in Shift) then exit;
with PaintBox1.Canvas do
begin
MoveTo(Startx,Starty);
Pen.Color:=a;
Brush.Color:=a;
Ellipse(x,y,x+4,y+4);//форма пензля
end;
startx:=x; starty:=y;
end;      

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var startx,starty:integer;
begin
  startx:=x; starty:=y;
end;   

Доповніть форму та програмний код новими кольорами та створіть власний малюнок. 

Помістіть на форму Діалог Вибір кольору - ColorDialog1

Додайте вибір пензля за допомогою діалогового вікна. Для цього розмістіть на формі кнопку Button1 (Вибір кольору).

Доповніть програмний код перемикача RadioGroup1 a:=colordialog1.color;

 

procedure TForm1.Button1Click(Sender: TObject);

var  a:integer;

begin

  if ColorDialog1.Execute then              

 a:=colordialog1.color;

end;

Помістіть на форму кнопку для зміни кольору полотна.

if ColorDialog1.Execute then a:=colordialog1.color;

PaintBox1.Canvas.brush.color:=a;

PaintBox1.Canvas.rectangle(0,0,400,300);

 

Додайте об'єкт TrackBar1. (Компонент TrackBar представляє собою візуальний елемент управління у вигляді повзунка, який можна переміщати клавішами або курсором миші під час виконання)

Встановіть мінімальне значення 5, максимальне 25

Для TrackBar1 викличте подія OnChange для присвоювання цього значення мітці Label2.

           label2.caption: = inttostr (Trackbar1.Position);

 

Помістіть мітку Label1 Товщина кисті, мітку Label2 для відображення значення товщини пензля. Змініть програмний код малювання еліпса (див п.5)

Ellipse (x, y, x + Trackbar1.Position, y + Trackbar1.Position);

 

Додайте кнопку Зберегти малюнок і діалог SavePictureDialog1 збереження малюнка

 

Малюнку потрібно зіставити змінну     var bmp: TBitmap;

Далі програмний код кнопки збереження малюнка

SavePictureDialog1.Title:=' Зберегтималюнокяк...';

 if SavePictureDialog1.Execute then

  begin

    bmp := TBitmap.Create;

    try

      bmp.Width := PaintBox1.Width;

      bmp.Height := PaintBox1.Height;

      bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Canvas, rect(0,0,PaintBox1.Width, PaintBox1.Height));

      bmp.SaveToFile(SavePictureDialog1.Filename);

    finally

        bmp.Free;

    end;

   end;

Використання компоненту TColorListBox

Компоненти ColorBox та ColorListBox розміщенні у групі компонентів Additional, працюють аналогічно, призначені для вибору кольору Selected тла чи малювання. Доповнити набір кольорів можна властивістю Style (cbCustomColor - власний колір).

 

Додавши кнопку BitBtn1, опишемо подію, яка відбудеться після її натиснення:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Form1.Color:=ColorListBox1.Selected;   // фарбує форму в обраний колір
  Form1.Caption:=ColorToString(ColorListBox1.Selected); //  назву або номер обраного кольору виводимо у назву форми
end; 

Комплексна практична робота. Задача про трикутник (полотно для малювання 400*400).

Формула для визначення довжини сторони за даними координатами вершин трикутника:

 

procedure TForm1.Button1Click(Sender: TObject);
var x1,y1,x2,y2,x3,y3:integer;
  a,b,c,p,max:real;
begin
  with PaintBox1.Canvas do
begin
//очищаємо попереднє креслення
pen.Color:=clwhite; brush.Color:=clwhite;
rectangle(0,0,400,400);
//встановлюємо колір і товщину пера
pen.Color:=clred;
pen.Width:=3;
end;
 //зчитуємо координати 1 точки і малюємо її
x1:=StrToInt(Edit1.Text);
y1:=StrToInt(Edit2.Text);
Form1.Canvas.Ellipse(x1-2,y1-2,x1+2,y1+2);
Form1.Canvas.textout(x1,y1,'A');
 //зчитуємо координати 2 точки і малюємо її
x2:=StrToInt(Edit3.Text);
y2:=StrToInt(Edit4.Text);
Form1.Canvas.Ellipse(x2-2,y2-2,x2+2,y2+2);
Form1.Canvas.textout(x2,y2,'В');
//зчитуємо координати 3 точки і малюємо її
x3:=StrToInt(Edit5.Text);
y3:=StrToInt(Edit6.Text);
Form1.Canvas.Ellipse(x3-2,y3-2,x3+2,y3+2);
Form1.Canvas.textout(x3,y3,'С');
// креслимо трикутник
Form1.Canvas.MoveTo(x1,y1);
Form1.Canvas.LineTo(x2,y2);
Form1.Canvas.LineTo(x3,y3);
Form1.Canvas.LineTo(x1,y1);
// обчислення та виведення довжин сторін
a:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
b:=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
c:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
Edit7.Text:=FloatToStr(a);
Edit8.Text:=FloatToStr(b);
Edit9.Text:=FloatToStr(c);
// знаходження більшої із сторін
if (a>b) and (a>c) Then max:=a;
if (b>a) and (b>c) Then max:=c;
if (c>b) and (c>a) Then max:=c;
Edit10.Text:=FloatToStr(max);
// обчислення периметра
p:=a+b+c;
Edit11.Text:=FloatToStr(p);
 end;