На нашем сайте ежедневно публикуются десятки качественных и свежих материалов, которые Вы можете скачать абсолютно бесплатно. Рекомендуем Вам добавить Наш сайт в закладки, а также подписаться на RSS ленту, чтобы не пропускать интересных новостей.
Данное приложение, позволит пользователю рисовать на холсте, выбирая ширину и цвет линии, и сохранять результаты своей работы в файле как точечный рисунок. Рисовать мы будем не на всей поверхности окна (Form1.Canvas), а на холсте специально отведенного для размещения рисунка компонента Image(Image1.Canvas). Компоненты: 3 x Button ColorDialog SavePictureDialog Image Label UpDown
События компонентов: Form1:OnCreate Image1:OnMouseDown, OnMouseMove UpDown1: OnClick Button1, Button2, Button3:OnClick
Рисование происходит следующим образом: при нажатии левой кнопки мыши (событие OnMouseDown) точка, над которой была нажата кнопка, фиксируется, то есть назначаеться текущим положением пера (метод Canvas.MoveTo). После этого любое перемещение мыши (событие OnMouseMove) проводит линию от текущего положения пера до нового положения указателя мыши, и текущей позицией становится эта новая точка (метод Canvas.LineTo). Так происходит до тех пор, пока левая кнопка мыши остается нажатой.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (ssLeft in Shift) then Image1.Canvas.LineTo(X, Y); end;
Компонент UpDown служит для выбора ширины пера. Выбранную ширину мы отображаем в надписи Label1:
Если пользователь закрывает диалог ColorDialog нажатием кнопки ОК, то скопируем значение свойства Color объектаColorDialog1 в одноименной свойство пера:
Код:
Код
procedure TForm1.Button1Click(Sender: TObject); begin if ColorDialog1.Execute then begin Image1.Canvas.Pen.Color := ColorDialog1.Color; end; end;
Чтобы стереть рисунок, закрасим весь холст цветом фона, то есть белым:
Чтобы сохранить рисунок в файл, мы сначала копируем содержимое компонента Image во вспомогательный обьект типа "точечный рисунок", а потом вызываем метод этого обьекта SaveToFile. Имя файла мы получаем как значение свойства FileName диалога SavePictureDialog1, если пользователь закрыл этот диалог нажатием кнопки ОК. Мы могли бы вызвать и непосредственно метод SaveToFile обьекта Image1.Picture, тем более что на случай каких либо неприятностей при попытке записи мы поместили фрагмент кода, отвечающий за запись файла, в защищенный блок.
Код:
Код
procedure TForm1.Button3Click(Sender: TObject); var Pattern: TBitmap; Region: TRect; begin if SavePictureDialog1.Execute then begin Pattern := TBitmap.Create; try Pattern.Width := Image1.Width; Pattern.Height := Image1.Height; Region := Rect(0, 0, Pattern.Width, Pattern.Height); Pattern.Canvas.CopyRect(Region, Image1.Canvas, Region); Pattern.SaveToFile(SavePictureDialog1.FileName); finally Pattern.Free; end; end;