Исходный код. Кафедра информационных технологий
Кафедра информационных технологий И прикладной математики ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к лабораторной работе №7 по дисциплине «Программирование и алгоритмизация»
Группа: 3АУ-39Д Студент: Чепиков И.С._______ Преподаватель: Артамкин С.Н. _______
Оглавление Исходный код. 3 Диаграмма классов. 5
Исходный код proxy.cpp
#include <vcl.h> #include "main.h" #include "canvas.h" //--------------------------------------------------------------------------- // Subject. Абстрактный класс - объявляет интерфейс. //--------------------------------------------------------------------------- class Graphic { public: virtual void CreateImg (AnsiString path) = 0; virtual void ChangeSize (int h, int w) = 0; virtual void DeleteImg () = 0; };
//--------------------------------------------------------------------------- // Real Subject. Реализует интерфейс Graphic для отображения изображений: //--------------------------------------------------------------------------- class Image: public Graphic { public: void CreateImg (AnsiString path) { gBitmap = new Graphics::TBitmap(); gBitmap->LoadFromFile(path); TRect tRect(0,0,Form2->Width, Form2->Height); Form2->Canvas->StretchDraw(tRect,gBitmap); };
inline void ChangeSize (int w, int h) { TRect tRect(0,0,w,h); Form2->Repaint(); Form2->Canvas->StretchDraw(tRect,gBitmap); };
void DeleteImg () { delete this->gBitmap; gBitmap = NULL; Form2->Refresh(); };
bool GetStat () { if (this->gBitmap) return true; else return false; }
private: Graphics::TBitmap* gBitmap; };
//--------------------------------------------------------------------------- // Proxy. Имеет тот же интерфейс, что и Image: //--------------------------------------------------------------------------- class ImageProxy: public Graphic { public: void CreateImg (AnsiString path) { img.CreateImg(path); }; void ChangeSize (int h, int w) { img.ChangeSize(h, w); }; void DeleteImg () { img.DeleteImg(); };
bool GetStat () { img.GetStat(); }
private: Image img; // позволяет заместителю обратиться к реальному субъекту }; //---------------------------------------------------------------------------
main.cpp
... #include "proxy.cpp" //--------------------------------------------------------------------------- TForm1 *Form1; ImageProxy img_p; ... //--------------------------------------------------------------------------- void __fastcall TForm1::OpenClick(TObject *Sender) { if (img_p.GetStat()) { img_p.DeleteImg(); }
if (OpenDialog1->Execute()) { img_p.CreateImg (OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::CloseClick(TObject *Sender) { if (img_p.GetStat()) { img_p.DeleteImg(); } } //---------------------------------------------------------------------------
canvas.cpp
... //--------------------------------------------------------------------------- void __fastcall TForm2::FormResize(TObject *Sender) { img_p.ChangeSize(Form2->Width, Form2->Height); } //---------------------------------------------------------------------------
|