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

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


#include "font.h"

#include "GBase.h"

#include "GButton.h"
#include "GBmpButton.h"
#include "GEdit.h"
#include "GLabel.h"
#include <ExtCtrls.hpp>




class TGMsgBox_Form : public TForm
{
__published:	// IDE-managed Components
    TTimer *captionMoveTimer;
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
        void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
    void __fastcall FormShow(TObject *Sender);
    void __fastcall FormHide(TObject *Sender);
    void __fastcall captionMoveTimerTimer(TObject *Sender);
private:	// User declarations
public:		// User declarations

        __fastcall TGMsgBox_Form(TComponent* Owner);

        //[2012.04.30.월][완료!!!]
        __fastcall ~TGMsgBox_Form(void);

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

        //}

        //[환경변수]
        //{
            //[2018.03.03.토][추가!!!]{---
            //[Linux:wine] 지원을 위한것.
            //}---------------------------

            struct  IDE_OPTION   *_ide_option;

        //}

        //[생성자]
        //{
            //[2012.05.01.화][중요추가!!!]{-------------------------------------------
            //<GVmos> 가 <[]맷돌가상구동> 해제로 즉시 종료되는 경우
            //일부 [그림부품] 이 동작중인 경우 [동적삭제] 된 후에도
            //함수가 실행될수 있다.
            //이를 막기 위하여 이 개체의 [존재 유/무] 를 확인할 변수를 하나 둔다.
            //
            //모든 함수는 반드시 <_this_:true> 인 경우만 처리되어야 한다.
            //
            //[생성자] 에서 반드시 <true> 로 설정하고, [소멸자] 에서 <false> 로 처리.
            //true  : 생성된 상태.
            //false : 삭제된 상태.
            //}-----------------------------------------------------------------------

            bool  _this_;

        //}

        //[사용구분]
        //{
            //[2012.05.04.금][설명!!!]{----------------------------------------------------
            //[편집기] 는 [GVmos] 상의 [공용그림부품] 이 아니므로 <_GUse> 값으로
            //BCB 용으로 사용되는지 [맷돌C:그림부품] 으로 사용되는지 쉽게 구분가능하다.
            //이 구분은 일반 [그림부품] 에는 필요없고, 내부적으로 <MsgBox> 를 사용하는
            //그림부품에서만 필요하다.
            //
            //1) <_GUse==NULL> : BCB 용.
            //
            //2) <_GUse!=NULL> : [맷돌C:그림부품] 용.
            //
            //이 구분은 <MsgBox> 때문인데 [모달/유사모달] 로 처리할지를 결정하기 위한것.
            //
            //1) 의 경우는 [모달] 로 일반 적으로 보여준다.
            //2) 의 경우는 [맷돌C:그림부품] 용으로 [유사모달] 처리된다.
            //   단, 이 경우는 [맷돌C:API] 에서 VMOS 로 구동 처리된다.
            //
            //<API:_GMsgBox_기본_()> 원본 [설계묶음] 안의 설명을 참고한다.
            //
            //[중요!!!]--------------------------------------------------------------------
            //
            //[맷돌C] 용으로 사용하는 경우는 반드시 <GXXX_Create()> 함수를 사용하므로
            //이 함수안에서만 <true> 로 설정되고, 나머지는 <false> 로 설정해야 한다.
            //단, [공용그림부품] 의 경우는 <GXXX_Create()> 를 사용하지 않고 <gui_part.cpp>
            //안에 선언돼 있는 <GPART_GMsgBox_Create()> 등으로 선언되므로 반드시 이 안에서
            //<true> 로 선언해 주어야 한다.
            //}----------------------------------------------------------------------------

            //처음에는 반드시 BCB 용으로 설정.
            bool  _GUse; //(기본값:false)

        //}

        //[VAR]
        //{
            //caption 을 마우스로 끄는 경우 true.
            bool   _captionSelected;

            //[제목줄 이동 관련]
            //{
                //[2018.03.17.토][추가!!!]
                int  deltaLeft;
                int  deltaTop;

            //}

            //[2007.03.27.화][추가!!!]
            //눌린 버튼을 알려준다.(눌린 경우는 true.)
            bool   _buttonOkDown;
            bool   _buttonCancelDown;

        //}

        //[내부 컨트롤]
        //{
            //[부품판]
            //{
                //[2010.02.02.화][추가!!!]{-----------------------
                //실제 내부 부품이 생성되는 [생성판] 역활을 한다.
                //}-----------------------------------------------

                TGBase_Form  *_baseForm;

            //}

