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

#include <vcl.h>
#pragma hdrstop

#include "ide_msgbox.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tide_msgbox_Form *ide_msgbox_Form;
//---------------------------------------------------------------------------


#include "main.h"
#include "ide_main.h"
#include "ide_library.h"

//[2010.04.03.토][추가!!!]
#include "ide_editor.h"

//[2018.02.16.금][추가!!!]
#include "gui.h"

#include "msg_msg.h"


__fastcall Tide_msgbox_Form::Tide_msgbox_Form(TComponent* Owner)
        : TForm(Owner)
{
  //[VAR]
  //{
      int         width, height;
      AnsiString  bmp_path;

      //[2018.02.17.토][추가!!!]
      int  color;

  //}

  //[환경변수]
  //{
      //[2007.10.02.화][추가!!!]
      IDE_Get_Option(&_ide_option);

  //}

  //[초기화]
  //{
      //크기는 표시되는 내용에 따라 자동으로 처리 되지만 일단 임의 값을 기록한다.
      this->Left     = 0;
      this->Top      = 0;
      this->Width    = 400;
      this->Height   = 200;
      this->Color    = clWhite;

      //실제 그림 영역을 생성한다.
      _bmp_ = new Graphics::TBitmap;

      //그림 영역 크기 설정.
      _bmp_->Width       = this->Width;
      _bmp_->Height      = this->Height;

      //24bit bitmap 으로 지정한다.
      _bmp_->PixelFormat = pf24bit;
     
  //}

  //[글꼴 설정]
  //{
      //[기본 끌꼴 등록]{------------------------------------------------
      //모든 프로그램에서 기본적으로 사용하는 [system 글꼴] 을 등록한다.
      FONTPACK_SetDefault(&_font);
      //}----------------------------------------------------------------

      //[editor debug margin]
      //{
          _font.margin_size = 0;
      //}

      //문자 margin 을 설정한다.
      _font.offset_left   = 0;
      _font.offset_right  = 0;
      _font.offset_top    = 0;
      _font.offset_bottom = 0;

      //[2010.01.26.화][추가!!!]{---
      _font.en_offset_left  = 0;
      _font.en_offset_right = 0;
      //}---------------------------
  //}

  //[속성초기화]
  //{
      //기본적으로 선택되지 않은 상태.
      _caption_selected = false;

      _button_ok_down     = false;
      _button_cancle_down = false;
  //}

  //[caption 설정]
  //{
      //caption 문자열.(크게 바뀔일이 없다.)
      STR_Assign(_caption, " 기계닉스 알림글 ");

      //높이 지정.
      _caption_height = 22;

      //caption 문자열의 width 를 구한다.
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, _caption, &width, &height);

      //실제 사용할 caption 폭을 설정한다.
      //_font.margin_size 는 처음 기본값인 0 을 사용한다.(한번만 그려주면 된다.)
      _caption_width = width + (_font.margin_size * 2) + 2;

  //}

  //[컨트롤 생성]
  //{
      //[이미지상자]
      //{
          _imagebox          = new Tgui_imagebox_Form(this);
          _imagebox->Parent  = this;
          _imagebox->Visible = true;

          //[초기화]
          //{
              //그림 할당하기.
              bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\msgbox\\msgbox.bmp";
              
              _imagebox->_Left(d_border_width + 4);
              _imagebox->_Top(_caption_height + 4);
              _imagebox->_Width(38);
              _imagebox->_Height(36);
              _imagebox->_Image_Width(38);
              _imagebox->_Image_Height(36);
              _imagebox->_Border(false);
              _imagebox->_Bitmap(bmp_path);

              //[index 로 접근]
              //{
                  //---------------------------------------
                  //그림조각을 index 로 접근하여 사용한다.
                  _imagebox->_IndexBitmap(true);
                  //조각그림 하나의 폭은 38 이다.
                  _imagebox->_IndexWidth(38);
                  _imagebox->_Index(0);
                  //---------------------------------------
              //}
          //}
      //}

      //[한줄 편집기]
      //{
          _edit_Edit          = new Tgui_edit_Form(this);
          _edit_Edit->Parent  = this;
          _edit_Edit->Visible = false;

          _edit_Edit->_Width(80);
          _edit_Edit->Left = (20);
          _edit_Edit->Top  = (20);

          //[배경색 설정]
          //{
              //[2018.02.17.토][추가!!!]{------------------------------------------
              //전체 바탕이 [흰색] 으로 <edit> 의 것과 구분이 안되므로 [배경색] 을
              //기본 [테마색:밝기적용] 으로 설정해 준다.
              //}------------------------------------------------------------------
              
              BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_MsgBoxEdit, &color);
              _edit_Edit->_BackColor(color);

          //}

          //[2010.03.26.금][수정!!!]{----------------------------------------------
          //원래 " " 으로 처음에는 공백을 추가해 놓았으나 값을 입력할때 이 공백이
          //보이지 않아서 숫자 검사시 [숫자] 로 인식하지 못하는 문제가 발생하였다.
          //따라서 금일 아예 처음에는 아무것도 없는 것으로 수정한다.
          //이 경우에도 아무 이상없이 잘 동작하는 것을 확인하였다.
          _edit_Edit->_EDIT_TextOut("");
          //}----------------------------------------------------------------------

          _edit_Edit->_EVENT_KeyEnter = _EVENT_KeyEnter_edit_Edit;

          //[2012.05.20.일][추가!!!]
          _edit_Edit->_EVENT_KeyDown_Esc = _EVENT_KeyDown_Esc_All;

      //}

      //["확인" 버튼]
      //{
          _button_ok          = new Tgui_button_Form(this);
          _button_ok->Parent  = this;
          _button_ok->Visible = false;

          //[초기화]
          //{
              _button_ok->_down = false;

              _button_ok->_Left(20);
              _button_ok->_Top(20);
              _button_ok->_Width(60);
              _button_ok->_Height(20);

              //버튼의 중앙에 문자가 표시 되도록 한다.
              _button_ok->_Caption_AutoPos(true);
              _button_ok->_Caption("확인");

              //_button_ok->_EVENT_Down = _EVENT_ButtonDown;
              //_button_ok->_EVENT_Up   = _EVENT_ButtonUp;
              _button_ok->_EVENT_Click= _EVENT_ButtonClick_Ok;
              
          //}

      //}

      //["취소" 버튼]
      //{
          //[2007.03.27.화][추가!!!]
          _button_cancle          = new Tgui_button_Form(this);
          _button_cancle->Parent  = this;
          _button_cancle->Visible = false;

          //[초기화]
          //{
              _button_cancle->_down = false;

              _button_cancle->_Left(85);
              _button_cancle->_Top(20);
              _button_cancle->_Width(60);
              _button_cancle->_Height(20);

              //버튼의 중앙에 문자가 표시 되도록 한다.
              _button_cancle->_Caption_AutoPos(true);
              _button_cancle->_Caption("취소");

              //_button_cancle->_EVENT_Down = _EVENT_ButtonDown;
              //_button_cancle->_EVENT_Up   = _EVENT_ButtonUp;
              _button_cancle->_EVENT_Click= _EVENT_ButtonClick_Cancle;
          //}
      //}
  //}

  return;

}

__fastcall Tide_msgbox_Form::~Tide_msgbox_Form(void)
{
  //[2012.04.29.일][수정!!!]{---------------
  //안전을 위하여 선언된 역순으로 삭제한다.
  //}---------------------------------------

  if(_button_cancle != NULL) { delete _button_cancle; _button_cancle = NULL; }

  if(_button_ok != NULL) { delete _button_ok; _button_ok = NULL; }

  if(_edit_Edit != NULL) { delete _edit_Edit; _edit_Edit = NULL; }

  if(_imagebox != NULL) { delete _imagebox; _imagebox = NULL; }

  if(_bmp_ != NULL) { delete _bmp_; _bmp_ = NULL; }

}

//[서브클래싱]------------------------------------------------------------------

void __fastcall Tide_msgbox_Form::WndProc(Messages::TMessage  &Message)
{
  //[2006.12.12.화][생성!!!]{-----------------------------------------------------
  //TForm 의 경우는 바탕을 칠하고 OnPaint() 를 발생하게 되므로 실제 _Draw() 를
  //OnPaint() 에서 사용하는 경우는 크기가 변경되는 경우 바로 칠해지지 않아서
  //하얀색 바탕이 그대로 나오게 되어 보기 좋지 않게 된다.
  //따라서 TForm 자체의 바탕을 그리는 WM_ERASEBKGND 에서 바로 _Draw() 를 사용하여
  //그리고 OnPaint() 는 처리하지 않는다.
  //C++Builder 와 같이 완벽하게 처리되는 깜박임이 전혀 없는 화면을 만들수 있다.
  //
  //[2012.05.20.일][수정!!!]------------------------------------------------------
  //}-----------------------------------------------------------------------------

  if     (Message.Msg == WM_ERASEBKGND)
  {
    _Draw();

    //바로 죵료하지 않으면 WM_ERASEBKGND 메세지가 다음 TForm::WndProc(Message); 에서
    //다시 처리 되어 TForm->Color 로 칠해지게 되어 _Draw() 로 그린 것이 다 지워지므로
    //바로 종료한다.
    return;

  }
  else if(Message.Msg == WM_KEYDOWN)
  {
    //[2012.05.20.일][추가!!!]{----
    //<ESC 키> 처리를 위하여 추가.
    //}----------------------------

    switch(Message.WParam)
    {
      case VK_ESCAPE : //[키:ESC]
      {
        //[대화상자] 닫기.
        //기본적으로는 [취소] 가 된다.
        _EVENT_KeyDown_Esc_All();

        Message.Result = true;
        return;

      } break;

    }

  }

  //[기본처리]
  //{
      //기본 메세지는 반드시 처리 되어야 한다.
      TForm::WndProc(Message);
  //}

  return;

}

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

