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

#ifndef gui_buttonH
#define gui_buttonH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------


#include "font.h"
#include <ExtCtrls.hpp>


class Tgui_button_Form : public TForm
{
__published:	// IDE-managed Components
    TTimer *mouseLeaveTimer;
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
    void __fastcall FormClick(TObject *Sender);
    void __fastcall mouseLeaveTimerTimer(TObject *Sender);
private:	// User declarations
public:		// User declarations

        __fastcall Tgui_button_Form(TComponent* Owner);

        //[2012.04.29.일][완료!!!]
        __fastcall ~Tgui_button_Form(void);

        //[서브클래싱]
        //{
            void __fastcall WndProc(Messages::TMessage &Message);
        //}

        //[VAR]
        //{
            //[환경변수]
            //{
                //[2007.10.02.화][추가!!!]
                struct  IDE_OPTION   *_ide_option;

            //}

            //[실제 그리는 영역]{------
            Graphics::TBitmap  *_bmp_;
            //}------------------------

            //[사용글꼴]{--------------
            struct FONTPACK     _font;
            //}------------------------

            //버튼 문자열.(한글 32 자면 충분할듯)
            char                _caption[64];
            //caption 을 출력할 버튼상의 위치.
            int                 _caption_x;
            int                 _caption_y;
            //자동으로 문자가 버튼의 중간에 위치하도록한다.(기본값 : true)
            bool                _caption_autopos;

            //버튼이 눌린 상태라면 true.
            bool                _down;

            //마우스포인터가 안에 있는 경우는 true.
            //이는 OnClick [동작함수] 를 만들기 위하여 필요하다.
            //(BASE : false)
            //[2018.04.15.일][추가!!!]{-----------------------------------------------
            //<Tosx_InstallBox_Form::_EVENT_MouseEnter_osx_Btns()> 에서 마우스 이동시
            //어떤 버튼인지 구분하기 위하여 사용한다.
            //}-----------------------------------------------------------------------
            bool                _in;

            //눌린 버튼의 종류를 기록한다.
            int                 _mouse_button;
            //{
                #define  d_mouse_null    0
                #define  d_mouse_left    1
                #define  d_mouse_right   2
                #define  d_mouse_middle  3
            //}

            //[2008.02.03.일][추가!!!]{-----------------------------------------
            //[풍선도움말] 에 출력할 문자열을 가진다.
            //단, 메모리 낭비를 막기 위하여 해당 사용이 설정된 경우만 처리한다.
            bool   _balloonHelpUse; //(기본 : false)

            //동적 생성시 크기를 주어 설정한다.
            char  *_balloonHelpStr;
            //}-----------------------------------------------------------------

            //[2009.04.07.화][추가!!!]
            //문자색을 지정한다.
            int   _fontColor;

            //[2009.10.02.금][추가!!!]
            //바탕색을 지정한다.
            int   _backColor;

            //[2011.01.15.토][추가!!!]
            //보통문자, 굵은 문자등 [문자형식] 을 지정한다.
            int   _fontStyle;

            //[2018.04.18.수][추가!!!]
            //[마우스진입] 시 선택색(가선택)을 지정.
            int   _selectColor;

        //}

        //[EVENT 함수]
        //{
            //[주의!!!]{------------------------------------------------------------------------
            //__closure 는 BCB 에만 있는 것이나 멤버함수 함수포인터를 사용하기 위하여 사용한다.
            //}---------------------------------------------------------------------------------

            //버튼의 동작에 따른 처리 함수 포인터를 설정한다.
            void __fastcall (__closure * _EVENT_Down)(void);
            void __fastcall (__closure * _EVENT_Up)(void);
            void __fastcall (__closure * _EVENT_Click)(void);

            void __fastcall (__closure * _EVENT_MouseEnter)(void);
            void __fastcall (__closure * _EVENT_MouseLeave)(void);
        //}

        //[FUNCTION]
        //{
            //[2008.02.03.일][완료!!!]{--------------------
            void __fastcall _BalloonHelpUse(bool    pUse);
            void __fastcall _BalloonHelpStr(char   *pStr);
            //}--------------------------------------------

            //[2018.04.18.수][완료!!!]
            void __fastcall _Shape(void);

            //[속성]
            //{
                //[2006.11.06.월][완료!!!]
                void __fastcall _Left(int  pLEFT);
                void __fastcall _Top(int  pTOP);
                void __fastcall _Width(int  pWIDTH);
                void __fastcall _Height(int  pHEIGHT);
                void __fastcall _Caption(char  *pCAPTION);
                void __fastcall _Caption_X(int  pCAPTIONx);
                void __fastcall _Caption_Y(int  pCAPTIONy);
                //[2006.11.09.목][완료!!!]
                void __fastcall _Caption_AutoPos(bool  pAUTOPOS);

                //[2009.04.07.화][완료!!!]
                void __fastcall _FontColor(int  pFontColor);

                //[2011.01.15.토][완료!!!]
                void __fastcall _FontStyle(int  pFontStyle);

                //[2009.10.02.금][완료!!!]
                void __fastcall _BackColor(int  pBackColor);

                //[2018.04.18.수][완료!!!][추가!!!]
                void __fastcall _SelectColor(int  pSelectColor);

            //}

            //[2006.11.06.월][완료!!!]
            void __fastcall _Draw(void);

            //[2007.11.30.금][완료!!!]
            void __fastcall _BtnUp(void);

        //}


};
//---------------------------------------------------------------------------
extern PACKAGE Tgui_button_Form *gui_button_Form;
//---------------------------------------------------------------------------
#endif