            //[2010.02.01.월][수정!!!]
            //이전의 <ImageBox> 가 없어졌으므로 새로 보강한 <GBmpButton> 을 사용한다.
            TGBmpButton_Form  *_imagebox;

            TGButton_Form     *_buttonOk;

            //[2007.03.27.화][추가!!!]
            TGButton_Form     *_buttonCancel;

            //[2009.04.20.월][추가!!!]
            //[한줄 현집기] 를 보여주는 경우에 사용된다.
            TGEdit_Form       *_editEdit;

            //[제목줄] 처리를 위한 [라벨] 을 선언한다.
            //이는 현재 문자열 출력은 반드시 <bmp> 에만 가능하기때문이다.
            TGLabel_Form      *_captionTitleLabel;

            //[2010.02.02.화][추가!!!]
            TGBmpButton_Form  *_closeBmpBtn;
            TGLabel_Form      *_msgLabel;

        //}

        //----------------------------------------------------------------------
        //[생성자]--------------------------------------------------------------
        //----------------------------------------------------------------------

        //[생성자 정보]
        //{
            //[2010.02.25.목][추가!!!]{-----------------------------------------
            //실제 개체는 VMOS 상에서 <void *> 정보 한개(8 Byte)로 이 개체의
            //PC 상의 물리적 위치만 관리하므로 실제 다른 정보를 개체 자체적으로
            //직접 [속성] 으로 관리한다.
            //즉, VMOS 상에서도 개체는 하나의 포인터로만 관리된다.
            //}-----------------------------------------------------------------

            //[식별자]
            //{
                //[2010.02.25.목][추가!!!]{----------------------------------------------------
                //사용자가 지정한 [식별자] 로 모든 그림 부품은 모두 다른 값이 지정돼야 한다.
                //이 [식별자] 는 [알림문] 안에 들어 있어, 알림문이 어떤 [그림부품] 의 것인지
                //VMOS 쪽에서 이 [식별자] 확인 만으로 간단하게 구분할수 있게 하기 위한 것이다.
                //
                //[2012.07.09.월][중요수정!!!]*************************************************
                //
                //[생성자(12)] = { [절대주소(8)] + [부품고유ID(2)] + [GID(2)] }
                //
                //로 <GID> 가 추가 되었으므로 사용하지 않고 주석처리.
                //이는 [맷돌C:이벤트] 처리시 생성자] 만으로 쉽게 <GID> 를 구분처리하기 위한것.
                //unsigned short  _GID;
                //}----------------------------------------------------------------------------

            //}

            //[생성자]
            //{
                //[2010.03.08.월][추가!!!]{---------------------------------------------------
                //[생성자] 의 실제 물리위치를 관리한다.
                //이는 직접 해당 API 로 삭제되는 경우는 해당 함수에서 자동으로 [생성자가]
                //초기화 되지만, 다른 [그림부품] 에 생성된 경우, 이 [그림부품] 이 삭제될때
                //자동으로 같이 [삭제] 는 되지만, 해당 [생성자] 는 초기화 되지 않기 때문이다.
                //이를 위하여 [생성자] 를 관리하고, [파괴자] 부분에서 직접 해당 초기화 함수를
                //호출하여 반드시 [생성자] 정보를 초기화 해 주어야 한다.
                //}---------------------------------------------------------------------------

                void  *_GPart;

            //}

        //}

        //----------------------------------------------------------------------
        //[속성]----------------------------------------------------------------
        //----------------------------------------------------------------------

        //[알림문자열]
        //{
            //[2012.07.22.일][완료!!!]
            void __fastcall _MsgBox(//표시할 아이콘 종류.
                                    int    pICONindex,
                                    //전달 글.
                                    char  *pMESSAGE);

            //[2012.07.22.일][완료!!!]
            bool __fastcall _MsgBox_OkCancel(//표시할 아이콘 종류.
                                             int    pICONindex,
                                             //전달 글.
                                             char  *pMESSAGE);

            //[2012.07.22.일][완료!!!]
            bool __fastcall _MsgBox_Edit(//표시할 아이콘 종류.
                                         int    pIconIndex,
                                         //전달 글.
                                         char  *pMessage);

            //[정의]
            //{
                //기본은 회사로고.
                #define  d_MSGBOX_default     0
                //!.
                #define  d_MSGBOX_info        1
                //?.
                #define  d_MSGBOX_question    2
                //X.
                #define  d_MSGBOX_error       3

            //}

        //}

        //[테두리]
        //{
            //[VAR]
            //{
                int  _borderColor;

            //}

            //[2010.02.03.수][완료!!!]
            void __fastcall _BorderColor(int  pBorderColor);