void __fastcall Tide_msgbox_Form::_FormCut(void)
{
  //[2006.11.07.화][생성!!!]{----------------------------------------------------
  //폼의 caption 의 모양을 보기 좋게 하기 위하여 caption 의 영역을 제외한 나머지
  //영역의 폼을 제거해 준다.(구멍을 뚫어준다.)
  //여러개의 [사각형] 모양으로 구멍을 뚫어준다.
  //
  //[2012.07.12.목][수정!!!]-----------------------------------------------------
  //[실시간 선언 정보판] 처럼 왼쪽 아래 모서리를 깍아준다.
  //}----------------------------------------------------------------------------

  //[VAR]
  //{
      HRGN    rgn_main,                              //대상 폼.
              rgn_cut_rect,                          //caption 오른쪽 영역 전부.
              rgn_cut_left_line, rgn_cut_left_dot,   //수평line, dot.
              rgn_cut_right_line, rgn_cut_right_dot; //수평line, dot.

      //[왼쪽:아래:모서리 깍기]
      //{
          //[2012.07.12.목][추가!!!]
          //[왼쪽 아래 모서리] 를 깍는다.
          HRGN    rgn_cut_Edge;

          POINT   pointerPoint3[3];

      //}

  //}


  //[Form 초기화]
  //{
      //포인터 초기화.
      rgn_main = 0;

      //Form 의 영역 정보를 얻는다.
      GetWindowRgn(this->Handle, rgn_main);

      //일단 현재 Form 영역을 지운다.
      DeleteObject(rgn_main);
  //}

  //[영역 생성]
  //{
      //새로운 영역을 생성한다.
      rgn_main = CreateRectRgn(0, 0, this->Width, this->Height);

      //[구멍 뚫을 영역 지정]
      //{
          //caption 오른쪽 영역.
          rgn_cut_rect       = CreateRectRgn(_caption_width, 0, this->Width, 18);

          //좌측 라인.
          rgn_cut_left_line  = CreateRectRgn(0, 0, 2, 1);

          //좌측 점.
          rgn_cut_left_dot   = CreateRectRgn(0, 1, 1, 2);

          //우측 라인.
          rgn_cut_right_line = CreateRectRgn(_caption_width - 2, 0, _caption_width, 1);

          //우측 점.
          rgn_cut_right_dot  = CreateRectRgn(_caption_width - 1, 1, _caption_width, 2);

      //}

      //[왼쪽 아래 모서리 잘라낼 영역 만들기]
      //{
          //[2012.07.12.목][추가!!!]{-----------------------------------
          //[실시간 선언 정보판] 과 같이 [왼쪽:아래] 모서리를 잘라낸다.
          //}-----------------------------------------------------------

          //왼쪽 위 점.
          pointerPoint3[0].x = 0;
          pointerPoint3[0].y = this->Height - d_MsgBoxEdgeSize;

          //왼쪽 아래 점.
          pointerPoint3[1].x = 0;
          pointerPoint3[1].y = this->Height;

          //오른쪽 아래점.
          pointerPoint3[2].x = d_MsgBoxEdgeSize;
          pointerPoint3[2].y = this->Height;

          //[왼쪽 아래 모서리] 삭제.
          rgn_cut_Edge = CreatePolygonRgn(pointerPoint3, 3, ALTERNATE);

      //}

      CombineRgn(rgn_main, rgn_main, rgn_cut_rect, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_left_line, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_left_dot, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_right_line, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_right_dot, RGN_DIFF);

      //[2012.07.12.목][추가!!!]{-----------------------------
      //왼쪽 아래 모서리 삭제.
      CombineRgn(rgn_main, rgn_main, rgn_cut_Edge, RGN_DIFF);
      //}-----------------------------------------------------

      SetWindowRgn(this->Handle, rgn_main, TRUE);
      
  //}

  //[구멍 뚫기]
  //{
      //지정 영역에 구멍을 뚫는다.
      DeleteObject(rgn_cut_rect);
      DeleteObject(rgn_cut_left_line);
      DeleteObject(rgn_cut_left_dot);
      DeleteObject(rgn_cut_right_line);
      DeleteObject(rgn_cut_right_dot);

      //[2012.07.12.목][추가!!!]{---
      //[왼쪽 아래 모서리] 삭제.
      DeleteObject(rgn_cut_Edge);
      //}---------------------------

  //}

  return;

}

/*
void __fastcall Tide_msgbox_Form::_FormCut(void)
{
  //[2006.11.07.화][생성!!!]{----------------------------------------------------
  //폼의 caption 의 모양을 보기 좋게 하기 위하여 caption 의 영역을 제외한 나머지
  //영역의 폼을 제거해 준다.(구멍을 뚫어준다.)
  //여러개의 [사각형] 모양으로 구멍을 뚫어준다.
  //}----------------------------------------------------------------------------

  //[VAR]
  //{
      HRGN    rgn_main,                              //대상 폼.
              rgn_cut_rect,                          //caption 오른쪽 영역 전부.
              rgn_cut_left_line, rgn_cut_left_dot,   //수평line, dot.
              rgn_cut_right_line, rgn_cut_right_dot; //수평line, dot.

  //}


  //[Form 초기화]
  //{
      //포인터 초기화.
      rgn_main = 0;

      //Form 의 영역 정보를 얻는다.
      GetWindowRgn(this->Handle, rgn_main);

      //일단 현재 Form 영역을 지운다.
      DeleteObject(rgn_main);
  //}

  //[영역 생성]
  //{
      //새로운 영역을 생성한다.
      rgn_main = CreateRectRgn(0, 0, this->Width, this->Height);

      //[구멍 뚫을 영역 지정]
      //{
          //caption 오른쪽 영역.
          rgn_cut_rect       = CreateRectRgn(_caption_width, 0, this->Width, 18);

          //좌측 라인.
          rgn_cut_left_line  = CreateRectRgn(0, 0, 2, 1);

          //좌측 점.
          rgn_cut_left_dot   = CreateRectRgn(0, 1, 1, 2);

          //우측 라인.
          rgn_cut_right_line = CreateRectRgn(_caption_width - 2, 0, _caption_width, 1);

          //우측 점.
          rgn_cut_right_dot  = CreateRectRgn(_caption_width - 1, 1, _caption_width, 2);

      //}

      CombineRgn(rgn_main, rgn_main, rgn_cut_rect, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_left_line, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_left_dot, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_right_line, RGN_DIFF);
      CombineRgn(rgn_main, rgn_main, rgn_cut_right_dot, RGN_DIFF);

      SetWindowRgn(this->Handle, rgn_main, TRUE);
  //}

  //[구멍 뚫기]
  //{
      //--------------------------------
      //지정 영역에 구멍을 뚫는다.
      DeleteObject(rgn_cut_rect);
      DeleteObject(rgn_cut_left_line);
      DeleteObject(rgn_cut_left_dot);
      DeleteObject(rgn_cut_right_line);
      DeleteObject(rgn_cut_right_dot);
      //--------------------------------
  //}

  return;

}
*/

