Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧА. Программирование на Delphi


Служба Рассылок Subscribe.Ru проекта Citycat.Ru


  Выпуск №7  Подписчиков: 450 
   
.::::: СообЧа - Программирование на Delphi :::::.
  © 2000 COOLer и AzYx  Дизайн: Yoghurt 
   

 

Оглавление
  В выпуске  Рассылка СообЧА 
    
  • Практикум - Написание простого графического редактора.
  •  
    Рассылки Subscribe.Ru
    СообЧа (СООБщество ЧАйников). Обмен опытом, вопросы, ответы.

     Назад к оглавлению  
      
      Практикум - Написание простого графического редактора. 
     
      

    Добрый день (если нет, то {local time} :))!

         Сегодня мы Вам расскажем как создать простой графический редактор.

    Итак, начнем.
    Создаём новый проект 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 then begin
              image1.Canvas.Pen.Color:=color;
              image1.Canvas.Brush.Create;
              image1.Canvas.LineTo(tx,ty);
              tx:=x;
              ty:=y;
         end;
    Теперь организуев выбор цвета. В Form1 OnCreate объявляем две переменные типа 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

    © AzYx & COOLer


    Zaluskiy Anton(COOLer)    - ведущий проекта    "Мир Delphi"

    Наш спонсор - лучший интернет магазин:

    о3он

    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Поиск

    В избранное