        //}


        //[외곽선]
        //{
            //[VAR]
            //{
                int  _outLineColor;

            //}

            //[2010.02.03.수][완료!!!]
            void __fastcall _OutLineColor(int  pOutLineColor);

        //}

        //[바탕]
        //{
            //[VAR]
            //{
                int  _backColor;

            //}

            //[2010.02.03.수][완료!!!]
            void __fastcall _BackColor(int  pBackColor);

        //}

        //[부품색]
        //{
            //[VAR]
            //{
                //[2010.02.05.금][추가!!!]
                //내부에 사용된 부품의 색을 일괄 지정한다.
                int  _partColor;

            //}

            //[2019.02.16.토][완료]
            void __fastcall _PartColor(int  pPartColor);

        //}

        //[그림색]
        //{
            //[VAR]
            //{
                //[2010.06.20.일][추가!!!]
                //그림색을 관리한다.
                int  _iconColor;

            //}

            //[2010.06.20.일][완료!!!]
            void __fastcall _IconColor(int  pIconColor);

        //}

        //[이벤트 사용 유/무]
        //{
            //[2012.07.20.금][추가!!!]{----------------------------------------------
            //[이벤트] 사용설정을 위한 것.
            //기본적으로 모두 사용하지 않는 상태이다.
            //이는 오직 [맷돌-C] 안에서 사용될때만 적용된다.
            //
            //[G.M.RC.BASiC-IDE] 를 [맷돌C] 로 제작하는 과정에서 필요성이 의해 추가.
            //}----------------------------------------------------------------------

            //보여지는 경우.
            bool  _evtShow;

            //사라지는 경우.
            bool  _evtHide;

        //}

        //[기타 속성 전문 처리 함수]
        //{
            //[2010.02.03.수][추가!!!]{-------------------------------------------------
            //이곳에는 [속성] 이 없으나 각각의 [부품] 에 직접 설정하는 함수를 정의한다.
            //}-------------------------------------------------------------------------

            //[2010.02.03.수][완료!!!]
            void __fastcall _BtnBackColor(int  pBtnBackColor);

            //[2010.02.03.수][완료!!!]
            void __fastcall _BtnFontColor(int  pBtnFontColor);

            //[2010.02.03.수][완료!!!]
            void __fastcall _BtnFontStyle(int  pBtnFontStyle);

            //[2010.02.03.수][완료!!!]
            void __fastcall _MsgFontColor(int  pMsgFontColor);

            //[2010.02.03.수][완료!!!]
            void __fastcall _MsgFontStyle(int  pMsgFontStyle);

            //[2010.02.03.수][완료!!!]
            void __fastcall _CaptionFontColor(int  pCaptionFontColor);

            //[2010.02.03.수][완료!!!]
            void __fastcall _CaptionFontStyle(int  pCaptionFontStyle);

            //[2010.03.08.월][완료!!!]
            void __fastcall _CaptionBackColor(int  pCaptionBackColor);

        //}

        //[EVENT FUNCTION]
        //{
            void __fastcall _EVENT_ButtonClick_Ok(void);

            //[2007.03.27.화][추가!!!]
            void __fastcall _EVENT_ButtonClick_Cancel(void);

            //[2009.04.20.월][완료!!!]
            void __fastcall _EVENT_KeyEnter_edit_Edit(void);

            //[2010.02.02.화][완료!!!]
            void __fastcall _EVENT_CloseButton_Click(void);

        //}

        //[FUNCTION]
        //{
            //[2010.02.02.화][완료!!!]
            void __fastcall _Shape(void);

            //[2010.02.02.화][완료!!!]
            void __fastcall _Border(void);

        //}


};

//[API GUI 지원함수]
//{
    //[2012.07.09.월][완료!!!]
    void __fastcall GMsgBox_Create(//개체 생성자.
                                   void            *pPart,
                                   //모체 생성자.
                                   void            *pMother,
                                   //사용자가 직접 지정한 [식별자].
                                   unsigned short   pID,
                                   int              pLeft,
                                   int              pTop,
                                   //생성후 보일것인지 아닌지.
                                   bool             pVisible);

    //[2012.07.09.월][완료!!!]
    void __fastcall GMsgBox_Delete(//개체 생성자.
                                   void  *pPart);

    //[2012.07.09.월][완료!!!]
    void __fastcall GMsgBox_CreatorInit(//개체 생성자.
                                        void  *pPart);

//}


//---------------------------------------------------------------------------
extern PACKAGE TGMsgBox_Form *GMsgBox_Form;
//---------------------------------------------------------------------------
#endif