void __fastcall Tide_msgbox_Form::_Border(void)
{
  //[2006.11.07.화]{----------------------------------------------------------
  //Form 전체의 테두리를 만든다.
  //두께는 4pixel, 동서남 3 면만 그리면 된다.
  //테두리는 직접 보이는 것이고 내용에 영향을 주지 않아야 하므로 직접 그린다.
  //
  //[2007.03.18.일][수정!!!]--------------------------------------------------
  //1 pixel 의 [통합개발환경] 전체 테두리를 마지막에 그려준다.
  //이는 윤곽을 더 뚜렷하게 하기 위한 것이다.
  //
  //[2012.07.12.목][추가!!!]--------------------------------------------------
  //[왼쪽:아래 모서리] 깍기가 적용되었으므로 이에 맞게 테두리도 이를 반영.
  //}-------------------------------------------------------------------------

  //[VAR]
  //{
      TRect  trect;

      //[2012.07.12.목][추가!!!]
      int    i;
      
  //}

  //[테두리 만들기]
  //{
      //[좌측 테두리]{------------------------------------
      trect.Left   = 0;
      trect.Top    = 0;
      trect.Right  = d_border_width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //[우측 테두리]{------------------------------------
      trect.Left   = _bmp_->Width - d_border_width;
      trect.Top    = 0;
      trect.Right  = _bmp_->Width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //[아래 테두리]{------------------------------------
      trect.Left   = 0;
      trect.Top    = _bmp_->Height - d_border_width;
      trect.Right  = _bmp_->Width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //--------------------------------------------------

      //[왼쪽 아래 모서리]
      //{
          //[2012.07.12.목][추가!!!]{------------------------------
          //왼쪽 아래 모서리에 사선으로 선을 그려 테두리를 만든다.
          //}------------------------------------------------------
          
          _bmp_->Canvas->Pen->Color = _ide_option->color_0;

          for(i = 1; i < 6; i++)
          {
            _bmp_->Canvas->MoveTo(0, this->Height - d_MsgBoxEdgeSize - i);
            _bmp_->Canvas->LineTo(d_MsgBoxEdgeSize + i, this->Height);

          }

      //}

  //}

  //[윤곽선 만들기]
  //{
      //[2007.03.18.일][추가!!!]
      if(d_OPTION_msgbox_outline)
      {
        //[왼쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(0, 2);
        _bmp_->Canvas->LineTo(0, this->Height);

        //[오른쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(this->Width - 1, 0);
        _bmp_->Canvas->LineTo(this->Width - 1, this->Height);

        //[아래쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(0, this->Height - 1);
        _bmp_->Canvas->LineTo(this->Width - 1, this->Height - 1);

        //[제목줄 위쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(2, 0);
        _bmp_->Canvas->LineTo(_caption_width-3, 0);

        //[오늘쪽 위쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width -1 , _caption_height - d_border_width);
        _bmp_->Canvas->LineTo(this->Width - 1, _caption_height - d_border_width);

        //[제목줄 오른쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width -1 , 2);
        _bmp_->Canvas->LineTo(_caption_width -1, _caption_height - d_border_width);

        //[제목줄 왼쪽위 모서리]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(2 , 0);
        _bmp_->Canvas->LineTo(0, 2);

        //[제목줄 오른쪽위 모서리]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width-3 , 0);
        _bmp_->Canvas->LineTo(_caption_width -1, 2);


        //[왼쪽:아래:모서리]
        //{
            //[2012.07.12.목][추가!!!]
            _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
            _bmp_->Canvas->MoveTo(0, this->Height - d_MsgBoxEdgeSize);
            _bmp_->Canvas->LineTo(d_MsgBoxEdgeSize, this->Height);

        //}

      }

  //}

  return;
/*
  //[내부 테두리 만들기]
  //{
      //[2010.12.15.수][추가!!!]{-----------
      //보기 좋게 내부에도 테두리를 만든다.
      //}-----------------------------------

      trect.Left   = d_border_width - 1;
      trect.Top    = _caption_height - 1;
      trect.Right  = this->Width - d_border_width + 1;
      trect.Bottom = this->Height - d_border_width + 1;

      _bmp_->Canvas->Pen->Color   = IDE_COLOR_outline;
      _bmp_->Canvas->Pen->Width   = 1;
      _bmp_->Canvas->Brush->Style = bsClear;

      _bmp_->Canvas->Rectangle(trect);

  //}

  return;
*/
}

/*
void __fastcall Tide_msgbox_Form::_Border(void)
{
  //[2006.11.07.화]{----------------------------------------------------------
  //Form 전체의 테두리를 만든다.
  //두께는 4pixel, 동서남 3 면만 그리면 된다.
  //테두리는 직접 보이는 것이고 내용에 영향을 주지 않아야 하므로 직접 그린다.

  //[2007.03.18.일][수정!!!]
  //1 pixel 의 [통합개발환경] 전체 테두리를 마지막에 그려준다.
  //이는 윤곽을 더 뚜렷하게 하기 위한 것이다.
  //}-------------------------------------------------------------------------

  //[VAR]
  //{
      TRect            trect;
  //}

  //[테두리 만들기]
  //{
      //[좌측 테두리]{-------------------------------
      trect.Left   = 0;
      trect.Top    = 0;
      trect.Right  = d_border_width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //[우측 테두리]{-------------------------------
      trect.Left   = _bmp_->Width - d_border_width;
      trect.Top    = 0;
      trect.Right  = _bmp_->Width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //[아래 테두리]{-------------------------------
      trect.Left   = 0;
      trect.Top    = _bmp_->Height - d_border_width;
      trect.Right  = _bmp_->Width;
      trect.Bottom = _bmp_->Height;

      _bmp_->Canvas->Brush->Color = _ide_option->color_0;
      _bmp_->Canvas->FillRect(trect);
      //---------------------------------------------
  //}

  //[윤곽선 만들기]
  //{
      //[2007.03.18.일][추가!!!]
      if(d_OPTION_msgbox_outline)
      {
        //[왼쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(0, 2);
        _bmp_->Canvas->LineTo(0, this->Height);

        //[오른쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(this->Width - 1, 0);
        _bmp_->Canvas->LineTo(this->Width - 1, this->Height);

        //[아래쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(0, this->Height - 1);
        _bmp_->Canvas->LineTo(this->Width - 1, this->Height - 1);

        //[제목줄 위쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(2, 0);
        _bmp_->Canvas->LineTo(_caption_width-3, 0);

        //[오늘쪽 위쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width -1 , _caption_height - d_border_width);
        _bmp_->Canvas->LineTo(this->Width - 1, _caption_height - d_border_width);

        //[제목줄 오른쪽]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width -1 , 2);
        _bmp_->Canvas->LineTo(_caption_width -1, _caption_height - d_border_width);

        //[제목줄 왼쪽위 모서리]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(2 , 0);
        _bmp_->Canvas->LineTo(0, 2);

        //[제목줄 오른쪽위 모서리]
        _bmp_->Canvas->Pen->Color = IDE_COLOR_outline;
        _bmp_->Canvas->MoveTo(_caption_width-3 , 0);
        _bmp_->Canvas->LineTo(_caption_width -1, 2);

      }

  //}

  return;

  //[내부 테두리 만들기]
  //{
      //[2010.12.15.수][추가!!!]{-----------
      //보기 좋게 내부에도 테두리를 만든다.
      //}-----------------------------------

      trect.Left   = d_border_width - 1;
      trect.Top    = _caption_height - 1;
      trect.Right  = this->Width - d_border_width + 1;
      trect.Bottom = this->Height - d_border_width + 1;

      _bmp_->Canvas->Pen->Color   = IDE_COLOR_outline;
      _bmp_->Canvas->Pen->Width   = 1;
      _bmp_->Canvas->Brush->Style = bsClear;

      _bmp_->Canvas->Rectangle(trect);

  //}

  return;

}
*/

