Графика в Delphi: Методические указания к лабораторным работам по курсу «Информатика», страница 4

        3 : Brush.Color := clBlue;

        4 : Brush.Color := clFuchsia;

        5 : Brush.Color := clGreen;

        6 : Brush.Color := clLime;

        7 : Brush.Color := clMaroon;

        8 : Brush.Color := clRed;

        9 : Brush.Color := clYellow;

       10 : Brush.Color := clWhite;

      end;

      Rectangle((i - 1) * HW, 0, i * HW, Height);

    end;

{рисование креста - только для тестирования}

  with Image3 do begin

    Canvas.MoveTo(0,0);

    Canvas.LineTo(Width, Height);

    Canvas.MoveTo(0, Height);

    Canvas.LineTo(Width, 0);

  end;

  BitMap.Assign(Image3.Picture);//нарисованное сохраняется в BitMap

end;

5)  В обработчик события OnDestroy (уничтожение) компонета Form1 запишите код, который освобождает память, выделенную под BitMap:

BitMap.Free;

6)  Для пункта меню Файл-Открыть в обработчике укажите код, который загружает Image3 изображением из выбранного файла и сохраняет его копию в BitMap

if OpenPictureDialog1.Execute then begin

  Image3.Picture.LoadFromFile(

    OpenPictureDialog1.FileName);

  BitMap.Assign(Image3.Picture);

end;

7)  Для пункта меню Правка-Отменить в обработчике укажите код, который заменяет изображение на холсте Inage3 на предыдущую версию картинки из BitMap

Image3.Picture.Assign(BitMap);

8)  В обработчике события OnClick компонента SBBrush укажите код, который будет сохранять изображение из Image3 в BitMap, если кнопка нажата (т.е. при смене режима изображение сохраняется в BitMap):

if (Sender as TSpeedButton).Down then

    BitMap.Assign(Image3.Picture);

9)  В качестве обработчика события OnClick компонента SBColor укажите тот же обработчик, что и для SBBrush

10) В обработчике события OnMouseDown (нажатие кнопки мыши) компонента Image3 укажите следующий код

procedure TForm1.Image3MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  if (Sender = Image4) or SBColor.Down then

    begin //если щелчок по палитре цветов Image4

          //или если кнопка указателя цвета нажата

      if (Button = mbLeft) then // левая кнопка мыши

        with Image1.Canvas do   //работаем с

  // индикатором

                                //основного цвета

                                //Image1

          begin

            Brush.Color := //установка основного

      //цвета

              (Sender as TImage).Canvas.Pixels[X, Y];

             FillRect(Rect(0, 0, Width, Height));

          end

      else //если нажата правая кнопка мыши

        with Image2.Canvas do   //работаем с холстом

                                //Image2

          begin

            Brush.Color := //установка

                           //вспомогательного цвета

              (Sender as TImage).Canvas.Pixels[X, Y];

             FillRect(Rect(0, 0, Width, Height));

          end;

    end

  else //если щелчок по Image3

    if SBBrush.Down then //если нажата кнопка Кисть

      with Image3.Canvas do //работаем с основной

                            //картинкой Image3

        begin

          if Button = mbLeft

            then //если нажата левая кнопка мыши

              Brush.Color :=

                Image1.Canvas.Brush.Color

            else //если нажата правая кнопка мыши

              Brush.Color :=

                Image2.Canvas.Brush.Color;

          FloodFill(X, Y, Pixels[X, Y], fsSurface);

        end;

end;

11) Этот же обработчик укажите в качестве обработчика события OnMouseDown компонента Image4. Данный код осуществляет как установку основного и вспомогательного цветов, так и функции инструмента Кисть. Если кнопка мыши нажата на палитре цветов Image4 или если кнопка указателя цвета SBColor утоплена, то приложение находится в режиме установки цветов. При нажатии левой кнопки мыши цвет пиксела под курсором мыши предается в окно основного цвета, а при нажатии правой - вспомогательного. Если кнопка мыши нажата на холсте Image4 и при этом кнопка SBBrush утоплена, то приложение находится в режиме закраски указанной области рисунка. В этом случае в зависимости от нажатой кнопки мыши выбирается основной или вспомогательный цвет и функцией FloodFill производится закраска области, координаты внутренней области которой указаны курсором мыши, а цвет области - цветом пиксела, на который указывает мышь.