Практикум по Delphi для решения прикладных задач
f65d50f6

Графика


Для рисования статичных рисунков используется компонент PaintBox (панель System).  Этот компонент размещается на форме в виде прозрачного пунктирного квадрата, и в его пределах можно рисовать. Рисование выполняется обращением к свойству Canvas (графическая канва) этого компонента: PaintBox1.Canvas. У него в свою очередь есть свойство Pixels (PaintBox1.Canvas.Pixels), которое представляет собой матрицу, двумерный массив заданного размера - поточечный образ канвы, каждый элемент - отдельная точка. В Pixels[] отсчет точек (пикселов экрана) начинается с 0.

Координаты x, y отсчитываются от верхнего левого угла, то есть он считается точкой с координатой (0, 0), увеличение по оси x идет слева направо, а по оси y - сверху вниз. Для конкретной точки указывается цвет. Функция RGB() формирует цвет комбинацией интенсивности красного, зеленого и синего (интенсивность задается числом от 0 до 255). Например, черный - RGB(0,0,0), красный - rgb(255,0,0), синий - rgb(0,0,255), белый - rgb(255,255,255).

Цель работы - создать программу, выполняющую следующие действия:

1. Разместить на форме  компонент PaintBox.

2.      Заполнить доступную канву 300 красными точками в случайных позициях по нажатиям на некоторую кнопку.

3.      Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

4.      Записать код в обработчике нажатия.



 


 

procedure TForm1.Button1Click(Sender: TObject);
  var i,x,y: Integer;
  begin

    randomize;
    for i := 1 to 300 do
     begin
        x := random(100);
        y := random(100);
        PaintBox1.Canvas.Pixels[x,y] := RGB(255,0,0);
     end
  end;

5.      Изменить RGB(255,0,0) на RGB(random(255),random(255),random(255) ).

 


6.      Заполнить фон черным цветом перед началом выполнения программы с помощью метода канвы FillRect. Метод вызывается с указанием прямоугольной области заливки цветом: FillRect(Rect(0, 0, 100, 100)) // координаты верхнего левого и правого нижнего углов

Вложенное слово Rect формирует данное типа "прямоугольник". Перед вызовом FillRect надо указать цвет заливки:  PaintBox1.Canvas.Brush.Color := RGB(0,0,0);

 


procedure TForm1.Button1Click(Sender: TObject);
  var i,x,y: Integer;
  begin

PaintBox1.Canvas.Brush.Color := RGB(0,0,0); 

PaintBox1.Canvas.FillRect(Rect(0,0,100,100));

     for i := 1 to 300 do
       begin
         x := random(100);
        y := random(100);
        PaintBox1.Canvas.Pixels[x,y] := RGB(random(255),random(255),random(255));

    end
  end;

7.      Заполнить канву случайными разноцветными линиями разной толщины. Линия рисуется с помощью методов (сначала задается начальная точка, потом конечная):

PaintBox1.Canvas.MoveTo(10,10);

PaintBox1.Canvas.LineTo(50,50);

Цвет линии и толщина задаются свойством канвы Pen (карандаш). Pen.Color - цвет карандаша), Pen.Width - толщина линии в пикселах (по умолчанию - 1).

 

 


for i := 1 to 300 do

 begin

   PaintBox1.Canvas.Pen.Color := RGB(random(255),random(255),random(255));

   PaintBox1.Canvas.Pen.Width := random(3)+1;

   x := random(100);

   y := random(100);

   PaintBox1.Canvas.MoveTo(x,y);

   x := random(100);

   y := random(100);

   PaintBox1.Canvas.LineTo(x,y);

   end

8.      Заполнить канву эллипсами случайным образом (круги, окружности - частный случай эллипса). Эллипсы рисуются методом Ellipse() с четырьмя параметрами - координатами верхнего левого и правого нижнего углов прямоугольника, в который эллипс вписывается. Кайма эллипса рисуется в соответствии с параметрами свойства Pen канвы, а заливается эллипс внутри цветом кисти Brush канвы.

 


 for i := 1 to 300 do
    begin
       // цвет и ширина каймы будущего эллипса
      PaintBox1.Canvas.Pen.Color := RGB(random(255),random(255),random(255)) ;
      PaintBox1.Canvas.Pen.Width := random(3)+1;

     // цвет заливки внутренности эллипса
     PaintBox1.Canvas.Brush.Color := rgb(random(255),random(255),random(255)) ;

     // координаты углов прямоугольника, в который вписывается  эллипс
     x := random(150);
     y := random(150);
     x2 := random(150);
     y2 := random(150);

  // вписываем эллипс
  PaintBox1.Canvas.Ellipse(x,y,x2,y2);
 end;

9.      Сделать канву на весь экран. Заполнить разноцветными прямоугольниками в случайных позициях и случайных размеров с помощью FillRect().

10.  Создать графический образ так называемого множества Жюлиа.

  procedure TForm1.Button1Click(Sender: TObject);
    var RE,IM,RE1,IM1: REAL ;
    V,X,Y : INTEGER;

          // вывод точки заданного цвета
    procedure PUTPIXEL(x,y,c:Integer);
    var cc: TColor;
    begin

              case c mod 8 of
               0:cc:=clBlack;
               1:cc:=clRed;
               2:cc:=clLime;
               3:cc:=clYellow;
               4:cc:=clBlue;
               5:cc:=clFuchsia;
               6:cc:=clAqua;
              7:cc:=clWhite;
            end;

         PaintBox1.Canvas.Pixels[x,y] := cc;
    end;

    procedure QWA ;
    begin
         RE1:=RE*RE-IM*IM;

         IM1:=2*RE*IM;

         RE:=RE1;

             IM:=IM1;
    end;
    procedure KUB;

          begin

              RE1:=RE*(RE*RE-3*IM*IM);
             IM1:=IM*(3*RE*RE-IM*IM);

             RE:=RE1;

             IM:=IM1;

        end ;
     
   Begin
    PaintBox1.Canvas.Brush.Color := rgb(0,0,0);
    PaintBox1.Canvas.FillRect(Rect(0,0,640,480));

    X:=-320 ;
    REPEAT Y:=-240 ;
    REPEAT V:=0 ; RE:=-1.+0.001*X ; IM:=0+0.001*Y ;
    REPEAT KUB; RE:=RE+1.00003 ; IM:=IM+1.01828201638 ;
    if RE*RE > 50 then break;
    if IM*IM > 50 then break;
    V:=V+1 ;
    UNTIL V>40 ;
    if ( ABS(RE) > 10 ) or ( ABS(IM) > 1000)

        then

          begin
                    PUTPIXEL((X+320),(Y+240),TRUNC(V)) ;

          end
       else PUTPIXEL((X+320),(Y+240),0);
    Y:=Y+1 ;
    UNTIL Y > 241 ;
    X:=X+1 ;
    UNTIL X>320 ;
    End;



Содержание раздела