void __fastcall Tide_msgbox_Form::_MsgBox(//표시할 아이콘 종류.
                                          int    pICONindex,
                                          //전달 글.
                                          char  *pMESSAGE)
{
  //[2006.11.08.수][생성!!!]

  //[2006.11.07.화][생성!!!]{---------------------------------------
  //컨트롤의 모양을 만든다.

  //[2007.03.27.화][수정!!!]----------------------------------------
  //이 함수는 "확인" 버튼만 나온다.
  //
  //[2012.03.31.토][수정!!!]----------------------------------------
  //문자열이 출력 폭이 너무 길어도 [화면 크기] 를 넘지 않도록 수정.
  //}---------------------------------------------------------------

  //[VAR]
  //{
      TRect  rect;
      TRect  rect_caption;

      int    w, h;

      //문자열 출력영역 크기 정보.
      int    text_width;
      int    text_height;

      int    width, height;
  //}

  //[안전장치]
  //{
      //[2009.12.09.수][추가!!!]{---------------------------------------
      //이미 보이고 있는 상태라면 보이지 않는다.
      //이는 MoDal 속성으로 인한 계속된 오류창 발생을 막기 위한 것이다.
      //}---------------------------------------------------------------

      //처리하지 않고 다음으로 넘어간다.
      if(this->Visible == true) return;

  //}

  //[출력문자열 영역크기 구하기]
  //{
      //--------------------------------------------------------------------------------------------
      //출력할 문자열의 출력시 영역 크기 정보를 구한다.(실제 출력하지는 않는다.)
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, pMESSAGE, &text_width, &text_height);
      //--------------------------------------------------------------------------------------------
  //}

  //[초기화]
  //{
      //버튼은 둘다 안보이게 만든다.
      _button_ok->Visible     = false;
      _button_cancle->Visible = false;
      _edit_Edit->Visible     = false;

      _button_ok_down     = false;
      _button_cancle_down = false;
  //}

  //[크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      width  = //아이콘 영역.
               50 +
               //문자 영역.
               text_width +
               //여유공간.
               d_border_width*2;

      height = text_height + d_border_width*2 +
               //캡션바 높이.
               _caption_height +
               //여유공간.(버튼을 배치해야한다.)
               _button_ok->Height + d_border_width + 8;

      //[최소 크기 유지]
      //{
          //-------------------------------------------------------------
          //[제목막대] 와 [엄지그림] 와 [버튼] 의 공간을 위하여 최소한의
          //크기 이상으로 작아지지 않도록 최소 크기를 유지한다.
          if(width < _caption_width * 2)
          {
            width  = _caption_width * 2;

          }

          if(height < 85)
          {
            height = 85;

          }
          //-------------------------------------------------------------
      //}

      //[최대크기 유지]
      //{
          //[2012.03.31.토][추가!!!]{---------------
          //최대 크기가 [화면] 을 넘지 못하게 한다.
          //}---------------------------------------

          if(width  > Screen->Width)  { width  = Screen->Width;  }

          if(height > Screen->Height) { height = Screen->Height; }

      //}
  //}

  //[bmp 크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      _bmp_->Width  = width;
      _bmp_->Height = height;
  //}

  //[form 크기 조정]
  //{
      this->Width  = _bmp_->Width;
      this->Height = _bmp_->Height;
  //}

  //[폼 오려내기]
  //{
      _FormCut();
  //}

  //[모양 그리기]
  //{
      //[전체 배경 처리]
      //{
          //[영역정보]{-------------------
          rect = _bmp_->Canvas->ClipRect;
          //}-----------------------------

          //[바탕 지우기]{---------------------------
          _bmp_->Canvas->Brush->Color = IDE_COLOR_2;
          _bmp_->Canvas->FillRect(rect);
          //}----------------------------------------

      //}

      //[caption 처리]
      //{
          //[caption 영역]{----------------------
          rect_caption = rect;
          rect_caption.Bottom = _caption_height;
          //}------------------------------------

          //[caption 바탕 지우기]{-------------------
          _bmp_->Canvas->Brush->Color = _ide_option->color_0;
          _bmp_->Canvas->FillRect(rect_caption);
          //}----------------------------------------

          //[caption 문자열]{-----------------------------------------------------------------
          _font.margin_size = 0;
          FONT_Out_StyleString2(_bmp_, &_font, 0, 5, IDE_COLOR_3, _ide_option->color_0, true,
                                d_FONTSTYLE_default,
                                _caption,
                                d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                &w, &h);
          //}---------------------------------------------------------------------------------
      //}
  //}

  //[아이콘 표시]
  //{
      //지정된 아이콘을 표시한다.
      _imagebox->_Index(pICONindex);
  //}

  //[버튼 배치 수정]
  //{
      //------------------------------------------------------------------------
      //버튼은 항상 msgbox 의 가장 [아래/중간] 에 위치해야 한다.
      _button_ok->_Left((this->Width/2) - (_button_ok->Width/2));
      _button_ok->_Top(this->Height - _button_ok->Height - d_border_width - 4);

      //보여준다.
      _button_ok->Visible = true;
      //------------------------------------------------------------------------
  //}

  //[알림글 내용]
  //{
      _font.margin_size = 50;

      FONT_Out_StyleString2(_bmp_, &_font, 0, _caption_height + 4,
                            IDE_COLOR_1, IDE_COLOR_2, true,
                            d_FONTSTYLE_default,
                            pMESSAGE,
                            d_FONT_underline_no, true, 0, IDE_COLOR_1,
                            &w, &h);
     
  //}

  //[테두리]
  //{
      _Border();
      
  //}

  //[view]{-------------
  //그린 것을 보여준다.
  _Draw();
  //}-------------------

  //[폼 위치 조정]
  //{
      //폼이 항상 화면의 중앙에 나오도록 위치를 조정한다.
      this->Left = Screen->Width/2  - this->Width/2;
      this->Top  = Screen->Height/2 - this->Height/2;

      //[wine 지원]
      //{
          //[2018.02.21.수][수정!!!]{----------------------------------------------------
          //[Linux:wine] 에서는 <ShowModal()> 이 X11 자체의 문제로 지원되지 않는다.
          //즉, <Modal> 속성이 아예 없다. 따라서, 비슷하게 대체한다.
          //결과적으로 [윈도우:Modal] 과 동일하게 동작한다.
          //
          //[주의!!!]********************************************************************
          //여기서는 일반적인 경우를 상정하고 <main_Form> 에 대해서만 처리를 수행하나
          //다른 [대화상자] 에서 <Modal> 형식으로 다시 호출하는 경우는,
          //해당 [대화상자] 에서 [자신] 에 대하여 여기서 한 <main_Form> 과 같은 처리를
          //수행할 필요가 있다.
          //[진행중지] 는 여기서 "while(this->Visible)..." 로 처리되고 있으므로
          //[대화상자] 에서는 <main_Form->Enabled> 관련 처리만 [전/후] 에 수행하면 된다.
          //}----------------------------------------------------------------------------

          if(_ide_option->wine == true)
          {
            //[!]{-------------------------------------
            //[Linux:wine] 인 경우.
            //<ShowModal()> 기능을 다른 방법으로 구현.
            //}----------------------------------------

            //현재 모든 [IDE:그림부품] 은 <main_Form> 을 [모체] 로 하므로
            //<main_Form> 을 정지 시키는 것으로 <Modal> 속성을 흉내낼수 있다.
            //main_Form->Enabled = false;
            IDE_Wine_Modal(true);
            //{
                //[Linux:wine] 에서는 기본적으로 <Show()> 만으로도 해당 [폼] 이
                //뒤로 사라져 가려지는 현상은 없어지지만 <BringToFront()> 추가.
                this->Show();
                this->BringToFront();

                //전체 진행을 여기서 막고 <ShowModal()> 을 흉내낸 [대화상자] 가 닫힐 때까지 대기.
                //단, 외부 메세지는 계속 처리할수 있도록 해야 [대화상자] 가 동작한다.
                while(this->Visible) { Application->ProcessMessages(); }

            //}
            //main_Form->Enabled = true;
            IDE_Wine_Modal(false);

          }
          else
          {
            //[윈도우] 인 경우.
            this->ShowModal();

          }

      //}

  //}

  return;

}

