Исходники Delphi

Добро пожаловать на наш портал

На нашем сайте ежедневно публикуются десятки качественных и свежих материалов, которые Вы можете скачать абсолютно бесплатно. Рекомендуем Вам добавить Наш сайт в закладки, а также подписаться на RSS ленту, чтобы не пропускать интересных новостей.
Стартовая Избранное Главная Контакты Карта сайта

Меню

Не доступно

Не доступно

Опрос

Оцените мой сайт

Проголосовало: 118
Другие опросы

Главная » Файлы » Исходники Delphi » Графика, Оформление

Простой графический редактор )
16.02.2013, 20:39
Простой графический редактор )


Данное приложение, позволит пользователю рисовать на холсте, выбирая ширину и цвет линии, и сохранять результаты своей работы в файле как точечный рисунок. Рисовать мы будем не на всей поверхности окна (Form1.Canvas), а на холсте специально отведенного для размещения рисунка компонента Image(Image1.Canvas).
Компоненты:
3 x Button
ColorDialog
SavePictureDialog
Image
Label
UpDown

События компонентов:
Form1:OnCreate
Image1:OnMouseDown, OnMouseMove
UpDown1: OnClick
Button1, Button2, Button3:OnClick

Код:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
Caption:= 'Простейший графический редактор';
UpDown1.Position :=1;
Label1.Caption := 'Толщина линии: 1';
Button1.Caption := '&Цвет';
Button2.Caption := '&Стереть';
Button3.Caption := '&Сохранить...';
Image1.Canvas.Brush.Color :=clWhite;
Image1.Cursor := crCross;
UpDown1.Min := 1;
UpDown1.Max := 20;
SavePictureDialog1.DefaultExt := 'bmp';
end;

Рисование происходит следующим образом: при нажатии левой кнопки мыши (событие OnMouseDown) точка, над которой была нажата кнопка, фиксируется, то есть назначаеться текущим положением пера (метод Canvas.MoveTo). После этого любое перемещение мыши (событие OnMouseMove) проводит линию от текущего положения пера до нового положения указателя мыши, и текущей позицией становится эта новая точка (метод Canvas.LineTo). Так происходит до тех пор, пока левая кнопка мыши остается нажатой.

Код:
Код

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Image1.Canvas.MoveTo(X, Y);
end;
Код

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:

Код:
Код

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
Image1.Canvas.Pen.Width := UpDown1.Position;
Label1.Caption := 'Толщина линии:' + IntToStr(UpDown1.Position);
end;


Если пользователь закрывает диалог ColorDialog нажатием кнопки ОК, то скопируем значение свойства Color объектаColorDialog1 в одноименной свойство пера:

Код:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
if ColorDialog1.Execute then begin
Image1.Canvas.Pen.Color := ColorDialog1.Color;
end;
end;

Чтобы стереть рисунок, закрасим весь холст цветом фона, то есть белым:

Код:
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect (0, 0, Image1.Width, Image1.Height));
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;

end;
Категория: Графика, Оформление | Добавил: Reif | Теги: Графика
Просмотров: 805 | Загрузок: 0 | Комментарии: 3 | Рейтинг: 0.0/0
Всего комментариев: 0


Название блока

Здесь html код

Название блока

Здесь html код

Название блока

Здесь html код

Название блока

Здесь html код

 
Исходники Delphi
Сделать бесплатный сайт с uCoz |