Суббота, 18.05.2024, 19:15
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Форма входа
ДРУЗЬЯ САЙТА

Вызвать мастера в Красноярске

8 983 207 5474

8 902 918 9334

8 933 332 3164

---------------------------------

Запчасти бытткхники

  • Велес т.2935600
  • СЦ Близнецов т.2296595
  • Вираж
  • Красраб 110 т.2589503
  • Комплекстур Щорса30 т.2606797
  • Радиодетали

  • Якорный 9 т.2688317
  • Воронова 16 т.2202990
  • Красраб 125а т.2456544
  • Профи т.2702737
  • Дайте две т.+79237713323
  • Электрика

  • Электро +
  • Планета электрика
  • ЗАКЛАДКИ
    Поиск
    Статистика

    Онлайн всего: 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();
    }
    //---------------------------------------------------------------------------


    ////////////////////////////////////////////////////////////////////////////////////////////////////////











    Категория: Простые примеры | Добавил: doka (21.06.2013)
    Просмотров: 3405 | Рейтинг: 0.0/0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]