void __fastcall Tide_msgbox_Form::_MsgBox2(//표시할 아이콘 종류.
                                           int    pIconIndex,
                                           //true 인 경우는 첫 행을 [굵은 글꼴] 로 표시한다.
                                           bool   p1stLineBold,
                                           //전달 글.
                                           char  *pMessage)
{
  //[2010.12.18.토][생성!!!]{-------------------------------------------------------
  //_MsgBox() 함수와 전부 같으나, 첫행의 문자열을 [굵은문자] 로 할지 지정할수 있다.
  //이 기능은, [오류 단어] 나 [강조 단어] 를 제목으로 알려주는 경우 아주 유용하다.
  //대부분 이런 [단어] 는 반드시 제목으로 [첫 행] 에 표시하게 된다.
  //간단한 편법이지만 항상 이런 형식으로 사용하므로 대단히 효과적이다.
  //
  //[2012.03.31.토][수정!!!]--------------------------------------------------------
  //문자열이 출력 폭이 너무 길어도 [화면 크기] 를 넘지 않도록 수정.
  //}-------------------------------------------------------------------------------

  //[VAR]
  //{
      TRect  rect;
      TRect  rect_caption;

      int    w, h;

      //문자열 출력영역 크기 정보.
      int    text_width;
      int    text_height;

      int    width, height;

      char   lineStr[OPT_lineStrSize];

  //}

  //[안전장치]
  //{
      //[2009.12.09.수][추가!!!]{---------------------------------------
      //이미 보이고 있는 상태라면 보이지 않는다.
      //이는 MoDal 속성으로 인한 계속된 오류창 발생을 막기 위한 것이다.
      //}---------------------------------------------------------------

      //처리하지 않고 다음으로 넘어간다.
      if(this->Visible == true) return;

  //}

  //[출력문자열 영역크기 구하기]
  //{
      //--------------------------------------------------------------------------------------------
      //출력할 문자열의 출력시 영역 크기 정보를 구한다.(실제 출력하지는 않는다.)
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, pMessage, &text_width, &text_height);
      //--------------------------------------------------------------------------------------------
  //}

  //[초기화]
  //{
      //버튼은 둘다 안보이게 만든다.
      _button_ok->Visible     = false;
      _button_cancle->Visible = false;
      _edit_Edit->Visible     = false;

      _button_ok_down     = false;
      _button_cancle_down = false;
  //}

  //[크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      width  = //아이콘 영역.
               50 +
               //문자 영역.
               text_width +
               //여유공간.
               d_border_width*2;

      height = text_height + d_border_width*2 +
               //캡션바 높이.
               _caption_height +
               //여유공간.(버튼을 배치해야한다.)
               _button_ok->Height + d_border_width + 8;

      //[최소 크기 유지]
      //{
          //-------------------------------------------------------------
          //[제목막대] 와 [엄지그림] 와 [버튼] 의 공간을 위하여 최소한의
          //크기 이상으로 작아지지 않도록 최소 크기를 유지한다.
          if(width < _caption_width * 2)
          {
            width  = _caption_width * 2;

          }

          if(height < 85)
          {
            height = 85;

          }
          //-------------------------------------------------------------
      //}

      //[최대크기 유지]
      //{
          //[2012.03.31.토][추가!!!]{---------------
          //최대 크기가 [화면] 을 넘지 못하게 한다.
          //}---------------------------------------

          if(width  > Screen->Width)  { width  = Screen->Width;  }

          if(height > Screen->Height) { height = Screen->Height; }

      //}
  //}

  //[bmp 크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      _bmp_->Width  = width;
      _bmp_->Height = height;
  //}

  //[form 크기 조정]
  //{
      this->Width  = _bmp_->Width;
      this->Height = _bmp_->Height;
  //}

  //[폼 오려내기]
  //{
      _FormCut();
  //}

  //[모양 그리기]
  //{
      //[전체 배경 처리]
      //{
          //[영역정보]{-------------------
          rect = _bmp_->Canvas->ClipRect;
          //}-----------------------------

          //[바탕 지우기]{---------------------------
          _bmp_->Canvas->Brush->Color = IDE_COLOR_2;
          _bmp_->Canvas->FillRect(rect);
          //}----------------------------------------

      //}

      //[caption 처리]
      //{
          //[caption 영역]{----------------------
          rect_caption = rect;
          rect_caption.Bottom = _caption_height;
          //}------------------------------------

          //[caption 바탕 지우기]{-------------------
          _bmp_->Canvas->Brush->Color = _ide_option->color_0;
          _bmp_->Canvas->FillRect(rect_caption);
          //}----------------------------------------

          //[caption 문자열]{-----------------------------------------------------------------
          _font.margin_size = 0;
          FONT_Out_StyleString2(_bmp_, &_font, 0, 5, IDE_COLOR_3, _ide_option->color_0, true,
                                d_FONTSTYLE_default,
                                _caption,
                                d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                &w, &h);
          //}---------------------------------------------------------------------------------
      //}
  //}

  //[아이콘 표시]
  //{
      //지정된 아이콘을 표시한다.
      _imagebox->_Index(pIconIndex);
  //}

  //[버튼 배치 수정]
  //{
      //------------------------------------------------------------------------
      //버튼은 항상 msgbox 의 가장 [아래/중간] 에 위치해야 한다.
      _button_ok->_Left((this->Width/2) - (_button_ok->Width/2));
      _button_ok->_Top(this->Height - _button_ok->Height - d_border_width - 4);

      //보여준다.
      _button_ok->Visible = true;
      //------------------------------------------------------------------------
  //}

  //[알림글 내용]
  //{
      //[!]{---------------------------------------------------------
      //[첫 행] 을 [굵은 문자] 로 출력할지 말지를 구분하여 처리한다.
      //}------------------------------------------------------------

      //[공통처리]
      //{
          _font.margin_size = 50;

      //}

      if(p1stLineBold == true)
      {
        //[첫 행 추출]
        //{
            //[첫 행] 은 항상 <index:0> 이 있는 위치가 된다.
            STR_Get_ThisLineStr(pMessage, 0, lineStr);

        //}


        //[첫 행 출력]
        //{
            FONT_Out_StyleString2(_bmp_, &_font, 0, _caption_height + 4,
                                  IDE_COLOR_1, IDE_COLOR_2, true,
                                  d_FONTSTYLE_bold,
                                  lineStr,
                                  d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                  &w, &h);

        //}

        //[나머지 출력]
        //{
            //첫행 다음부터 출력한다.
            FONT_Out_StyleString2(_bmp_, &_font, 0 + w, _caption_height + 4,
                                  IDE_COLOR_1, IDE_COLOR_2, true,
                                  d_FONTSTYLE_default,
                                  &(pMessage[STR_Length(lineStr)]),
                                  d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                  &w, &h);

        //}

      }
      else
      {
        //일반적으로 출력한다.
        FONT_Out_StyleString2(_bmp_, &_font, 0, _caption_height + 4,
                              IDE_COLOR_1, IDE_COLOR_2, true,
                              d_FONTSTYLE_default,
                              pMessage,
                              d_FONT_underline_no, true, 0, IDE_COLOR_1,
                              &w, &h);

      }

  //}

  //[테두리]
  //{
      _Border();

  //}

  //[view]{-------------
  //그린 것을 보여준다.
  _Draw();
  //}-------------------

  //[폼 위치 조정]
  //{
      //폼이 항상 화면의 중앙에 나오도록 위치를 조정한다.
      this->Left = Screen->Width/2  - this->Width/2;
      this->Top  = Screen->Height/2 - this->Height/2;

      //[wine 지원]
      //{
          //[2018.02.21.수][수정!!!]{----------------------------------------------------
          //[Linux:wine] 에서는 <ShowModal()> 이 X11 자체의 문제로 지원되지 않는다.
          //즉, <Modal> 속성이 아예 없다. 따라서, 비슷하게 대체한다.
          //결과적으로 [윈도우:Modal] 과 동일하게 동작한다.
          //
          //[주의!!!]********************************************************************
          //여기서는 일반적인 경우를 상정하고 <main_Form> 에 대해서만 처리를 수행하나
          //다른 [대화상자] 에서 <Modal> 형식으로 다시 호출하는 경우는,
          //해당 [대화상자] 에서 [자신] 에 대하여 여기서 한 <main_Form> 과 같은 처리를
          //수행할 필요가 있다.
          //[진행중지] 는 여기서 "while(this->Visible)..." 로 처리되고 있으므로
          //[대화상자] 에서는 <main_Form->Enabled> 관련 처리만 [전/후] 에 수행하면 된다.
          //}----------------------------------------------------------------------------

          if(_ide_option->wine == true)
          {
            //[!]{-------------------------------------
            //[Linux:wine] 인 경우.
            //<ShowModal()> 기능을 다른 방법으로 구현.
            //}----------------------------------------

            //현재 모든 [IDE:그림부품] 은 <main_Form> 을 [모체] 로 하므로
            //<main_Form> 을 정지 시키는 것으로 <Modal> 속성을 흉내낼수 있다.
            //main_Form->Enabled = false;
            IDE_Wine_Modal(true);
            //{
                //[Linux:wine] 에서는 기본적으로 <Show()> 만으로도 해당 [폼] 이
                //뒤로 사라져 가려지는 현상은 없어지지만 <BringToFront()> 추가.
                this->Show();
                this->BringToFront();

                //전체 진행을 여기서 막고 <ShowModal()> 을 흉내낸 [대화상자] 가 닫힐 때까지 대기.
                //단, 외부 메세지는 계속 처리할수 있도록 해야 [대화상자] 가 동작한다.
                while(this->Visible) { Application->ProcessMessages(); }

            //}
            //main_Form->Enabled = true;
            IDE_Wine_Modal(false);

          }
          else
          {
            //[윈도우] 인 경우.
            this->ShowModal();

          }

      //}

  //}

  return;

}

