Меню сайта
Категории раздела
Простые примеры [34] |
OpenGL [4] |
Фрактал [9] |
Windows API [2] |
Консоль [12] |
ДРУЗЬЯ САЙТА
Вызвать мастера в Красноярске
8 983 207 5474
8 902 918 9334
8 933 332 3164
---------------------------------
Запчасти бытткхники
Радиодетали
Электрика
ЗАКЛАДКИ
Поиск
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » C++ Builder » Простые примеры |
КАК СОЗДАТЬ ПРОИЗВОДНЫЙ КЛАСС ОТ БАЗОВОГО TIMAGE В C++ BUILDER XE;
КАК СОЗДАТЬ ПРОИЗВОДНЫЙ КЛАСС ОТ БАЗОВОГО TImage В C++ BUILDER XE; //------Добавленный модуль с нашим классом--------------------------------------------------------------------- #ifndef ClasstH #define ClasstH //--Для работы с базовым Image и Меню #include <Vcl.ExtCtrls.hpp> #include <Vcl.Menus.hpp> //--Для работы с диалогом--------------------- #include <Vcl.Dialogs.hpp> #include <Vcl.ExtDlgs.hpp> //---------------------------------------------------------------------------- //--Для работы с соответствующими файлами #include <Vcl.Imaging.jpeg.hpp> #include <Vcl.Imaging.GIFImg.hpp> #include <Vcl.Imaging.pngimage.hpp> //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- class TStImage: public TImage { public: int xo,yo,flag; TPopupMenu *PopSt; TMenuItem *ItemSt[4]; TOpenPictureDialog *OpenPictureDialog2; //методы для меню; имя может быть любым параметр только таким void __fastcall MOnClick0(TObject *Sender); void __fastcall MOnClick1(TObject *Sender); void __fastcall MOnClick2(TObject *Sender); void __fastcall MOnClick3(TObject *Sender); //можно создать свой метод и подкл его к свойству OnMouseMove //базового класса; имя может быть любым параметры только такими void __fastcall MouseMovess(TObject *Sender,TShiftState Shift,int X, int Y); //или переопределить методы базового класса //имя и параметры только как в базовом классе и DYNAMIC обязателен DYNAMIC void __fastcall MouseMove(TShiftState Shift,int X, int Y); DYNAMIC void __fastcall MouseUp(TMouseButton Button,TShiftState Shift, int X, int Y); DYNAMIC void __fastcall MouseDown(TMouseButton Button,TShiftState Shift, int X, int Y); __fastcall TStImage(TWinControl* Xoz); __fastcall ~TStImage(void); }; //-------------------------------------------------------------------------- #endif ////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- #pragma hdrstop #include "Classt.h" //#include "Unit1.h" //раскоментируй что бы видеть Form1 если нужно //--------------------------------------------------------------------------- #pragma package(smart_init) //------Конструктор----------------------------------------------------------- __fastcall TStImage::TStImage(TWinControl* Xoz) : TImage(Xoz) // : TImage(Xoz) вызываем конструктор базового класса { //Form1->Caption="Производный класс";//избегайте таких обращений //тогда класс будет не зависимым от интерфейса Parent=Xoz; // Xoz родитель на него ляжет наш StImage Visible=false; Stretch=true; flag=0; Width=200; Height=200; Canvas->Brush->Color = clWhite; Canvas->FillRect(Canvas->ClipRect ); //--Наш метод подключен к свойству OnMouseMove базового класса-- OnMouseMove = MouseMovess; //создаем и подключ меню PopSt=new TPopupMenu(Xoz); for(int i=0;i<4;i++){ ItemSt[i]=new TMenuItem(Xoz); PopSt->Items->Add(ItemSt[i]); } ItemSt[0]->Caption="Open"; ItemSt[0]->OnClick=MOnClick0;//подкл наши методы ItemSt[1]->Caption="Visible"; ItemSt[1]->OnClick=MOnClick1; ItemSt[2]->Caption="BringToFront"; ItemSt[2]->OnClick=MOnClick2; ItemSt[3]->Caption="SendToBack"; ItemSt[3]->OnClick=MOnClick3; PopupMenu= PopSt; //создаем и подключ диалог OpenPictureDialog2 = new TOpenPictureDialog(Xoz) ; } //---------Деструктор------------------------------------------------------ __fastcall TStImage::~TStImage(void) { delete OpenPictureDialog2;//последний создан первый удален for(int i=0;i<4;i++){ delete ItemSt[i]; ItemSt[i] = NULL; } delete PopSt; PopSt = NULL; } //------------------------------------------------------------------------- void __fastcall TStImage::MOnClick0(TObject *Sender) { //загружаем картинку if( OpenPictureDialog2->Execute() ) { Picture->LoadFromFile(OpenPictureDialog2->FileName ); } } //-----методы для меню---------------------------------------------------- void __fastcall TStImage::MOnClick1(TObject *Sender) { //прячем и стираем Visible = false; Graphics::TBitmap *BrushBmp = new Graphics::TBitmap; BrushBmp->Width= Width; BrushBmp->Height= Height; BrushBmp->Canvas->Brush->Color = clWhite; BrushBmp->Canvas->FillRect(BrushBmp->Canvas->ClipRect ); Picture->Assign(BrushBmp); delete BrushBmp; } //------------------------------------------------------------------------- void __fastcall TStImage::MOnClick2(TObject *Sender) { BringToFront(); // в верх } //------------------------------------------------------------------------- void __fastcall TStImage::MOnClick3(TObject *Sender) { SendToBack(); // в низ } //------------------------------------------------------------------------- //--Наш метод подключен к свойству OnMouseMove базового класса----------------------------------------------------------------- //--Вариант-1 void __fastcall TStImage::MouseMovess(TObject *Sender,TShiftState Shift,int X, int Y) { //if(flag==1){ //Left=Left+X-xo; //Top=Top+Y-yo; //} } //--Вариант-2 переопределяем метод базового класса-------------------------------------------------------------------------------- void __fastcall TStImage::MouseMove(TShiftState Shift,int X, int Y) { TImage::MouseMove(Shift,X,Y); //Сначала вызовем метод базового класса if(flag==1){//если флаг 1 то вычисляем новые значения Left, Top то есть перемещаем Left=Left+X-xo; Top=Top+Y-yo; } } //-------------------------------------------------------------------- void __fastcall TStImage::MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y) { TImage::MouseUp(Button,Shift,X,Y); flag=0; } //-------------------------------------------------------------------- void __fastcall TStImage::MouseDown(TMouseButton Button, TShiftState Shift, int X, int Y) { TImage::MouseDown(Button,Shift,X,Y); xo=X; yo=Y; //запоминаем flag=1; } //--------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// //---Модуль формы главный модуль------------------------------------------------------------------------ #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include "Classt.h" //Подключаем наш класс #include <Vcl.ExtCtrls.hpp> #include <Vcl.Menus.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *N1; TMenuItem *Add1; TMenuItem *Exit1; void __fastcall FormCreate(TObject *Sender); void __fastcall FormDestroy(TObject *Sender); void __fastcall Add1Click(TObject *Sender); void __fastcall Exit1Click(TObject *Sender); private: // User declarations public: // User declarations TStImage *MyImage[5]; //массив из пяти указателей __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif //////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { for(int i=0;i<5;i++){ //создаем 5 наших новых TStImage MyImage[i] = new TStImage(Form1) ; MyImage[i]->Tag=i; //чтобы чем-то отличались } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { for(int i=0;i<5;i++){ delete MyImage[i]; } //освобождаем память } //--------------------------------------------------------------------------- void __fastcall TForm1::Add1Click(TObject *Sender) { for(int i=0;i<5;i++){ //делаем видимым только одну картинку if( MyImage[i]->Visible == false) { MyImage[i]->Visible = true ; return; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::Exit1Click(TObject *Sender) { Form1->Close(); } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////// | |
Просмотров: 3405 | Рейтинг: 0.0/0 |