Сегодня мы Вам расскажем как создать простой графический редактор.
Итак, начнем.
Создаём новый проект Delphi, назовем главную форму "Графический редактор" (Object Inspector (Form1) -> Properties -> Caption). Свойству Position присвоим значение poScreenCenter. Это говорит о том, что форма будет расположена по середине рабочего стола. На форму добавляем компонент Panel (1) его свойству Align присвоим значение alTop, свойству BevelInner присвоим значение bvLowered, а свойству BorderWidth присвоим значение 2. Добавим на форму еще один компонент Panel (2) его свойству Align присвоим значение alClient. На Panel1 добавим компонент Image (1), его свойству AutoSize присваиваем значение True. Так, теперь разберемся с компонентами на Panel (2). Добавляем сюда компонент Button (1), свойству Caption присваиваем значение Цвет >>>. Немного правее размещаем компонент Panel (3) (BevelInner = bvLowered, BorderWidth = 1). На Panel3 добавим компонент Image (2) (Align = alClient). Правее компонента Panel3 добавляем компонент Label (1) (Caption = Add Text). Также добавляем невидимые компоненты: OpenDialog (1),SaveDialog (1),PrintDialog (1),ColorDialog (1), MainMenu (1). Свойствам Filter компонентов OpenDialog1, SaveDialog1 присваиваем значение BMP|*.bmp. Теперь опишем все пункты меню: Два раза кликнем на компонент MainMenu1, который уже расположен на форме. Добавляем такие пункты: Сохранить, Загрузить, Печать, - , Выход. Пункт "-" это разделительная линия. Кликнем на пункт "Сохранить" и в появившемся окне редактора пишем: if Savedialog1.Execute = true then begin
image1.Picture.SaveToFile(Savedialog1.filename+'.bmp'); end;
Кликнем на пункт "Загрузить" и напишем: if Opendialog1.Execute = true then begin
image1.Picture.LoadFromFile(Opendialog1.filename); end;
Кликнем на пункт "Печать" и напишем: if Printdialog1.Execute = true then begin
Form1.Print; end;
Кликнем на пункт "Выход" и напишем:
Form1.Close;
С меню разобрались. Теперь нужно разобраться собственно с рисованием и добавлением текста на рисунок.
Свойству Cursor компонента Image1 присвоим значение crCross. Теперь в Object Ispector веберем компонент Image1 -> Events -> OnMouseDown и напишем:
press:=true;
tx:=x;
ty:=y;
image1.Canvas.MoveTo(x,y);
image1.Canvas.Pixels[tx,ty]:=color;
!Внимание! переменные tx, ty, color должны быть описаны как integer, а press как boolean в общем Var'е. Делается это так: unit Unit1;
interface
uses
...
type
...
private
...
public
...
end;
var
Form1: TForm1;
implementation
uses ...
{$R *.DFM}
var
press:boolean;
tx,ty,color:integer;
...
end.
Теперь в Object Ispector веберем компонент Image1 -> Events -> OnMouseUp и напишем:
press:=false;
Теперь в Object Ispector веберем компонент Image1 -> Events -> OnMouseMove и напишем: if press=true thenbegin
image1.Canvas.Pen.Color:=color;
image1.Canvas.Brush.Create;
image1.Canvas.LineTo(tx,ty);
tx:=x;
ty:=y; end;
Теперь организуев выбор цвета.
В Form1OnCreate объявляем две переменные типа integer и тамже пишем:
image1.Canvas.Create;
color:=clblack; for i:=0 to image2.width do begin for j:=0 to image2.Height do begin
image2.Canvas.Pixels[i,j]:=color; end; end;
Напоминаем, что поумолчанию в Delphi переменным типа integer присваиваются значения 0. Этим текстом мы на компоненте Image2 прорисовуем текущий цвет. Перйдем к выбору цвета. Для этого два раза кликнем на Button1 и впишем сей текст: var
i,j:integer; begin if Colordialog1.Execute = true then begin
color:=ColorDialog1.Color; for i:=0 to image2.width do begin for j:=0 to image2.Height do begin
image2.Canvas.Pixels[i,j]:=color; end; end; end; end;
Осталась малость - добавление текста на форму. Для этого создадим новую форму - Form (2), на ней создадим три компонента Edit (1),(2),(3) и три компонента Label (1),(2),(3). Edit1 - собственно сам текст, Edit2 - координата по оси X, Edit3 - координата по оси Y. Три компонента Label (1),(2),(3) - соответственно подписи к компонентам Edit (1),(2),(3). Добавляем компонент Button1. Два раза на него кликаем и пишем такой текст: if (edit1.text<>'')and(edit2.text<>'')and(edit3.text<>'') then begin
form1.image1.canvas.textout(strtoint(edit2.text),strtoint(edit3.text),edit1.text); end;
Снова возвращаемся на первую форму. Два раза кликаем на компонент Label1. Пишем:
form2.showmodal;
Свойству Cursor компонента Label1 присваиваем значение crHandPoint.
Вот и всё!!! Если что-то кому-то не понятно - качайте готовый текст программы: http://delphi.bos.ru/subs/painter.zip
Зарускайте свой проект и наслаждайтесь своим творением.
Напишите что вы хотите увидеть в следующим выпуске на адрес: delphi@xak.ru