bool __fastcall Tide_msgbox_Form::_MsgBox_Ok_Cancle(//표시할 아이콘 종류.
                                                    int    pICONindex,
                                                    //전달 글.
                                                    char  *pMESSAGE)
{
  //[2007.03.27.화][생성!!!]{---------------------------------------
  //이 함수는 "확인/취소" 버튼 2 개가 나온다.
  //단, 반드시 어떤 버튼이 눌렸는지 결과를 반환해야 한다.
  //[확인] : true 를 반환.
  //[취소] : false 를 반환.
  //
  //[2012.03.31.토][수정!!!]----------------------------------------
  //문자열이 출력 폭이 너무 길어도 [화면 크기] 를 넘지 않도록 수정.
  //}---------------------------------------------------------------

  //[VAR]
  //{
      TRect  rect;
      TRect  rect_caption;

      int    w, h;

      //문자열 출력영역 크기 정보.
      int    text_width;
      int    text_height;

      int    width, height;

  //}

  //[안전장치]
  //{
      //[2009.12.09.수][추가!!!]{---------------------------------------
      //이미 보이고 있는 상태라면 보이지 않는다.
      //이는 MoDal 속성으로 인한 계속된 오류창 발생을 막기 위한 것이다.
      //}---------------------------------------------------------------

      //처리하지 않고 다음으로 넘어간다.
      if(this->Visible == true) return(false);

  //}

  //[출력문자열 영역크기 구하기]
  //{
      //--------------------------------------------------------------------------------------------
      //출력할 문자열의 출력시 영역 크기 정보를 구한다.(실제 출력하지는 않는다.)
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, pMESSAGE, &text_width, &text_height);
      //--------------------------------------------------------------------------------------------
  //}

  //[초기화]
  //{
      //버튼은 둘다 안보이게 만든다.
      _button_ok->Visible     = false;
      _button_cancle->Visible = false;
      _edit_Edit->Visible     = false;

      _button_ok_down     = false;
      _button_cancle_down = false;

  //}

  //[크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      width  = //아이콘 영역.
               50 +
               //문자 영역.
               text_width +
               //여유공간.
               d_border_width*2;

      height = text_height + d_border_width*2 +
               //캡션바 높이.
               _caption_height +
               //여유공간.(버튼을 배치해야한다.)
               _button_ok->Height + d_border_width + 8;

      //[최소 크기 유지]
      //{
          //-------------------------------------------------------------
          //[제목막대] 와 [엄지그림] 와 [버튼] 의 공간을 위하여 최소한의
          //크기 이상으로 작아지지 않도록 최소 크기를 유지한다.
          if(width < _caption_width * 2)
          {
            width  = _caption_width * 2;

          }

          if(height < 85)
          {
            height = 85;

          }
          //-------------------------------------------------------------

      //}

      //[최대크기 유지]
      //{
          //[2012.03.31.토][추가!!!]{---------------
          //최대 크기가 [화면] 을 넘지 못하게 한다.
          //}---------------------------------------

          if(width  > Screen->Width)  { width  = Screen->Width;  }

          if(height > Screen->Height) { height = Screen->Height; }

      //}

  //}

  //[bmp 크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      _bmp_->Width  = width;
      _bmp_->Height = height;
  //}

  //[form 크기 조정]
  //{
      this->Width  = _bmp_->Width;
      this->Height = _bmp_->Height;
  //}

  //[폼 오려내기]
  //{
      _FormCut();
  //}

  //[모양 그리기]
  //{
      //[전체 배경 처리]
      //{
          //[영역정보]{-------------------
          rect = _bmp_->Canvas->ClipRect;
          //}-----------------------------

          //[바탕 지우기]{---------------------------
          _bmp_->Canvas->Brush->Color = IDE_COLOR_2;
          _bmp_->Canvas->FillRect(rect);
          //}----------------------------------------

      //}

      //[caption 처리]
      //{
          //[caption 영역]{----------------------
          rect_caption = rect;
          rect_caption.Bottom = _caption_height;
          //}------------------------------------

          //[caption 바탕 지우기]{----------------------------
          _bmp_->Canvas->Brush->Color = _ide_option->color_0;
          _bmp_->Canvas->FillRect(rect_caption);
          //}-------------------------------------------------

          //[caption 문자열]{-----------------------------------------------------------------
          _font.margin_size = 0;
          FONT_Out_StyleString2(_bmp_, &_font, 0, 5, IDE_COLOR_3, _ide_option->color_0, true,
                                d_FONTSTYLE_default,
                                _caption,
                                d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                &w, &h);
          //}---------------------------------------------------------------------------------
      //}
  //}

  //[아이콘 표시]
  //{
      //지정된 아이콘을 표시한다.
      _imagebox->_Index(pICONindex);
  //}

  //[버튼 배치 수정]
  //{
      //------------------------------------------------------------------------
      //버튼은 항상 msgbox 의 가장 [아래/중간] 에 위치해야 한다.
      _button_ok->_Left((this->Width/2) - _button_ok->Width -2);
      _button_ok->_Top(this->Height - _button_ok->Height - d_border_width - 4);

      _button_cancle->_Left((this->Width/2) + 2);
      _button_cancle->_Top(this->Height - _button_cancle->Height - d_border_width - 4);

      //보여준다.
      _button_ok->Visible     = true;
      _button_cancle->Visible = true;
      //------------------------------------------------------------------------
  //}

  //[알림글 내용]
  //{
      //---------------------------------------------------------------
      _font.margin_size = 50;

      FONT_Out_StyleString2(_bmp_, &_font, 0, _caption_height + 4,
                            IDE_COLOR_1, IDE_COLOR_2, true,
                            d_FONTSTYLE_default,
                            pMESSAGE,
                            d_FONT_underline_no, true, 0, IDE_COLOR_1,
                            &w, &h);
      //---------------------------------------------------------------
  //}

  //[테두리]
  //{
      _Border();
      
  //}

  //[view]{-------------
  //그린 것을 보여준다.
  _Draw();
  //}-------------------

  //[폼 위치 조정]
  //{
      //폼이 항상 화면의 중앙에 나오도록 위치를 조정한다.
      this->Left = Screen->Width/2  - this->Width/2;
      this->Top  = Screen->Height/2 - this->Height/2;

      //[wine 지원]
      //{
          //[2018.02.21.수][수정!!!]{----------------------------------------------------
          //[Linux:wine] 에서는 <ShowModal()> 이 X11 자체의 문제로 지원되지 않는다.
          //즉, <Modal> 속성이 아예 없다. 따라서, 비슷하게 대체한다.
          //결과적으로 [윈도우:Modal] 과 동일하게 동작한다.
          //
          //[주의!!!]********************************************************************
          //여기서는 일반적인 경우를 상정하고 <main_Form> 에 대해서만 처리를 수행하나
          //다른 [대화상자] 에서 <Modal> 형식으로 다시 호출하는 경우는,
          //해당 [대화상자] 에서 [자신] 에 대하여 여기서 한 <main_Form> 과 같은 처리를
          //수행할 필요가 있다.
          //[진행중지] 는 여기서 "while(this->Visible)..." 로 처리되고 있으므로
          //[대화상자] 에서는 <main_Form->Enabled> 관련 처리만 [전/후] 에 수행하면 된다.
          //}----------------------------------------------------------------------------

          if(_ide_option->wine == true)
          {
            //[!]{-------------------------------------
            //[Linux:wine] 인 경우.
            //<ShowModal()> 기능을 다른 방법으로 구현.
            //}----------------------------------------

            //현재 모든 [IDE:그림부품] 은 <main_Form> 을 [모체] 로 하므로
            //<main_Form> 을 정지 시키는 것으로 <Modal> 속성을 흉내낼수 있다.
            //main_Form->Enabled = false;
            IDE_Wine_Modal(true);
            //{
                //[Linux:wine] 에서는 기본적으로 <Show()> 만으로도 해당 [폼] 이
                //뒤로 사라져 가려지는 현상은 없어지지만 <BringToFront()> 추가.
                this->Show();
                this->BringToFront();

                //전체 진행을 여기서 막고 <ShowModal()> 을 흉내낸 [대화상자] 가 닫힐 때까지 대기.
                //단, 외부 메세지는 계속 처리할수 있도록 해야 [대화상자] 가 동작한다.
                while(this->Visible) { Application->ProcessMessages(); }

            //}
            //main_Form->Enabled = true;
            IDE_Wine_Modal(false);

          }
          else
          {
            //[윈도우] 인 경우.
            this->ShowModal();

          }

      //}

  //}

  //[결과반환]
  //{
      //눌린 버튼에 따른 값을 반환한다.
      if     (_button_ok_down == true)     return(true);
      else if(_button_cancle_down == true) return(false);
  //}

  return(true);

}

