Графические объекты

Автор работы: Пользователь скрыл имя, 17 Марта 2013 в 21:30, курсовая работа

Описание работы

Создание иерархии классов для реализации свойств и методов объектов точка, окружность, прямая, прямоугольник, закрашенная область из предметной области «Графические объекты». В основной программе продемонстрирована работа методов: перемещение, наложение, масштабирование.

Содержание работы

Задание …………………………………………………………..……3
Введение……………………………………………………………….4
Разработка структуры классов………………………………..5
Реализация классов в программе ………………………….….8
Работа программы…………………………………………..….15
Приложение(Основная программа)…………………………...18
Системные требования................................................................23
Заключение……………………………………………………………..24
Список литературы…………………………………………………....25

Файлы: 1 файл

ПЗ_РЕДАКТОР.docx

— 378.47 Кб (Скачать файл)

            0, 0,

            BitMap->Width, BitMap->Height,

            BitMap->Canvas->Handle,

            0, 0,

            SRCCOPY//Исходное изображение копируется в контекст отображения

         );

      }

      if (RBegin && ! REnd) REnd = true;

      RBegin = false;

      RDrag = false;

   }

private:

   int X0, Y0;

   bool RBegin, REnd, RDrag;

   TRect R,R0;

   Graphics::TBitmap *Bit;

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа  программы

При запуске пользователю необходимо задать размеры нового листа. После  нажатия клавиши применить открывается  лист выбранного размера. 

Перед началом использования методов  и компонентов редактора можно  прочитать подробную справку  о каждом из них.

Рисование осуществляется нажатием левой  кнопки мыши. В пункте меню «Файл» можно  выбрать создание нового рисунка, сохранения существующего, открытия уже имеющегося рисунка. Пункт меню «Вид» отвечает за внешний вид редактора, там  мы можем добавить или удалить  панели редактора.

Выбор цвета осуществляется из палитры  цветов ,если в палитре нет нужного нам цвета мы можем воспользоваться определителем цветов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                     Приложение 
Основная программа

TFmain *Fmain;

bool f_panel1 = false;//панель инструментов

bool f_panel2 = false;//панель цветов

 

RGB(Red, Green, Blue) получает из значений тpех основных цветов от 0 до 255 значение цвета RGB, связанное с палитpой.

 

// Счетчик наследников есть только в родительской форме.

__fastcall TFmain::TFmain(TComponent* Owner)

   : TForm(Owner)

{

   AllColor = 28;

   color.resize(AllColor);

   fstream File;

   File.open("ss.txt");//цвета

   for(int i = 0; i < AllColor; i++)

   {

   int R, G, B;

   File >> R;

   File >> G;

   File >> B;

      color[i].push_back(R);

      color[i].push_back(G);

      color[i].push_back(B);

   }

   File.close();

   Palette_selected_col = 0;

   Palette_selected_row = 0;

}

 

//отпускание перетаскиваемого  компонента над данным компонентом

void __fastcall TFmain::FormDockDrop(TObject *Sender,//объект,над которым объект был опущен

      TDragDockObject *Source, int X, int Y)//перетаскиваемый объект

      //X и Y содержат координаты позиции курсора мыши над компонентом

{

   Panel1->Align = alLeft;//положение панели инструментов

   Panel2->Align = alBottom;//положение панели цвета

}

 

// время,в течение которого перемещаем перетаскиваемый объект над компонентом

void __fastcall TFmain::FormDockOver(TObject *Sender,//Sender-сам компонент

      TDragDockObject *Source, int X, int Y, TDragState State,//Source-перетаскиваемый объект

      bool &Accept)//State определяет состояние перетаскиваемого объекта по отношению к другим объектам

{ //X и Y - координаты точки  эрана в пикселях

   int x = ClientOrigin.x;

   int y = ClientOrigin.y;

   if(Source->DockRect.Left <= x && Source->Control == Panel1)

      Source->DockRect = Rect(x, y, x+Panel1->Width, y+ClientHeight-Panel2->Height-StatusBar1->Height);

 

   if(Source->DockRect.Bottom >= y+ClientHeight && Source->Control == Panel2)

      Source->DockRect = Rect(x, y+ClientHeight-Panel2->Height-StatusBar1->Height, x+ClientWidth, y+ClientHeight-StatusBar1->Height);

}

 Передаём по ссылке параметр InfluenceRect типа TRect.Переменная типа TRect

указывает место в форме,где будет активизировано закрепление элемента управления

при его размещении над этим местом.Указание области закрепления одних элементов

управления на других.

void __fastcall TFmain::FormGetSiteInfo(TObject *Sender,

      TControl *DockClient, TRect &InfluenceRect, TPoint &MousePos,

      bool &CanDock)

{

   if(DockClient == Panel1)

   {

      Panel1->Constraints->MaxHeight = 70;

      Panel1->Constraints->MaxWidth = 49;

      if(MousePos.x > ClientOrigin.x)

         CanDock = DockClient != Panel1;

      else CanDock = DockClient == Panel1;

   }

   else

   {

      Panel2->Constraints->MaxHeight = 42;

      Panel2->Constraints->MaxWidth = 477;

      if(MousePos.y < ClientOrigin.y+ClientHeight)

         CanDock = DockClient != Panel2;

      else CanDock = DockClient == Panel2;

   }

}

 

 

void __fastcall TFmain::PaletteDrawCell(TObject *Sender, int ACol,

      int ARow, TRect &Rect, TGridDrawState State)