bool __fastcall Tide_msgbox_Form::_MsgBox_Edit(//표시할 아이콘 종류.
                                               int    pIconIndex,
                                               //전달 글.
                                               char  *pMessage)
{
  //[2009.04.20.월][생성!!!]{-------------------------------------------------
  //이 함수는 "확인/취소" 버튼 이외에 [한줄 편집기] 가 중간에 배치된다.
  //나머지 기능은 _MsgBox_Ok_Cancle() 와 완전히 동일하다.
  //값을 입력하는 [편집기] 를 보여주는 경우는 대게 어떤 목적에 사용되는지등의
  //문자열과 같이 나오고 이왕이면 깔끔한 것이 좋으므로 아예 이곳에 하나의
  //별도 기능으로 추가한다.
  //[한줄 편집기] 는 [문자열] 과 [확인/취소] 버튼의 중간에 배치시킨다.
  //
  //[2012.03.31.토][수정!!!]--------------------------------------------------
  //문자열이 출력 폭이 너무 길어도 [화면 크기] 를 넘지 않도록 수정.
  //}-------------------------------------------------------------------------

  //[VAR]
  //{
      TRect  rect;
      TRect  rect_caption;

      int    w, h;

      //문자열 출력영역 크기 정보.
      int    text_width;
      int    text_height;

      int    width, height;

  //}

  //[안전장치]
  //{
      //[2009.12.09.수][추가!!!]{---------------------------------------
      //이미 보이고 있는 상태라면 보이지 않는다.
      //이는 MoDal 속성으로 인한 계속된 오류창 발생을 막기 위한 것이다.
      //}---------------------------------------------------------------

      //처리하지 않고 다음으로 넘어간다.
      if(this->Visible == true) return(false);

  //}

  //[출력문자열 영역크기 구하기]
  //{
      //--------------------------------------------------------------------------------------------
      //출력할 문자열의 출력시 영역 크기 정보를 구한다.(실제 출력하지는 않는다.)
      FONT_Get_StringOutAreaInfo(&_font, d_FONTSTYLE_default, pMessage, &text_width, &text_height);
      //--------------------------------------------------------------------------------------------
  //}

  //[초기화]
  //{
      //버튼은 둘다 안보이게 만든다.
      _button_ok->Visible     = false;
      _button_cancle->Visible = false;
      _edit_Edit->Visible     = false;

      _button_ok_down     = false;
      _button_cancle_down = false;

  //}

  //[크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      width  = //아이콘 영역.
               50 +
               //문자 영역.
               text_width +
               //여유공간.
               d_border_width*2;

      height = text_height + d_border_width*2 +
               //캡션바 높이.
               _caption_height +
               //여유공간.(버튼을 배치해야한다.)
               _button_ok->Height + d_border_width + 8 +
               //[한줄 편집기] 공간을 추가한다.
               _edit_Edit->Height + 8;

      //[최소 크기 유지]
      //{
          //-------------------------------------------------------------
          //[제목막대] 와 [엄지그림] 와 [버튼] 의 공간을 위하여 최소한의
          //크기 이상으로 작아지지 않도록 최소 크기를 유지한다.
          if(width < _caption_width * 2)
          {
            width  = _caption_width * 2;

          }

          if(height < 85)
          {
            height = 85;

          }
          //-------------------------------------------------------------

      //}

      //[최대크기 유지]
      //{
          //[2012.03.31.토][추가!!!]{---------------
          //최대 크기가 [화면] 을 넘지 못하게 한다.
          //}---------------------------------------

          if(width  > Screen->Width)  { width  = Screen->Width;  }

          if(height > Screen->Height) { height = Screen->Height; }

      //}

  //}

  //[bmp 크기 조정]
  //{
      //출력 문자열 영역 크기에 맞게 bmp 크기를 조정한다.
      _bmp_->Width  = width;
      _bmp_->Height = height;
  //}

  //[form 크기 조정]
  //{
      this->Width  = _bmp_->Width;
      this->Height = _bmp_->Height;
  //}

  //[폼 오려내기]
  //{
      _FormCut();
  //}

  //[모양 그리기]
  //{
      //[전체 배경 처리]
      //{
          //[영역정보]{-------------------
          rect = _bmp_->Canvas->ClipRect;
          //}-----------------------------

          //[바탕 지우기]{---------------------------
          _bmp_->Canvas->Brush->Color = IDE_COLOR_2;
          _bmp_->Canvas->FillRect(rect);
          //}----------------------------------------

      //}

      //[caption 처리]
      //{
          //[caption 영역]{----------------------
          rect_caption = rect;
          rect_caption.Bottom = _caption_height;
          //}------------------------------------

          //[caption 바탕 지우기]{-------------------
          _bmp_->Canvas->Brush->Color = _ide_option->color_0;
          _bmp_->Canvas->FillRect(rect_caption);
          //}----------------------------------------

          //[caption 문자열]{-----------------------------------------------------------------
          _font.margin_size = 0;
          FONT_Out_StyleString2(_bmp_, &_font, 0, 5, IDE_COLOR_3, _ide_option->color_0, true,
                                d_FONTSTYLE_default,
                                _caption,
                                d_FONT_underline_no, true, 0, IDE_COLOR_1,
                                &w, &h);
          //}---------------------------------------------------------------------------------
      //}
  //}

  //[아이콘 표시]
  //{
      //지정된 아이콘을 표시한다.
      _imagebox->_Index(pIconIndex);
  //}

  //[한줄 편집기 배치]
  //{
      //[2009.04.20.월][추가!!!]{------------------
      //[한줄 편집기] 를 보여주고 가운데 배치한다.
      //}------------------------------------------

      _edit_Edit->Left = 50;
      _edit_Edit->Top  = _caption_height + 4 + text_height + 8;
      _edit_Edit->_Width(this->Width - 50 - d_border_width * 2);
      _edit_Edit->Visible = true;

      //촛점을 맞추어 준다.
      if(_edit_Edit->Focused() != true) _edit_Edit->SetFocus();

  //}

  //[버튼 배치 수정]
  //{
      //------------------------------------------------------------------------
      //버튼은 항상 msgbox 의 가장 [아래/중간] 에 위치해야 한다.
      _button_ok->_Left((this->Width/2) - _button_ok->Width -2);
      _button_ok->_Top(this->Height - _button_ok->Height - d_border_width - 4);

      _button_cancle->_Left((this->Width/2) + 2);
      _button_cancle->_Top(this->Height - _button_cancle->Height - d_border_width - 4);

      //보여준다.
      _button_ok->Visible     = true;
      _button_cancle->Visible = true;
      //------------------------------------------------------------------------
  //}

  //[알림글 내용]
  //{
      //---------------------------------------------------------------
      _font.margin_size = 50;

      FONT_Out_StyleString2(_bmp_, &_font, 0, _caption_height + 4,
                            IDE_COLOR_1, IDE_COLOR_2, true,
                            d_FONTSTYLE_default,
                            pMessage,
                            d_FONT_underline_no, true, 0, IDE_COLOR_1,
                            &w, &h);
      //---------------------------------------------------------------
  //}

  //[테두리]
  //{
      _Border();
      
  //}

  //[view]{-------------
  //그린 것을 보여준다.
  _Draw();
  //}-------------------

  //[폼 위치 조정]
  //{
      //폼이 항상 화면의 중앙에 나오도록 위치를 조정한다.
      this->Left = Screen->Width/2  - this->Width/2;
      this->Top  = Screen->Height/2 - this->Height/2;

      //[입력 지정자 활성화]
      //{
          //[2010.03.26.금][추가!!!]{---------------------------------------------------
          //대화상자가 보일때 [한줄편집기] 에 [입력지정자] 가 보이나 깜박이지 않는
          //문제가 있는데 아래와 같이 다시 한번 [처음위치] 로 이동시키면 잘 깜박거린다.
          //금일 [그림부품] 용 예제를 만들다 해결 방법을 발견하고 추가한다.
          //반드시 <this->ShowModal()> 로 보이기 전에 처리해야 한다.
          //나중에 처리하면 적용되지 않는다.
          //}---------------------------------------------------------------------------

          _edit_Edit->_KEY_Home(true);

      //}

      //[wine 지원]
      //{
          //[2018.02.21.수][수정!!!]{----------------------------------------------------
          //[Linux:wine] 에서는 <ShowModal()> 이 X11 자체의 문제로 지원되지 않는다.
          //즉, <Modal> 속성이 아예 없다. 따라서, 비슷하게 대체한다.
          //결과적으로 [윈도우:Modal] 과 동일하게 동작한다.
          //
          //[주의!!!]********************************************************************
          //여기서는 일반적인 경우를 상정하고 <main_Form> 에 대해서만 처리를 수행하나
          //다른 [대화상자] 에서 <Modal> 형식으로 다시 호출하는 경우는,
          //해당 [대화상자] 에서 [자신] 에 대하여 여기서 한 <main_Form> 과 같은 처리를
          //수행할 필요가 있다.
          //[진행중지] 는 여기서 "while(this->Visible)..." 로 처리되고 있으므로
          //[대화상자] 에서는 <main_Form->Enabled> 관련 처리만 [전/후] 에 수행하면 된다.
          //}----------------------------------------------------------------------------

          if(_ide_option->wine == true)
          {
            //[!]{-------------------------------------
            //[Linux:wine] 인 경우.
            //<ShowModal()> 기능을 다른 방법으로 구현.
            //}----------------------------------------

            //현재 모든 [IDE:그림부품] 은 <main_Form> 을 [모체] 로 하므로
            //<main_Form> 을 정지 시키는 것으로 <Modal> 속성을 흉내낼수 있다.
            //main_Form->Enabled = false;
            IDE_Wine_Modal(true);
            //{
                //[Linux:wine] 에서는 기본적으로 <Show()> 만으로도 해당 [폼] 이
                //뒤로 사라져 가려지는 현상은 없어지지만 <BringToFront()> 추가.
                this->Show();
                this->BringToFront();

                //전체 진행을 여기서 막고 <ShowModal()> 을 흉내낸 [대화상자] 가 닫힐 때까지 대기.
                //단, 외부 메세지는 계속 처리할수 있도록 해야 [대화상자] 가 동작한다.
                while(this->Visible) { Application->ProcessMessages(); }

            //}
            //main_Form->Enabled = true;
            IDE_Wine_Modal(false);

          }
          else
          {
            //[윈도우] 인 경우.
            this->ShowModal();

          }

      //}

  //}

  //[결과반환]
  //{
      //눌린 버튼에 따른 값을 반환한다.
      if     (_button_ok_down == true)     return(true);
      else if(_button_cancle_down == true) return(false);
  //}

  return(true);

}