{

   Graphics::TBitmap *b = new Graphics::TBitmap;

   b->Canvas->Pen->Color = clWindow;

 

   b->Canvas->Brush->Color = (TColor)RGB(color[ACol+Fmain->Palette->ColCount*ARow][0],color[ACol+Fmain->Palette->ColCount*ARow][1],color[ACol+Fmain->Palette->ColCount*ARow][2]);  // нет заморочки со строками таблицы. :)

   b->Width = 500;

   b->Height = 500;

 

   b->Canvas->FillRect(TRect(0, 0, 50, 50));

   Palette->Canvas->CopyRect(Palette->CellRect(ACol,ARow),b->Canvas, Rect);

   b->Free();

}

//---------------------------------------------------------------------------

 

 

void __fastcall TFmain::BColorClick(TObject *Sender)

{

   if(Fmain->ColorDialog1->Execute())

   {// 12 - это формальные параметры

      FrontColor->Canvas->Brush->Color = Fmain->ColorDialog1->Color;

      FrontColor->Canvas->FillRect(TRect(0, 0, FrontColor->Width, FrontColor->Height));

 

      // Для дидильной палитре на дроугриде.(4 строки)

      Fmain->color[Fmain->Palette_selected_col+Fmain->Palette->ColCount*Fmain->Palette_selected_row][0] = GetRValue(Fmain->ColorDialog1->Color);

      Fmain->color[Fmain->Palette_selected_col+Fmain->Palette->ColCount*Fmain->Palette_selected_row][1] = GetGValue(Fmain->ColorDialog1->Color);

      Fmain->color[Fmain->Palette_selected_col+Fmain->Palette->ColCount*Fmain->Palette_selected_row][2] = GetBValue(Fmain->ColorDialog1->Color);

 

      Palette->Canvas->CopyRect(Palette->CellRect(Palette_selected_col, Palette_selected_row),FrontColor->Canvas, TRect(0,0,12,12));

   }

}

Процедура используемая фигурами для установки толщины кисти и цвета.

void __fastcall TFmain::SBPenMouseDown(TObject *Sender,

      TMouseButton Button, TShiftState Shift, int X, int Y)

{

   if(!Shift.Contains(ssLeft))// если нажата правая кнопка

   {

      cv->Visible = true;//свойства (установка размера кисти, выбор цвета)

      cv->Panel1->Color = FrontColor->Canvas->Brush->Color;

   }

}

 

 

 

Процедура установки размера холста.

void __fastcall TFmain::FNewClick(TObject *Sender)

{

   TF = new TFdoc(Application);

   if (!TF) return;

   TF->BitMap = new Graphics::TBitmap;

   TF->Caption = "Документ " + IntToStr(MDIChildCount);

   FNewList->ShowModal();//параметры нового листа

   // Устанавливаем размеры  холста и битмапа

   TF->PaintBox1->Width = StrToInt(FNewList->CSpinEdit1->Text);

   TF->PaintBox1->Height = StrToInt(FNewList->CSpinEdit2->Text);

   TF->BitMap->Width = StrToInt(FNewList->CSpinEdit1->Text);

   TF->BitMap->Height = StrToInt(FNewList->CSpinEdit2->Text);

   // Заливаем холст

   TF->BitMap->PixelFormat = pf24bit;

   TF->PaintBox1->Canvas->Brush->Color = clWindow;

   TF->PaintBox1->Canvas->FillRect(TRect(0, 0, TF->PaintBox1->Width, TF->PaintBox1->Height));

   // задаем размеры формы

   TF->Width = StrToInt(FNewList->CSpinEdit1->Text) + 10;

   TF->Height = StrToInt(FNewList->CSpinEdit2->Text) + 35;

}

Процедура вызова справки

void __fastcall TFmain::N4Click(TObject *Sender)

{

ShellExecute(Handle,"open","sprava.chm",NULL,NULL,SW_SHOWNORMAL);

 

 

 

Системные требования

Требование  к операционной системе минимальные. Операционная система должна быть Windows 95 / 98/ Me / NT / 2000 / XP/Vista/7 . Само приложение занимает 200 Кб, справочная система 10,8 Кб , для рисунка требуется не менее 351 Кб свободного места дискового пространства.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

В данной курсовой работе была решена задача разработки графического редактора с помощью  языка программирования С++ в среде программирования C++Builder 6.0. Данная программа позволяет открывать, изменять и сохранять готовые рисунки, создавать новые. Графический редактор обладает набором инструментов( кисть, карандаш, ластик, линия, заливка, выделение объекта ) и палитрой цветов Также палитру можно изменять, создавать более светлые или более темные оттенки. Реализована функция смешивания цветов . Программа обладает достаточно простым и знакомым интерфейсом , обладает минимальными требованиями к системе, оснащена подробной справочной системой.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  литературы

  1. Архангельский А. Я. – Приемы программирования в C++Builder 6 и 2006, издательство «Бином-Пресс», 2006г. 141077, Королев, Московской обл., ул.50 лет ВЛКСМ, 4-г.

  1. Культин Н.Б. С/C++ в примерах и задачах. - -  СПб. : БХВ – Петербург, 2001. – 288 с., ил.

    1. Х.М. Дейлт, П.Д. Дейлт.  Как программировать на С++. Москва 1998год

Интернет ресурсы:

  • http://realcodding.ru
  • http://www.tdoc.ru 

и др.

 

 

 


Информация о работе Графические объекты