void __fastcall Tide_msgbox_Form::_Draw(void)
{
  //[2006.11.07.화][생성!!!]

  BitBlt(this->Canvas->Handle, 0, 0,
         this->Width, this->Height,
         _bmp_->Canvas->Handle, 0, 0, SRCCOPY);

  return;

}

//[EVENT]-----------------------------------------------------------------------

void __fastcall Tide_msgbox_Form::FormMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //[2006.11.07.화][생성!!!]{-------
  //현재 [폼 이동] 처리에 사용한다.
  //}-------------------------------

  //[VAR]
  //{
      //[2018.03.17.토][추가!!!]
      TPoint  mousePos;

  //}

  //[전광판]
  //{
      //[2010.04.03.토][추가!!!]{-----------------------------
      //[전광판] 을 일시 정지 시킨다.
      //이는 이동, 크기조정시 끊어짐 현상을 막기 위한 것이다.
      //}-----------------------------------------------------

      ide_editor_Form->_GDotMatrix_RotateTemp(false);

  //}

  //[캡션바] 영역에서만 처리되어야 한다.
  if(((0 <= X) && (X < _caption_width)) &&
     ((0 <= Y) && (Y < _caption_height)))
  {
    if(Button == mbLeft)
    {
      //[위치 기록]
      //{
          //[2018.03.17.토][수정!!!]{-----------------------------------------------------
          //[전체화면] 을 대상으로한 위치 사용.
          //이는 <GVmos> 등 다른 Form 안에 생성되는 경우에도 동일하게 동작 시키기 위한것.
          //}-----------------------------------------------------------------------------

          //[전체화면] 을 대상으로 마우스 위치 얻기.
          GetCursorPos(&mousePos);

          //현재 <this> 위치와 [마우스] 위치 간의 거리 얻기.
          //항상 같은 거리를 유지하는 방법으로 [제목줄 이동] 을 구현하기 위한것.
          deltaLeft = mousePos.x - this->Left;
          deltaTop  = mousePos.y - this->Top;

      //}

      //caption 이 선택된 것을 알린다.
      _caption_selected = true;

      //[wine 지원]
      //{
          //[2018.03.04.일][추가!!!]{---------
          //[제목줄] 이동을 위한 타이머 켜기.
          //}---------------------------------

          if(_ide_option->wine == true)
          {
            captionMoveTimer->Enabled = true;

          }

      //}

    }

  }

  return;

}

void __fastcall Tide_msgbox_Form::FormMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
  //[2006.11.07.화][생성!!!]{----------------------
  //마우스로 caption 을 집어 끄는 경우를 처리한다.
  //}----------------------------------------------

  //[VAR]
  //{
      //[2018.03.17.토][추가!!!]
      TPoint  mousePos;

  //}

  //[캡션바 이동]
  //{
      //[캡션바] 영역에서만 처리되어야 한다.
      if(((0 <= X) && (X < _caption_width)) &&
         ((0 <= Y) && (Y < _caption_height)) ||
         //마우스로 집어  끄는 경우 영역을 벗어난 경우도 처리 되어야 한다.
         //이는 집어 끌다가 놓치는 경우를 막기 위한 것이다.
         (Shift.Contains(ssLeft)))
      {
        if((Shift.Contains(ssLeft)) && (_caption_selected == true))
        {
          //caption 을 마우스로 집어끄는 경우 Form 을 이동 시켜야 한다.

          //[wine 지원]
          //{
              //[2018.03.04.일][추가!!!]{-------------------------------
              //<Linux:wine> 에서 구동 중이라면 여기서 처리하지 않는다.
              //<captionMoveTimerTimer()> 안에서 처리된다.
              //}-------------------------------------------------------

              if(_ide_option->wine == true)
              {
                //[Linux:wine]
                //이 경우 아래에서 사용하는 <Left>, <Top> 값은 <captionMoveTimer> 안에서
                //수정되고 있는 정확한 값으로 처리.

              }
              else
              {
                //[윈도우]

                //[위치 이동]
                //{
                    //[2018.03.17.토][수정!!!]{-----------------------------------------------------
                    //[전체화면] 을 대상으로한 위치 사용.
                    //이는 <GVmos> 등 다른 Form 안에 생성되는 경우에도 동일하게 동작 시키기 위한것.
                    //}-----------------------------------------------------------------------------

                    //[전체화면] 을 대상으로 마우스 위치 얻기.
                    GetCursorPos(&mousePos);

                    //현재 <this> 위치와 [마우스] 위치 간의 거리를
                    //항상 같은 거리로 유지하는 방법으로 [제목줄 이동] 을 구현.
                    this->Left = mousePos.x - deltaLeft;
                    this->Top  = mousePos.y - deltaTop;

                //}

              }

          //}

        }

      }

  //}

  return;

}

void __fastcall Tide_msgbox_Form::FormMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //[2006.11.07.화][생성!!!]

  //[wine 지원]
  //{
      //[2018.03.04.일][추가!!!]{---------
      //[제목줄] 이동을 위한 타이머 끄기.
      //}---------------------------------

      if(_ide_option->wine == true)
      {
        //<FormMouseUp> 에서는 무조건 타이머 정지.
        captionMoveTimer->Enabled = false;

      }

  //}

  //[전광판]
  //{
      //[2010.02.23.화][추가!!!]{--------------
      //[전광판] 을 다시 정지에서 해제시킨다.
      //}--------------------------------------

      ide_editor_Form->_GDotMatrix_RotateTemp(true);

  //}

  if(((0 <= X) && (X < _caption_width)) &&
     ((0 <= Y) && (Y < _caption_height)))
  {
    if(Button == mbRight)
    {
      //종료한다.
      //this->Close();

    }

  }

  //[해제]
  //{
      //caption 선택을 해제한다.
      _caption_selected = false;
  //}

  return;

}

//[EVENT FUNCTION]--------------------------------------------------------------

void __fastcall Tide_msgbox_Form::_EVENT_ButtonClick_Ok(void)
{
  //버튼이 눌린 경우는 이 폼을 종료한다.(사라지는 것 뿐이다.)

  //눌린 버튼을 알려준다.
  _button_ok_down     = true;
  _button_cancle_down = false;

  this->Close();

  return;

}

void __fastcall Tide_msgbox_Form::_EVENT_ButtonClick_Cancle(void)
{
  //[2007.03.27.화][생성!!!]

  //버튼이 눌린 경우는 이 폼을 종료한다.(사라지는 것 뿐이다.)

  //눌린 버튼을 알려준다.
  _button_ok_down     = false;
  _button_cancle_down = true;

  this->Close();

  return;

}

void __fastcall Tide_msgbox_Form::_EVENT_KeyEnter_edit_Edit(void)
{
  //[2009.04.20.월][생성!!!]{-------------
  //[확인] 버튼이 눌린것과 같이 취급한다.
  //}-------------------------------------

  _EVENT_ButtonClick_Ok();

  return;

}

void __fastcall Tide_msgbox_Form::_EVENT_KeyDown_Esc_All(void)
{
  //[2012.05.20.일][추가!!!]{----------------
  //<키:ESC> 를 누른 경우 처리.
  //현재 [대화상자] 를 닫는다.
  //기본적으로 [취소] 가 선택된 것으로 처리.
  //}----------------------------------------

  _EVENT_ButtonClick_Cancle();

}

void __fastcall Tide_msgbox_Form::captionMoveTimerTimer(TObject *Sender)
{
  //[2018.03.04.일][생성!!!]{---------------------------
  //[Linux:wine] 에서 [제목줄:이동] 을 지원하기 위한것.
  //}---------------------------------------------------

  //[VAR]
  //{
      TPoint  mousePos;

  //}

  //[위치 수정]
  //{
      //[!]{-----------------------------------------------------------------------------
      //이전 방식은 <Linux:wine> 에서는 빠르게 이동하는 경우 [떨림] 현상이 생기고
      //이동이 끊어지는 문제가 발생.
      //이는 <Linux:wine> 에서 [제목줄] 밖으로 [화면지정자] 가 나가는 경우를 제대로
      //처리하지 못하는 문제인듯.
      //따라서, 기존처럼 [상대좌표] 를 사용하지 않고 [절대좌표] 를 사용하는 것으로 수정.
      //}--------------------------------------------------------------------------------

      //[마우스 절대 위치 얻기]
      //{
          //화면상의 [마우스] 절대 위치를 얻는다.
          GetCursorPos(&mousePos);

      //}

      //[이동]
      //{
          //[2018.03.17.토][수정!!!]{---------------------------------
          //현재 <this> 위치와 [마우스] 위치 간의 거리를
          //항상 같은 거리로 유지하는 방법으로 [제목줄 이동] 을 구현.
          //자세한 내용은 [제목줄 이동] 관련 부분 설명 연관 참고.
          //}---------------------------------------------------------

          this->Left = mousePos.x - deltaLeft;
          this->Top  = mousePos.y - deltaTop;

      //}

  //}

}





