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

#include <vcl.h>
#pragma hdrstop

#include "ide_buttons.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tide_buttons_Form *ide_buttons_Form;
//---------------------------------------------------------------------------


//[다른 폼]
//{
    #include "main.h"
    #include "ide_main.h"
    #include "ide_submenu.h"
    #include "ide_mbutton.h"
    #include "ide_editor.h"
    #include "editor_edit.h"
    #include "editor_top.h"
    #include "msg_msg.h"

    //[2009.04.04.토][추가!!!]
    #include "ide_msgbox.h"

    //[2009.04.08.수][추가!!!]
    #include "gui.h"

    //[2009.04.09.목][추가!!!]
    #include "vdebug.h"
    #include "vmos.h"

    //[2009.04.10.금][추가!!!]
    #include "ide_library.h"
    #include "ide_mbutton.h"

    #include "debug.h"

    //[2009.07.30.목][추가!!!]
    #include "combus.h"

    //[2011.07.13.수][추가!!!]
    #include "ide_tree.h"

    //[2012.03.11.일][추가!!!]
    #include "ide_msg.h"

//}


__fastcall Tide_buttons_Form::Tide_buttons_Form(TComponent* Owner)
        : TForm(Owner)
{
  //[VAR]
  //{
      int  color;

  //}

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

  //}

  //[VAR]
  //{
      AnsiString  bmp_path;
      int         i;
  //}

  //[초기화]
  //{
      //---------------------------------------------------------------------------
      this->Left     = ide_mbutton_Form->Left + ide_mbutton_Form->Width
                       //ide_mbutton_Form 이 오른쪽 테두리가 없으므로 0 으로 한다.
                       - 0;
      this->Top      = ide_menu_Form->Top + ide_menu_Form->Height;
      this->Width    = ide_menu_Form->Width - ide_mbutton_Form->Width + 2;
      this->Height   = 48;
      this->Color    = clWhite;

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

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

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

  //[속성]
  //{
      //[2009.04.08.수][추가!!!]
      //바탕색을 설정한다.
      BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_IdeButtonsBack, &_colorBack);

  //}

  //[컨트롤 생성]
  //{
      //[비트맵 버튼]
      //{
          //[컨트롤 버튼 생성]
          //{
              //생성은 일괄적으로 해도 된다.

              for(i = 0; i < d_ctrl_bmpbtns_count; i++)
              {
                _ctrl_bmpbtns[i]          = new Tgui_bmpbutton_Form(this);
                _ctrl_bmpbtns[i]->Parent  = this;
                _ctrl_bmpbtns[i]->Visible = true;

                //[공통 속성 처리]
                //{
                    _ctrl_bmpbtns[i]->_Top(1);
                    _ctrl_bmpbtns[i]->_Width(40);
                    _ctrl_bmpbtns[i]->_Height(32);
                    _ctrl_bmpbtns[i]->_Image_Width(40);
                    _ctrl_bmpbtns[i]->_Image_Height(32);
                    _ctrl_bmpbtns[i]->_Border(false);

                //}

              }

          //}

          //[초기화]
          //{
              //[2011.04.27.수][추가!!!]{---------
              //처음에는 모두 동작 대기 상태이다.
              _ctrl_bmpbtns_on = false;
              //}---------------------------------

              i = 1;

              //[auto]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\auto.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_BalloonHelpStr
                      ("[문법검사]->[부품만들기]->[조립]->[가상기계제작]->\r\n"
                       "[설치]->[설치검사]->[실행대기] 까지 자동 실행합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_EVENT_MouseEnter = _EVENT_AutoButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_EVENT_Click      = _EVENT_AutoButton_Click;

              //}

              //[check]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_check]->Width;

                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\check.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_BalloonHelpStr
                      //[2012.05.11.금][수정!!!]
                      ("[문법검사] 를 수행합니다.\r\n"
                       "일반선택 : 현재 [편집기] 에 보이고 있는 문서만 검사.\r\n"
                       "길게선택 : [설계묶음] 안의 모든 문서를 검사."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_EVENT_MouseEnter = _EVENT_CheckButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_EVENT_Click      = _EVENT_CheckButton_Click;

                  //[상태 변경 설정]
                  //{
                      //[2012.05.11.금][추가!!!]{---------------------------------
                      //한개의 버튼을 두개의 동작으로 사용하기 위하여 금일
                      //<gui_bmpbutton> 에 추가한 기능을 사용한다.
                      //
                      //이는 [문법검사] 버튼을 두개의 기능을로 사용하려고 만든것.
                      //
                      //기본상태       : 현재 편집중인 문서만 검사.
                      //1초동안 누른뒤 : [설계묶음] 전체를 대상으로 검사.
                      //}---------------------------------------------------------

                      _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_ModeTimer(true);

                      //[교체 그림 설정]
                      //{               //그림 할당하기.
                          bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\check-all.bmp";

                          //그림 지정.
                          _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_ModeTimer_Bitmap(bmp_path.c_str());


                      //}

                  //}

              //}

              //[compile]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->Width;

                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\compile.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_BalloonHelpStr
                      ("설계문서를 분석하여 [가상기계] 를 구성할 부품을 만듭니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_EVENT_MouseEnter = _EVENT_CompileButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_EVENT_Click      = _EVENT_CompileButton_Click;

              //}

              //[link]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_link]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\link.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_BalloonHelpStr
                      ("부품을 사용하여 [가상기계] 를 조립합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_EVENT_MouseEnter = _EVENT_LinkButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_EVENT_Click      = _EVENT_LinkButton_Click;

              //}

              //[build]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_build]->Width;

                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\build.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_BalloonHelpStr
                      ("실행 가능한 [가상기계] 를 제작/완성합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_EVENT_MouseEnter = _EVENT_BuildButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_EVENT_Click      = _EVENT_BuildButton_Click;

              //}

              //[dowanload]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_download]->Width;

                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\download.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_BalloonHelpStr
                      ("[맷돌] 에 [가상기계] 를 설치합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_EVENT_MouseEnter = _EVENT_DownloadButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_EVENT_Click      = _EVENT_DownloadButton_Click;

              //}

              //[upload]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->Width;

                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\upload.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_BalloonHelpStr
                      ("[맷돌] 에 설치된 [가상기계] 를 복제/수거 합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_EVENT_MouseEnter = _EVENT_UploadButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_EVENT_Click      = _EVENT_UploadButton_Click;

              //}

              //[verify]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->Width;

                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\verify.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_BalloonHelpStr
                      ("[맷돌] 에 설치된 [가상기계] 의 설치검사를 수행합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_EVENT_MouseEnter = _EVENT_VerifyButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_EVENT_Click      = _EVENT_VerifyButton_Click;
              //}

              //[erase]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\erase.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_BalloonHelpStr
                      ("[맷돌] 에 설치된 [가상기계] 를 전부 제거합니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_EVENT_MouseEnter = _EVENT_EraseButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_EVENT_Click      = _EVENT_EraseButton_Click;
              //}

              //[hw-run]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\hw_run.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_BalloonHelpStr
                      ("[맷돌] 을 기동 시킵니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_EVENT_MouseEnter = _EVENT_HwRunButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_EVENT_Click      = _EVENT_HwRunButton_Click;
              //}

              //[hw-stop]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\hw_stop.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_BalloonHelpStr
                      ("[맷돌] 을 일시 정지 시킵니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_EVENT_MouseEnter = _EVENT_HwStopButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_EVENT_Click      = _EVENT_HwStopButton_Click;
              //}

              //[hw-reset]
              //{
                  //위치 조정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\control\\hw_reset.bmp";

                  //그림 지정.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_BalloonHelpUse(true);
                      _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_BalloonHelpStr
                      ("[맷돌] 을 초기화 하고 재기동 시킵니다."
                      );

                  //}

                  //동작함수 등록.
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_EVENT_MouseEnter = _EVENT_HwResetButton_MouseEnter;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_EVENT_Click      = _EVENT_HwResetButton_Click;
              //}
          //}

          //[디버그 버튼 생성]
          //{
              //생성은 일괄적으로 해도 된다.

              for(i = 0; i < d_debug_bmpbtns_count; i++)
              {
                _debug_bmpbtns[i]          = new Tgui_bmpbutton_Form(this);
                _debug_bmpbtns[i]->Parent  = this;
                _debug_bmpbtns[i]->Visible = true;

                //[공통 속성 처리]
                //{
                    _debug_bmpbtns[i]->_Top(1);
                    _debug_bmpbtns[i]->_Width(40);
                    _debug_bmpbtns[i]->_Height(32);
                    _debug_bmpbtns[i]->_Image_Width(40);
                    _debug_bmpbtns[i]->_Image_Height(32);
                    _debug_bmpbtns[i]->_Border(false);
                //}
              }
          //}

          //[초기화]
          //{
              i = 1;

              //[reset]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_reset_vector]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\reset.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_BalloonHelpStr
                      ("[가상기계] 를 초기화 하고 재기동 후 대기 상태로 만듭니다.\r\n"
                       "실제로는 main() 함수 위치로 이동후 대기하게 됩니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_EVENT_MouseEnter = _EVENT_ResetButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_reset_vector]->_EVENT_Click      = _EVENT_ResetButton_Click;
              //}

              //[step-statement]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_step_statement]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\step_statement.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_BalloonHelpStr
                      ("[행] 단위로 실행합니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_EVENT_MouseEnter = _EVENT_StepStatementButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_step_statement]->_EVENT_Click      = _EVENT_StepStatementButton_Click;
              //}

              //[step-over]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_over]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_step_over]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\step_over.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_over]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_step_over]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_step_over]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_step_over]->_BalloonHelpStr
                      ("[문장/함수] 단위로 실행합니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_step_over]->_EVENT_MouseEnter = _EVENT_StepOverButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_step_over]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_step_over]->_EVENT_Click      = _EVENT_StepOverButton_Click;
              //}

              //[step-auto]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_step_auto]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\step_auto.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_Bitmap(bmp_path);

                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_IndexBitmap(true);
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_IndexWidth(40);

                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_Index(0);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_BalloonHelpStr
                      ("[행] 단위로 자동 실행합니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_EVENT_MouseEnter = _EVENT_StepAutoButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_step_auto]->_EVENT_Click      = _EVENT_StepAutoButton_Click;

              //}

              //[step-over-auto]
              //{
                  //[2009.04.09.목][추가!!!]

                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\step_over_auto.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_Bitmap(bmp_path);

                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_IndexBitmap(true);
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_IndexWidth(40);

                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_Index(0);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_BalloonHelpStr
                      ("[문장/함수] 단위로 자동 실행합니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_EVENT_MouseEnter = _EVENT_StepOverAutoButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_step_over_auto]->_EVENT_Click      = _EVENT_StepOverAutoButton_Click;

              //}

              //[breakpoint]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_breakpoint]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\breakpoint.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_ColorBack(_colorBack);

                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_IndexBitmap(true);
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_IndexWidth(40);
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_Index(0);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_BalloonHelpStr
                      ("현재 설정된 [정지점] 을 [유/무효] 화 합니다.\r\n"
                       "일반 상태가 [유효] 가 되고, 눌린 상태는 [무효] 가 됩니다.\r\n"
                       "[무효] 인 경우는 관리는 되지만 [가상기계] 에서 적용되지는 않으며\r\n"
                       "이 기능은 일시적인 기능입니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_EVENT_MouseEnter = _EVENT_BreakpointButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_EVENT_Click      = _EVENT_BreakpointButton_Click;
              //}

              //[hw-run]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_run]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_hw_run]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\hw_run.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_run]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_run]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_run]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_run]->_BalloonHelpStr
                      ("[가상기계] 를 검증기동 시킵니다.\r\n"
                       "실행중 [정지점] 을 만나면 정지합니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_run]->_EVENT_MouseEnter = _EVENT_DebugRunButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_run]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_run]->_EVENT_Click      = _EVENT_DebugRunButton_Click;

              //}

              //[hw-stop]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_stop]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_hw_stop]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\hw_stop.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_stop]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_stop]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_stop]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_stop]->_BalloonHelpStr
                      ("[가상기계] 를 일시 정지 시킵니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_stop]->_EVENT_MouseEnter = _EVENT_DebugStopButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_stop]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_stop]->_EVENT_Click      = _EVENT_DebugStopButton_Click;

              //}

              //[hw-reset]
              //{
                  //위치 조정.
                  _debug_bmpbtns[d_debug_bmpbtn_reset]->_Left(i);
                  //{
                      //다음 위치 조정.
                      i += 40;//_debug_bmpbtns[d_debug_bmpbtn_hw_reset]->Width;
                  //}

                  //그림 할당하기.
                  bmp_path = ExtractFilePath(Application->ExeName) + "sysbmp\\button\\debug\\hw_reset.bmp";

                  //그림 지정.
                  _debug_bmpbtns[d_debug_bmpbtn_reset]->_Bitmap(bmp_path);

                  //[2009.04.08.수][추가!!!]
                  _debug_bmpbtns[d_debug_bmpbtn_reset]->_ColorBack(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _debug_bmpbtns[d_debug_bmpbtn_reset]->_BalloonHelpUse(true);
                      _debug_bmpbtns[d_debug_bmpbtn_reset]->_BalloonHelpStr
                      ("[가상기계] 를 초기화하고 재기동 시킵니다.\r\n"
                       "실행중 [정지점] 을 만나면 정지합니다."
                      );

                  //}

                  //동작함수 등록.
                  _debug_bmpbtns[d_debug_bmpbtn_reset]->_EVENT_MouseEnter = _EVENT_DebugResetButton_MouseEnter;
                  _debug_bmpbtns[d_debug_bmpbtn_reset]->_EVENT_MouseLeave = _EVENT_Button_MouseLeave;
                  _debug_bmpbtns[d_debug_bmpbtn_reset]->_EVENT_Click      = _EVENT_DebugResetButton_Click;

              //}

          //}

      //}

      //[탭]
      //{
          _tabs          = new Tgui_tabs_Form(this);
          _tabs->Parent  = this;
          _tabs->Visible = true;

          //[컨트롤 초기화]
          //{
              _tabs->_Tabs(" 가상기계개발 \r\n 개발검증 \r\n 재검증 ");

              //[2009.04.09.목][추가!!!]
              _tabs->_TabSelColor(_colorBack);

          //}

          //[EVENT 함수]
          //{
              _tabs->_EVENT_TabSelected = _EVENT_TabSelect;

          //}

      //}

      //[연결 버튼]
      //{
          //[2009.04.04.토][추가!!!]{----------------------------------
          //[연결종류] 를 구분하는 [체크버튼] 을 생성하고 초기화 한다.
          //}----------------------------------------------------------

          //[가상구동]
          //{
              _vmosSim_CheckBtn          = new Tgui_check_button_Form(this);
              _vmosSim_CheckBtn->Parent  = this;
              _vmosSim_CheckBtn->Visible = true;

              //[초기화]{-----------------------------------------------------------------
              _vmosSim_CheckBtn->_Left(_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Left +
                                       _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Width + 8);
              _vmosSim_CheckBtn->_Top(_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Top + 3);
              //[EVENT 함수]--------------------------------------------------------------
              _vmosSim_CheckBtn->_EVENT_Click = _EVENT_Click_vmosSim_CheckBtn;
              //}-------------------------------------------------------------------------

              //[풍선 도움말 설정]
              //{
                  //[2009.04.30.목][추가!!!]
                  _vmosSim_CheckBtn->_BalloonHelpUse(true);
                  _vmosSim_CheckBtn->_BalloonHelpStr
                  ("[맷돌] 을 [가상구동] 시킵니다.\r\n"
                   "이 기능은 내부적으로 CPU 자원을 많이 점유하므로\r\n"
                   "사용하지 않을때는 반드시 꺼놓기 바랍니다."
                  );

              //}

              //[라벨 설정]
              //{
                  _vmosSim_Label          = new Tgui_Label_Form(this);
                  _vmosSim_Label->Parent  = this;
                  _vmosSim_Label->Visible = true;

                  _vmosSim_Label->_Width(12*6 + 2);
                  _vmosSim_Label->_Height(12);
                  _vmosSim_Label->_Left(_vmosSim_CheckBtn->Left + _vmosSim_CheckBtn->Width + 2);
                  _vmosSim_Label->_Top(_vmosSim_CheckBtn->Top - 1);
                  _vmosSim_Label->_FontXY(0,0);
                  _vmosSim_Label->_FontColor(_ide_option->color_0);
                  _vmosSim_Label->_Caption("맷돌가상구동");

                  //[2009.04.08.수][추가!!!]
                  _vmosSim_Label->_BackColor(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _vmosSim_Label->_BalloonHelpUse(true);
                      _vmosSim_Label->_BalloonHelpStr
                      ("[맷돌] 을 [가상구동] 시킵니다.\r\n"
                       "이 기능은 내부적으로 CPU 자원을 많이 점유하므로\r\n"
                       "사용하지 않을때는 반드시 꺼놓기 바랍니다."
                      );

                  //}

              //}

          //}

          //[맷돌연결]
          //{
              _vmosMdl_CheckBtn          = new Tgui_check_button_Form(this);
              _vmosMdl_CheckBtn->Parent  = this;
              _vmosMdl_CheckBtn->Visible = true;

              //[초기화]{-----------------------------------------------------------------
              _vmosMdl_CheckBtn->_Left(_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Left +
                                       _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Width + 8);
              _vmosMdl_CheckBtn->_Top(_ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->Top + 17);
              //[EVENT 함수]--------------------------------------------------------------
              _vmosMdl_CheckBtn->_EVENT_Click = _EVENT_Click_vmosMdl_CheckBtn;
              //}-------------------------------------------------------------------------

              //[풍선 도움말 설정]
              //{
                  //[2009.04.30.목][추가!!!]
                  _vmosMdl_CheckBtn->_BalloonHelpUse(true);
                  _vmosMdl_CheckBtn->_BalloonHelpStr
                  ("[맷돌] 을 [직접연결] 합니다.\r\n"
                   "이 기능은 통신선에 [맷돌] 이 연결된 상태여야 제대로 동작 됩니다.\r\n"
                   "기본적으로 현재 [설정 대화상자] 에서 설정된 통신포트를 자동으로\r\n열어줍니다."
                  );

              //}

              //[라벨 설정]
              //{
                  _vmosMdl_Label          = new Tgui_Label_Form(this);
                  _vmosMdl_Label->Parent  = this;
                  _vmosMdl_Label->Visible = true;

                  _vmosMdl_Label->_Width(12*6 + 2);
                  _vmosMdl_Label->_Height(12);
                  _vmosMdl_Label->_Left(_vmosMdl_CheckBtn->Left + _vmosMdl_CheckBtn->Width + 2);
                  _vmosMdl_Label->_Top(_vmosMdl_CheckBtn->Top - 1);
                  _vmosMdl_Label->_FontXY(0,0);
                  _vmosMdl_Label->_FontColor(_ide_option->color_0);
                  _vmosMdl_Label->_Caption("맷돌직접연결");

                  //[2009.04.08.수][추가!!!]
                  _vmosMdl_Label->_BackColor(_colorBack);

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _vmosMdl_Label->_BalloonHelpUse(true);
                      _vmosMdl_Label->_BalloonHelpStr
                      ("[맷돌] 을 [직접연결] 합니다.\r\n"
                       "이 기능은 통신선에 [맷돌] 이 연결된 상태여야 제대로 동작 됩니다.\r\n"
                       "[맷돌] 과 통신을 위하여 [설정 대화상자] 에서 통신포트를 열어 주십시요."
                      );

                  //}

              //}

          //}

      //}

      //[검증 주기 설정]
      //{
          //[버튼 바탕색 설정]{-------------------------------------------------------
          //[2009.10.03.토][추가!!!]
          //버튼의 바탕색을 설정한다.
          BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_DebugEtcBtn, &color);
          //}-------------------------------------------------------------------------

          //[버튼]
          //{
              _debugPeriod_Btn          = new Tgui_button_Form(this);
              _debugPeriod_Btn->Parent  = this;
              _debugPeriod_Btn->Visible = false;

              //[초기화]{--------------------------------------------------------------
              _debugPeriod_Btn->_Width(80);
              _debugPeriod_Btn->_Height(21);
              _debugPeriod_Btn->_Left(_debug_bmpbtns[d_debug_bmpbtn_reset]->Left +
                                      _debug_bmpbtns[d_debug_bmpbtn_reset]->Width + 5);
              _debugPeriod_Btn->_Top(_debug_bmpbtns[d_debug_bmpbtn_reset]->Top + 5);
              _debugPeriod_Btn->_Caption_AutoPos(true);
              _debugPeriod_Btn->_FontColor(_ide_option->color_0);
              _debugPeriod_Btn->_Caption("00010(ms)");
              //[2009.10.03.토][추가!!!]
              _debugPeriod_Btn->_BackColor(color);

              //[풍선 도움말 설정]
              //{
                  //[2009.04.30.목][추가!!!]
                  _debugPeriod_Btn->_BalloonHelpUse(true);
                  _debugPeriod_Btn->_BalloonHelpStr
                  ("자동 실행 기능의 [실행주기] 를 설정합니다.\r\n"
                   "(ms) 단위로 설정 가능하지만 사용자 PC 에 따라 차이가 있습니다.\r\n"
                   "버튼을 누르면 나오는 아래의 [한줄 편집기] 에서 값을 설정할수 있으며\r\n"
                   "설정값을 입력후 <Enter 키> 나 다시 버튼을 누르면 값이 즉시 반영됩니다.\r\n"
                   "[10진수] 만 사용 가능합니다."
                  );

              //}

              _debugPeriod_Btn->_EVENT_Click = _EVENT_Click_debugPeriod_Btn;
              //}----------------------------------------------------------------------

          //}

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

              //[초기화]{-----------------------------------------------------------------------
              _debugPeriod_Edit->_Width(80);
              _debugPeriod_Edit->Left = (_debugPeriod_Btn->Left);
              _debugPeriod_Edit->Top  = (_debugPeriod_Btn->Top + _debugPeriod_Btn->Height + 2);
              _debugPeriod_Edit->_EDIT_TextOut("10");

              _debugPeriod_Edit->_EVENT_KeyEnter = _EVENT_KeyEnter_debugPeriod_Edit;
              //}-------------------------------------------------------------------------------

          //}

      //}

      //[검증 문서 종류]
      //{
          //[2009.04.06.화][추가!!!]{-------------------
          //[검증문서종류] 를 설정하는 기능을 배치한다.
          //}-------------------------------------------

          //[<*.c> 문서]
          //{
              //[버튼]
              //{
                  _file_C_Btn          = new Tgui_button_Form(this);
                  _file_C_Btn->Parent  = this;
                  _file_C_Btn->Visible = false;

                  //[초기화]{------------------------------------------------------------
                  _file_C_Btn->_Width(64);
                  _file_C_Btn->_Height(21);
                  _file_C_Btn->_Left(this->Width - 70 * 3 + 4);
                  _file_C_Btn->_Top(_debug_bmpbtns[d_debug_bmpbtn_breakpoint]->Top + 5);
                  _file_C_Btn->_Caption_AutoPos(false);
                  _file_C_Btn->_FontColor(IDE_COLOR_1);
                  _file_C_Btn->_Caption("C");
                  _file_C_Btn->_Caption_X(34);
                  _file_C_Btn->_Caption_Y(5);
                  //[2009.10.03.토][추가!!!]
                  _file_C_Btn->_BackColor(color);

                  _file_C_Btn->_EVENT_Click = _EVENT_Click_file_C_Btn;
                  //}--------------------------------------------------------------------

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _file_C_Btn->_BalloonHelpUse(true);
                      _file_C_Btn->_BalloonHelpStr
                      ("<*.c> 문서를 대상으로 검증합니다.\r\n"
                       "버튼을 누르면 즉시 해당 문서가 열리고 현재 실행 위치가 지정됩니다."
                      );

                  //}

              //}

              //[확인상자]
              //{
                  _file_C_CheckBtn          = new Tgui_check_button_Form(this);
                  _file_C_CheckBtn->Parent  = this;
                  _file_C_CheckBtn->Visible = false;

                  //[초기화]{-------------------------------------
                  _file_C_CheckBtn->_Left(_file_C_Btn->Left + 5);
                  _file_C_CheckBtn->_Top(_file_C_Btn->Top + 5);
                  //기본은 <*.c> 문서가 처리 대상이 된다.
                  _file_C_CheckBtn->_Checked(true);
                  //스스로 동작되지 못하게 만든다.
                  _file_C_CheckBtn->Enabled = false;
                  //}---------------------------------------------

              //}

          //}

          //[<*.gasm> 문서]
          //{
              //[버튼]
              //{
                  _file_Asm_Btn          = new Tgui_button_Form(this);
                  _file_Asm_Btn->Parent  = this;
                  _file_Asm_Btn->Visible = false;

                  //[초기화]{-------------------------------------------------------
                  _file_Asm_Btn->_Width(64);
                  _file_Asm_Btn->_Height(21);
                  _file_Asm_Btn->_Left(_file_C_Btn->Left + _file_C_Btn->Width + 4);
                  _file_Asm_Btn->_Top(_file_C_Btn->Top);
                  _file_Asm_Btn->_Caption_AutoPos(false);
                  _file_Asm_Btn->_FontColor(_ide_option->color_0);
                  _file_Asm_Btn->_Caption("ASM");
                  _file_Asm_Btn->_Caption_X(27);
                  _file_Asm_Btn->_Caption_Y(5);
                  //[2009.10.03.토][추가!!!]
                  _file_Asm_Btn->_BackColor(color);

                  _file_Asm_Btn->_EVENT_Click = _EVENT_Click_file_Asm_Btn;
                  //}---------------------------------------------------------------

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _file_Asm_Btn->_BalloonHelpUse(true);
                      _file_Asm_Btn->_BalloonHelpStr
                      ("<*.gasm> 문서를 대상으로 검증합니다.\r\n"
                       "버튼을 누르면 즉시 해당 문서가 열리고 현재 실행 위치가 지정됩니다."
                      );

                  //}

              //}

              //[확인상자]
              //{
                  _file_Asm_CheckBtn          = new Tgui_check_button_Form(this);
                  _file_Asm_CheckBtn->Parent  = this;
                  _file_Asm_CheckBtn->Visible = false;

                  //[초기화]{-----------------------------------------
                  _file_Asm_CheckBtn->_Left(_file_Asm_Btn->Left + 5);
                  _file_Asm_CheckBtn->_Top(_file_Asm_Btn->Top + 5);
                  //스스로 동작되지 못하게 만든다.
                  _file_Asm_CheckBtn->Enabled = false;
                  //}-------------------------------------------------

              //}

          //}

          //[<*.gcsm> 문서]
          //{
              //[버튼]
              //{
                  _file_CAsm_Btn          = new Tgui_button_Form(this);
                  _file_CAsm_Btn->Parent  = this;
                  _file_CAsm_Btn->Visible = false;

                  //[초기화]{------------------------------------------------------------
                  _file_CAsm_Btn->_Width(64);
                  _file_CAsm_Btn->_Height(21);
                  _file_CAsm_Btn->_Left(_file_Asm_Btn->Left + _file_Asm_Btn->Width + 4);
                  _file_CAsm_Btn->_Top(_file_Asm_Btn->Top);
                  _file_CAsm_Btn->_Caption_AutoPos(false);
                  _file_CAsm_Btn->_FontColor(_ide_option->color_0);
                  _file_CAsm_Btn->_Caption("C+ASM");
                  _file_CAsm_Btn->_Caption_X(20);
                  _file_CAsm_Btn->_Caption_Y(5);
                  //[2009.10.03.토][추가!!!]
                  _file_CAsm_Btn->_BackColor(color);

                  _file_CAsm_Btn->_EVENT_Click = _EVENT_Click_file_CAsm_Btn;
                  //}--------------------------------------------------------------------

                  //[풍선 도움말 설정]
                  //{
                      //[2009.04.30.목][추가!!!]
                      _file_CAsm_Btn->_BalloonHelpUse(true);
                      _file_CAsm_Btn->_BalloonHelpStr
                      ("<*.gcsm> 문서를 대상으로 검증합니다.\r\n"
                       "버튼을 누르면 즉시 해당 문서가 열리고 현재 실행 위치가 지정됩니다."
                      );

                  //}

              //}

              //[확인상자]
              //{
                  _file_CAsm_CheckBtn          = new Tgui_check_button_Form(this);
                  _file_CAsm_CheckBtn->Parent  = this;
                  _file_CAsm_CheckBtn->Visible = false;

                  //[초기화]{-------------------------------------------
                  _file_CAsm_CheckBtn->_Left(_file_CAsm_Btn->Left + 5);
                  _file_CAsm_CheckBtn->_Top(_file_CAsm_Btn->Top + 5);
                  //스스로 동작되지 못하게 만든다.
                  _file_CAsm_CheckBtn->Enabled = false;
                  //}---------------------------------------------------

              //}

          //}

      //}

      //[진행막대]
      //{
          //[2009.08.02.일][추가!!!]
          _progress          = new Tgui_Progress_Form(this);
          _progress->Parent  = _tabs;
          _progress->Visible = false;

          _progress->_Height(_tabs->Height);
          //[2011.07.14.목][수정!!!]
          //<gui_tabs> 에서 [화살표] 가 없어졌으므로 이 길이를 제외한다.
          _progress->_Left(_tabs->_arrow_x - 1);// + 16);
          _progress->_Width(_tabs->Width - _progress->Left - 1);
          _progress->_Top(0);

          //진행막대색을 설정한다.
          BMP_Get_Bright_Color(_ide_option->color_0, Ide_Bright_Progress, &(_progress->_progressColor));

      //}

  //}

  //[초기 탭 설정]
  //{
      _EVENT_TabSelect();
  //}

  //[컨트롤 그리기]
  //{
      //컨트롤을 그려서 모양을 만든다.
      _Shape();
  //}

  return;

}

__fastcall Tide_buttons_Form::~Tide_buttons_Form(void)
{
  //[2012.04.29.일][수정!!!]{-----------------------------------------------
  //생성 역순으로 해제해야 오류가 발생하지 않는다.
  //
  //<_progress> 의 <Parent> 가 <_tabs> 이기 때문에
  //<_tabs> 를 먼저 삭제하는 경우 <_progress> 전체가 다 줄줄이 오류가 난다.
  //아예 거꾸로 삭제한다.
  //}-----------------------------------------------------------------------

  //[VAR]
  //{
      int  i;

  //}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  for(i = 0; i < d_debug_bmpbtns_count; i++)
  {
    if(_debug_bmpbtns[i] != NULL) { delete _debug_bmpbtns[i]; _debug_bmpbtns[i] = NULL; }

  }

  for(i = 0; i < d_ctrl_bmpbtns_count; i++)
  {
    if(_ctrl_bmpbtns[i] != NULL) { delete _ctrl_bmpbtns[i]; _ctrl_bmpbtns[i] = NULL; }

  }

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

}

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

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

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

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

  }

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

  return;

}

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

void __fastcall Tide_buttons_Form::_Border(void)
{
  //[2006.10.22.일]{----------------------------------------------------------
  //테두리는 아래 한줄이면 된다.
  //테두리는 직접 보이는 것이고 내용에 영향을 주지 않아야 하므로 직접 그린다.
  //}-------------------------------------------------------------------------

  //[테두리 만들기]
  //{
      _bmp_->Canvas->Pen->Color   = _ide_option->color_0;

      _bmp_->Canvas->Pen->Width   = 1;

      _bmp_->Canvas->Brush->Style = bsClear;

      _bmp_->Canvas->Rectangle(_bmp_->Canvas->ClipRect);
  //}

  return;

}

void __fastcall Tide_buttons_Form::_Shape(void)
{
  //[2006.10.19.목][생성!!!]{-------------------
  //[하위항목] 구조체 정보를 대상으로 처리한다.
  //}-------------------------------------------

  //[VAR]
  //{
      int    x, y, w, h;
  //}

  //[바탕색]
  //{
      _bmp_->Canvas->Brush->Color = _colorBack;

      //[2009.04.09.목][수정!!!]{--------------------------------------
      //<this->ClientRect> 에서 <_bmp_->Canvas->ClipRect> 로 수정한다.
      _bmp_->Canvas->FillRect(_bmp_->Canvas->ClipRect);
      //}--------------------------------------------------------------

  //}

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

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

  return ;

}

void __fastcall Tide_buttons_Form::_Resize(void)
{
  //[2006.10.22.일][생성!!!]{--
  //컨트롤 크기를 조정한다.
  //}--------------------------

  //[크기조정]
  //{
      //IDE Form 에 맞게 크기를 조정한다.
      this->Width = ide_menu_Form->Width - ide_mbutton_Form->Width + 2;
  //}

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

  return;

}

void __fastcall Tide_buttons_Form::_Draw(void)
{
  //[2006.10.31.화][생성!!!]

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

  return;

}

void __fastcall Tide_buttons_Form::_ControlButtons_Visible(bool  pVISIBLE)
{
  //[2006.11.13.월][생성!!!]{------------------
  //컨트롤 관련 버튼을 전부 보여주거나 감춘다.
  //
  //[2009.04.04.토][수정!!!]-------------------
  //추가된 컨트롤도 같이 처리한다.
  //}------------------------------------------

  //[VAR]
  //{
      int  i;

  //}

  for(i = 0; i < d_ctrl_bmpbtns_count; i++)
  {
    if(_ctrl_bmpbtns[i] != NULL)
    {
      _ctrl_bmpbtns[i]->Visible = pVISIBLE;

    }

  }

  //[연결 종류 구분 처리]
  //{
      _vmosSim_CheckBtn->Visible = pVISIBLE;
      _vmosSim_Label->Visible    = pVISIBLE;
      _vmosMdl_CheckBtn->Visible = pVISIBLE;
      _vmosMdl_Label->Visible    = pVISIBLE;

  //}

  return;

}

void __fastcall Tide_buttons_Form::_DebugButtons_Visible(bool  pVISIBLE)
{
  //[2006.11.13.월][생성!!!]{------------------
  //디버그 관련 버튼을 전부 보여주거나 감춘다.
  //}------------------------------------------

  //[VAR]
  //{
      int  i;
  //}

  for(i = 0; i < d_debug_bmpbtns_count; i++)
  {
    if(_debug_bmpbtns[i] != NULL)
    {
      _debug_bmpbtns[i]->Visible = pVISIBLE;

    }

  }

  //[검증 주기 설정]
  //{
      //[2009.04.10.금][추가!!!]
      _debugPeriod_Btn->Visible = pVISIBLE;
      //_debugPeriod_Edit->Visible = pVISIBLE;

  //}


  //[검증 문서 종류]
  //{
      //[2009.04.07.화][추가!!!]

      _file_C_Btn->Visible    = pVISIBLE;
      _file_Asm_Btn->Visible  = pVISIBLE;
      _file_CAsm_Btn->Visible = pVISIBLE;

      _file_C_CheckBtn->Visible    = pVISIBLE;
      _file_Asm_CheckBtn->Visible  = pVISIBLE;
      _file_CAsm_CheckBtn->Visible = pVISIBLE;

  //}

  return;

}

void __fastcall Tide_buttons_Form::_Enable_Init(void)
{
  //[2009.04.04.토][생성!!!]{-----------------------------------------------------------
  //[활성화/비활성화]로 시작해야 하는 버튼을 구분하여 [활설화/비활성화] 를 설정해 준다.
  //기본적으로 버튼은 [활성화] 상태로 시작되므로 여기서는 [비활성화] 만 처리하면 된다.
  //}-----------------------------------------------------------------------------------

  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_Enable(false);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_Enable(false);

  return;

}

void __fastcall Tide_buttons_Form::_Enable_Sim(bool  pEnable)
{
  //[2009.04.04.토][생성!!!]{-----------------------------------
  //<맷돌가상구동> 과 관련된 버튼을 [활성화/비활성화] 처리한다.
  //}-----------------------------------------------------------

  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Enable(pEnable);

  //[가상구동] 의 경우도 <GMRC> 지원의 경우는 PC 의 기능(COM/LPT)을 [모방구동] 하는 경우로
  //실행이 되어야 하므로 전체 기능을 활성화 해준다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_Enable(pEnable);

  return;

}

void __fastcall Tide_buttons_Form::_Enable_Mdl(bool  pEnable)
{
  //[2009.04.04.토][생성!!!]{-----------------------------------
  //<맷돌직접연결> 과 관련된 버튼을 [활성화/비활성화] 처리한다.
  //}-----------------------------------------------------------

  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_run]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_stop]->_Enable(pEnable);
  _ctrl_bmpbtns[d_ctrl_bmpbtn_hw_reset]->_Enable(pEnable);

  return;

}

void __fastcall Tide_buttons_Form::_Progress_Visible(bool  pVisible)
{
  //[2009.08.02.일][생성!!!]{--------------------------------------------------------------
  //[진행바] 를 보이거나 보이지 않게 한다.
  //보일때는 세부적인 크기를 조정해 주어야 제 위치에 보여지므로 이렇게 별도 함수로 만든다.
  //}--------------------------------------------------------------------------------------

  if(pVisible == true)
  {
    //크기를 조정한다.
    //[2011.07.14.목][수정!!!]
    //<gui_tabs> 에서 [화살표] 가 없어졌으므로 이 길이를 제외한다.
    _progress->_Left(_tabs->_arrow_x - 1);// + 16);
    _progress->_Width(_tabs->Width - _progress->Left - 1);

    //[2009.08.09.일][추가!!!]{----------------------------------------------------
    //보여줄때는 항상 0 상태로 보여준다.
    //이는 처음에 진행된 상태로 보이면 깜박이는 것으로 보일수 있어 보기 좋지 않다.
    _progress->_Progress(0);
    //}----------------------------------------------------------------------------

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

  }
  else
  {
    //감춘다.
    _progress->Visible = false;

  }

  return;

}

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

void __fastcall Tide_buttons_Form::FormResize(TObject *Sender)
{
  //[2006.10.27.금][생성!!!]

  if(_tabs != NULL) { _tabs->_Resize(); }

  //[검증 문서 종류][2009.04.07.화][추가!!!]{-----------------------------------------------------------
  if(_file_C_Btn != NULL) { _file_C_Btn->_Left(this->Width - 70 * 3 + 4); }
  if(_file_C_CheckBtn != NULL) { _file_C_CheckBtn->_Left(_file_C_Btn->Left + 5); }
  if(_file_Asm_Btn != NULL) { _file_Asm_Btn->_Left(_file_C_Btn->Left + _file_C_Btn->Width + 4); }
  if(_file_Asm_CheckBtn != NULL) { _file_Asm_CheckBtn->_Left(_file_Asm_Btn->Left + 5); }
  if(_file_CAsm_Btn != NULL) { _file_CAsm_Btn->_Left(_file_Asm_Btn->Left + _file_Asm_Btn->Width + 4); }
  if(_file_CAsm_CheckBtn != NULL) { _file_CAsm_CheckBtn->_Left(_file_CAsm_Btn->Left + 5); }
  //}---------------------------------------------------------------------------------------------------

  if(_tabs != NULL)
  {
    //[2009.08.02.일][추가!!!]
    //[2011.07.14.목][수정!!!]
    //<gui_tabs> 에서 [화살표] 가 없어졌으므로 이 길이를 제외한다.
    _progress->_Left(_tabs->_arrow_x - 1);// + 16);
    _progress->_Width(_tabs->Width - _progress->Left - 1);

  }

  return;

}

//------------------------------------------------------------------------------
//[FUNCTION POINTER]------------------------------------------------------------
//------------------------------------------------------------------------------

void __fastcall Tide_buttons_Form::_EVENT_TabSelect(void)
{
  //[2006.11.06.월][생성!!!]{--------------------
  //선택된 탭에 해당하는 버튼들을 보여준다.
  //
  //[2009.04.25.토][수정!!!]---------------------
  //[검증개발] 관련 문서처리 부분이 추가 되었다.
  //
  //[2012.04.29.일][수정!!!]---------------------
  //[검증정보] 삭제 부분 추가.
  //}--------------------------------------------

  //[VAR]
  //{
      class  VDEBUG  *vdebug;

      //[2009.12.28.월][추가!!!]
      bool            noDownload;

  //}

  //[VDEBUG 위치 얻기]{---
  VDEBUG_GetPtr(&vdebug);
  //}---------------------

  switch(_tabs->_tabindex)
  {
    case 0 :
    {
      //[버튼 동작 대기열 등록]
      //{
          //[2009.05.06.수][추가!!!]{----------------------------------------
          //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
          //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
          //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
          //
          //멈추지 않고 [탭전환] 으로 종료할수도 있으므로 여기도 추가해준다.
          //}----------------------------------------------------------------

          if(main_Form->timeOut_Timer->Enabled == true)
          {
            main_Form->BtnQueue_Event = _EVENT_TabSelect;
            main_Form->btnQueue_Timer->Enabled = true;
            return;

          }

      //}


      //[문서 전체 수정 가능 설정][2009.04.25.토][추가!!!]{----------------------
      //[전체 문서 수정 가능 속성을 수정한다.
      if(editor_edit_Form != NULL) { editor_edit_Form->_readOnlyAll = false; }
      //아래 History_EditFileOpen() 함수사용이전에 반드시 [읽기전용] 속성이 해제
      //되어야 하므로 반드시 여기서 사용되어야 한다.
      //}------------------------------------------------------------------------

      //[정지점 초기화]
      //{
          //[2009.04.29.수][추가!!!]{--------------------------------------------
          //중복 실행 되지 않도록 여기서 처리한다.
          //[VDEBUG] 가 동작 중이라면 확실하게 [검증개발] 에서 전환되는 것이므로
          //이미 [정지점] 이 설정되 있다면 전부 삭제해 준다.
          //}--------------------------------------------------------------------

          if(vdebug != NULL)
          {
            Debug_BpList_DeleteAll();

            //[수정이력 복구][2009.05.05.화][추가!!!]{---------------------------------
            //[개발검증] 에서 전환시에 한번만 처리 되어야 하므로 여기서 처리한다.
            //반복되는 경우는 현재 [수정이력] 이 이전에 내용으로 초기화 될수 있다.
            //자세한 내용은 아래 함수안의 내용을 참고한다.
            if(editor_edit_Form != NULL) { editor_edit_Form->History_EditFileOpen(); }
            //}------------------------------------------------------------------------

          }

      //}

      //[VMOS 정지]
      //{
          //[2010.02.27.토][추가!!!]{-----------------------------------------------------------
          //[검증] 시에 VMOS 를 정지 시키지 않고 실행중 [가상기계개발] 로 전환한 경우는
          //자동으로 현재 동작중인 VMOS 를 정지시킨다.
          //그렇지 않은 경우는 계속 구동되게 된다.
          //[맷돌] 인 경우는 문제가 없으나, [가상구동] 인 경우는 필요없이 CPU 를 점유하게 된다.
          //}-----------------------------------------------------------------------------------

          if(vdebug != NULL) { Ide_Ctrl_Stop(); }

      //}

      //[검증 구동기 종료]
      //{
          //[2009.04.07.화]{-----------
          //[검증 구동기] 를 종료한다.
		  //}--------------------------

          Ide_VDEBUG_Quit();

      //}

      //[검증 정보 삭제]
      //{
          //[2012.04.29.일][추가!!!]{---------------------------------------
          //<debug.cpp> 의 [전역변수] 로 선언된 [검증정보] 를 삭제한다.
          //[검증시] 에만 [생성] 되는 정보로 [검증] 이 끝났다면 [삭제] 하여
          //메모리를 해제한다.
          //
          //여러번 사용해도 안전하므로 항상 처리해 준다.
          //}---------------------------------------------------------------

          Debug_Info_DeleteAll();

      //}

      //[컨트롤 탭]{-----------------
      _ControlButtons_Visible(true);
      _DebugButtons_Visible(false);
      //}----------------------------

      //[제어 유/무효화]
      //{
          //[2009.04.10.금][추가!!!]
          //다시 활성화 시킨다.
          ide_menu_Form->_Enable(true);
          ide_mbutton_Form->_Enable(true);

          //[2009.04.25.토][추가!!!]
          if(editor_top_Form != NULL) { editor_top_Form->_close_bmpbtns->_Enable(true); }

      //}

      //[행 지정자 감추기]
      //{
          //[2009.04.29.수][추가!!!]{---------
          //[지정자] 들을 보이지 않게 만든다.
          //}---------------------------------

          if(editor_edit_Form != NULL) { DEBUG_Indicator_Hide(); }

      //}

      //[검증식 한줄 편집기:감추기]
      //{
          //[2012.09.23.일][추가!!!]
          if(editor_edit_Form != NULL)
          {
            if(editor_edit_Form->_dbgView_Edit != NULL)
            {
              if(editor_edit_Form->_dbgView_Edit->Visible == true) { editor_edit_Form->_dbgView_Edit->Visible = false; }

            }

          }

      //}

      //[편집기 다시 그리기]
      //{
          //[2011.06.25.토][추가!!!]{------------------------------------------
          //[검증식 보기판] 이 나와 있는 채로 전환되는 경우 잔상이 남게 되므로
          //반드시 마지막으로 한번 다시 그려준다.
          //}------------------------------------------------------------------

          if(editor_edit_Form != NULL) { editor_edit_Form->_EditBuf_Text(); }

      //}

      //[정보창 전환]
      //{
          //[2011.07.13.수][추가!!!]{--------------------------------------------------
          //[가상기계개발] 로 전환되었으므로 [검증] 과 관련된 [정보창 항목] 을 감춘다.
          //}--------------------------------------------------------------------------

          if(ide_tree_Form != NULL) { ide_tree_Form->_Tab_Change(true); }

      //}

      //[편집기 빠른목록 전환]
      //{
          //[2011.07.24.일][추가!!!]{------------------------------------
          //[가상기계개발] 로 전환되었으므로 [편집기] 항목으로 전환한다.
          //}------------------------------------------------------------

          if(editor_edit_Form != NULL) { editor_edit_Form->_PopupMemu_Set(true); }

      //}

    } break;

    case 1 :
    case 2 :
	{
	  //[검증 탭 전환 가능 확인]
      //{
          //[2009.04.05.일][추가!!!]{-----------------------------------------------------------------
          //[맷돌가상구동] 이나 [맷돌직접연결] 이 활성화된 상태가 아니라면 [검증] 으로 전환할수 없다.
          //이를 확인하고 전환된 상태라면 원상복구 시킨다.
          //}-----------------------------------------------------------------------------------------

          if(!((_vmosSim_CheckBtn->_checked == true) || (_vmosMdl_CheckBtn->_checked == true)))
          {
            //이 경우는 [검증] 을 할수 없는 상태이므로 전환하지 않는다.
            //이미 전환된 탭은 원래 [가상기계개발] 탭으로 돌려 놓는다.
            _tabs->_TabIndex(0);

            //[탭 화살표 초기화]
            //{
                //[2009.04.05.일][중요수정!!!]{--------------------------------------------------
                //화살표를 눌러서 탭을 전환하다가 아래의 알림창이 나오는 경우는 [탭] 의 화살표가
                //눌려진 상태로 있게 되므로 아예 강제로 올라온 것으로 초기화 한다.
                //}------------------------------------------------------------------------------

                _tabs->_Shape_Arrows_Init();

            //}

            //[검증 정보 삭제]
            //{
                //[2012.04.29.일][추가!!!]{---------------------------------------
                //<debug.cpp> 의 [전역변수] 로 선언된 [검증정보] 를 삭제한다.
                //[검증시] 에만 [생성] 되는 정보로 [검증] 이 끝났다면 [삭제] 하여
                //메모리를 해제한다.
                //
                //여러번 사용해도 안전하므로 항상 처리해 준다.
                //}---------------------------------------------------------------

                Debug_Info_DeleteAll();

            //}

            //[알림글 보이기]
            //{
                ide_msgbox_Form->_MsgBox(d_MSGBOX_info,
                                         "<맷돌가상구동> 이나 <맷돌직접연결> 상태에서만 [개발검증] 이 가능합니다.\r\n"
                                         "먼저 <맷돌가상구동> 이나 <맷돌직접연결> 을 선택해 주십시요.");

            //}

            return;

          }

      //}

      //[중복검사]
      //{
          //[2009.040.07.화][추가!!!]{--------------------------------------------------------------
          //계속 [검증개발] 을 누르는 경우 이미 전환된 상태라면 계속 아래 함수를 처리해서는 안된다.
          //간단하게 이미 [검증] 용 버튼이 보이는 상태라면 열린 것으로 보고 중복 처리 하지 않는다.
          //}---------------------------------------------------------------------------------------

          //다음 함수를 처리하지 않고 바로 끝으로 이동한다.
          if(_debug_bmpbtns[0]->Visible == true) goto DEBUG_TAB_VIEW;

      //}

      //[개발검증 준비]
	  //{
          //[2009.04.05.일]{------------------------------------------
          //[개발검증] 을 위한 모든 작업을 여기서 수행한다.
          //[수정된문서] 가 있을수 있으므로 <Build> 도 자동 처리한다.
          //}---------------------------------------------------------

          //[설치 유무 설정]
          //{
              //[2009.12.28.월][추가!!!]{----------------------
              //탭에 따라 가상기계를 설치할지 말지를 결정한다.
              //}----------------------------------------------

              //[개발검증] 인 경우는 반드시 가상기계를 설치해야 한다.
              if     (_tabs->_tabindex == 1) { noDownload = false; }
              //이 경우는 가상기계를 설치하지 않는다.
              else if(_tabs->_tabindex == 2) { noDownload = true;  }

          //}

          if(Ide_Ctrl_Auto_Debug(noDownload) != true)
          {
            //처리과정에서 오류가 있는 경우는 다시 원래 탭으로 돌려 놓는다.

            //[검증 구동기 종료][2009.04.07.화]{---
            //[검증 구동기] 를 종료한다.
            Ide_VDEBUG_Quit();
            //}------------------------------------

            _tabs->_TabIndex(0);

            //[탭 화살표 초기화]
            //{
                //[2009.04.05.일][중요수정!!!]{--------------------------------------------------
                //화살표를 눌러서 탭을 전환하다가 아래의 알림창이 나오는 경우는 [탭] 의 화살표가
                //눌려진 상태로 있게 되므로 아예 강제로 올라온 것으로 초기화 한다.
                //}------------------------------------------------------------------------------

                _tabs->_Shape_Arrows_Init();

            //}

            //[검증 정보 삭제]
            //{
                //[2012.04.29.일][추가!!!]{---------------------------------------
                //<debug.cpp> 의 [전역변수] 로 선언된 [검증정보] 를 삭제한다.
                //[검증시] 에만 [생성] 되는 정보로 [검증] 이 끝났다면 [삭제] 하여
                //메모리를 해제한다.
                //
                //여러번 사용해도 안전하므로 항상 처리해 준다.
                //}---------------------------------------------------------------

                Debug_Info_DeleteAll();

            //}

            //[알림글 보이기]
            //{
                ide_msgbox_Form->_MsgBox(d_MSGBOX_error,
                                         "[개발검증] 전환중 오류가 발생하였습니다.\r\n"
                                         "오류 내용을 참고하여 수정후 다시 시도해 주십시요.");

            //}

            //더이상 처리하지 않는다.
            return;

          }

      //}

      //[현재 문서 <수정이력> 저장][2009.05.15.금]{---------------------------------------
      //[개발검증] 시에는 모든 문서가 [전체읽기전용] 으로 설정되어 문서 전환시
      //[수정이력] 이 저장되지 않으므로 현재 문서는 무조건 일단 [수정이력] 을 저장해준다.
      //[개발검증] 으로 전환시에 한번만 처리 되어야 하므로 여기서 처리한다.
      if(editor_edit_Form != NULL) { editor_edit_Form->History_EditFileSave(); }
      //}---------------------------------------------------------------------------------

      //[ASM 문서 삭제][2009.05.15.금][추가!!!]{------------------------------
      //항상 새롭게 수정된 <*.gasm>, <*.gcsm> 문서를 열수 있도록 무조건 현재
      //열려있는 <ASM> 문서는 삭제한다.
      //이는 현재 체계가 이미 열려있는 문서는 다시 열수 없게 되있기 때문이다.
      //
      //[2011.05.31.화][수정!!!]----------------------------------------------
      //<*.glib> 문서까지 처리되도록 수정하였고, 함수 이름을 교체하였다.
      //이 함수안의 설명을 참고한다.
      Ide_File_Close_DebugFiles();
      //}---------------------------------------------------------------------

      //[정지점 초기화]
      //{
          //[2009.04.29.수][추가!!!]{--------------------------------------------
          //중복 실행 되지 않도록 여기서 처리한다.
          //[VDEBUG] 가 동작 중이라면 확실하게 [검증개발] 에서 전환되는 것이므로
          //이미 [정지점] 이 설정되 있다면 전부 삭제해 준다.
          //}--------------------------------------------------------------------

          Debug_BpList_DeleteAll();

      //}

      DEBUG_TAB_VIEW:

      //[디버그 탭]
      _ControlButtons_Visible(false);
      _DebugButtons_Visible(true);

      //[제어 유/무효화]
      //{
          //[2009.04.10.금][추가!!!]{------------------------------------------------------------
          //[개발검증] 시에는 문서를 열거나 닫을수 없어야 하므로 관련 기능을 전부 비활성화 한다.
          //}------------------------------------------------------------------------------------

          if(Opt_Ide_Gigyenics != true)
          {
            //[2011.06.16.목][수정!!!]{-----------------------------------------
            //내가 개발할때 검증하는 [항목] 이 { 메뉴:기계닉스 } 에 존재하므로
            //개발시에는 [무효화] 하지 않는다.
            //}-----------------------------------------------------------------

            ide_menu_Form->_Enable(false);

          }

          ide_mbutton_Form->_Enable(false);

          //[2009.04.25.토][추가!!!]
          if(editor_top_Form != NULL) { editor_top_Form->_close_bmpbtns->_Enable(false); }

          //[문서 전체 수정 가능 설정][2009.04.25.토][추가!!!]{-------------------
          //[개발검증] 시에는 모든 문서는 수정 불가 상태가 된다.
          if(editor_edit_Form != NULL) { editor_edit_Form->_readOnlyAll = true; }
          //}---------------------------------------------------------------------

      //}

      //[2009.07.30.목][중요추가!!!]{------------------------------------------------------------
      //바로 위의 Ide_Ctrl_Auto_Debug() 함수안에서 자동으로 한번 처리되지만,
      //실제 [맷돌모듈] 의 경우는 제대로 동작 되지 않으므로, 확실하게 여기서 한번더 처리해 준다.
      Ide_Ctrl_DebugReset();
      //}----------------------------------------------------------------------------------------

      //[정보창 전환]
      //{
          //[2011.07.13.수][추가!!!]{-------------------------------------------------------
          //[검증] 관련 기능으로 전환되었으므로 [검증] 과 관련된 [정보창 항목] 을 보여준다.
          //}-------------------------------------------------------------------------------

          if(ide_tree_Form != NULL) { ide_tree_Form->_Tab_Change(false); }

      //}

      //[편집기 빠른목록 전환]
      //{
          //[2011.07.24.일][추가!!!]{------------------------------------
          //[검증발] 으로 전환되었으므로 [검증] 항목으로 전환한다.
          //}------------------------------------------------------------

          if(editor_edit_Form != NULL) { editor_edit_Form->_PopupMemu_Set(false); }

      //}

    } break;

  }

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_AutoButton_Click(void)
{
  //[2006.12.10.일][생성!!!]{---------------------------
  //[가상머신] 장착후 확인 까지 전부 자동으로 수행한다.
  //
  //[2011.04.27.수][추가!!!]----------------------------
  //[중복처리] 를 방지한다.
  //}---------------------------------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{-----------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Enable(false);
  //}------------------------------------------------

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Auto();

  //[동작해제]{-------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_auto]->_Enable(true);
  //}-----------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_AutoButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 자동으로 가상기계를 [완성] 하고 [설치] 후 [검사] 까지 수행합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_CheckButton_Click(void)
{
  //[2006.12.10.일][생성!!!]{---------------------------------------------
  //문법검사를 수행한다.
  //
  //[2011.04.27.수][추가!!!]----------------------------------------------
  //[중복처리] 를 방지한다.
  //
  //[2012.05.11.금][수정!!!]----------------------------------------------
  //금일 [한개문서] 만 처리할수 있는 <ide_main.cpp:Ide_Parser_OneFile()>
  //함수를 새로 만들어 <Alt+F9> 인 경우 현재 [편집중] 인 문서 한개만
  //<Parser()> 처리하는 것으로 수정.
  //
  //[선택형식] 에 따라 두가지로 구분 처리.
  //금일 이 문제 때문에 <gui_bmpbutton> 에 [상태변환:타이머] 기능을 추가.
  //
  //[일반선택] : 현재 [편집기] 에 보이고 있는 문서만 [문법검사].
  //[길게선택] : 설계 묶음 안의 모든 <*.c> 를 대상으로 [문법검사].
  //}---------------------------------------------------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_Enable(false);
  //}-------------------------------------------------

  //[문법검사]
  //{
      //[2009.02.12.목][수정!!!]{--------------------------------------
      //단계적 인 처리를 수행한다.
      //
      //[2012.05.11.금][수정!!!]---------------------------------------
      //[선택형식] 에 따라 두가지로 구분 처리.
      //[일반선택] : 현재 [편집기] 에 보이고 있는 문서만 [문법검사].
      //[길게선택] : 설계 묶음 안의 모든 <*.c> 를 대상으로 [문법검사].
      //}--------------------------------------------------------------

      if(_ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_modeTimerOvt == true)
      {
        //[길게선택] 의 경우로 [설계묶음] 안의 모든 문서를 대상으로 검사.
        IDE_Build(d_Build_Parser);

      }
      else
      {
        if(editor_edit_Form != NULL)
        {
          //[일반선택] 의 경우로 현재 [편집기] 에 보이고 있는 문서만 검사.
          Ide_Parser_OneFile(editor_edit_Form->_textinfo[editor_edit_Form->_textinfo_index].filename.c_str());

        }

      }

  //}

  //[동작해제]{--------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_check]->_Enable(true);
  //}------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_CheckButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]
  //[2012.05.12.토][수정!!!]

  _tabs->_Blank_Text(" 설계문서를 [해석] 합니다(두가지 방식으로 동작).",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_CompileButton_Click(void)
{
  //[2009.02.12.목][수정!!!]{---
  //
  //[2011.04.27.수][추가!!!]----
  //[중복처리] 를 방지한다.
  //}---------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{--------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_Enable(false);
  //}---------------------------------------------------

  //[부품 만들기]
  //{
      //[2009.02.12.목][수정!!!]{--
      //단계적 인 처리를 수행한다.
      //}--------------------------

      IDE_Build(d_Build_Parser|d_Build_Object);

  //}

  //[동작해제]{----------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_compile]->_Enable(true);
  //}--------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_CompileButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 가상기계 [부품] 을 만듭니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_LinkButton_Click(void)
{
  //[2009.02.12.목][수정!!!]{---
  //
  //[2011.04.27.수][추가!!!]----
  //[중복처리] 를 방지한다.
  //}---------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{-----------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_Enable(false);
  //}------------------------------------------------

  //[조립하기]
  //{
      //[2009.02.12.목][수정!!!]{--
      //단계적 인 처리를 수행한다.
      //}--------------------------

      IDE_Build(d_Build_Parser|d_Build_Object|d_Build_Link);

  //}

  //[동작해제]{-------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_link]->_Enable(true);
  //}-----------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_LinkButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 가상기계 [부품] 을 [조립] 합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_BuildButton_Click(void)
{
  //[2009.02.12.목][수정!!!]{---
  //
  //[2011.04.27.수][추가!!!]----
  //[중복처리] 를 방지한다.
  //}---------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_Enable(false);
  //}-------------------------------------------------

  //[완성하기]
  //{
      //[2009.02.12.목][수정!!!]{--
      //단계적 인 처리를 수행한다.
      //}--------------------------

      IDE_Build(d_Build_Parser|d_Build_Object|d_Build_Link|d_Build_Gvmx);

  //}

  //[동작해제]{--------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_build]->_Enable(true);
  //}------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_BuildButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 가상기계를 [제작] 합니다.",
                     _ide_option->color_0);

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_DownloadButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{-----------------------------------
  //[설계묶음] 처리로 완성된 [*.gvmx] 를 [맷돌] 에 [설치] 한다.
  //
  //[2011.04.27.수][추가!!!]------------------------------------
  //[중복처리] 를 방지한다.
  //}-----------------------------------------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{---------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Enable(false);
  //}----------------------------------------------------

  //[가상기계 전용 환경 구분 처리]
  //{
      //[2010.07.07.수][수정!!!]{---------------------------------------------------
      //현재 [가상기계 전용 환경] 인 경우는 더 부가적인 처리를 수행하도록 수정한다.
      //}---------------------------------------------------------------------------

      if(_ide_option->gvmMode == true)
      {
        //[2010.07.07.수][추가!!!]

        if(Ide_Ctrl_Stop() != true) goto lbEND;

        if(Ide_Ctrl_Erase() != true) goto lbEND;

        if(Ide_Ctrl_Download() != true) goto lbEND;

        if(Ide_Ctrl_Verify() != true) goto lbEND;

        if(Ide_Ctrl_ResetStop() != true) goto lbEND;

      }
      else
      {
        //[2009.12.23.수][추가!!!]{------------------------------------------------------
        //<AT45DB041B> 를 ROM 으로 하는 [운영체제] 인 경우는 SPI 로 접근 중일수 있으므로
        //일단 VMOS 의 동작을 정지 시킨뒤 읽어야 오류가 발생하지 않는다.
        //그렇지 않은 경우는 현재 실행 중인 가상기계와 서로 충돌이 생긴다.
        if(Ide_Ctrl_Stop() != true) goto lbEND;
        //}------------------------------------------------------------------------------

        //[2009.04.04.토][추가!!!]
        if(Ide_Ctrl_Download() != true) goto lbEND;

        //[2010.07.07.수][추가!!!]{----------------------------------------------------------
        //[재기동] 하지 않고 설치된 [가상기계] 를 [실행] 상태로 만들고 [VMOS] 를 정지시킨다.
        if(Ide_Ctrl_ResetStop() != true) goto lbEND;
        //}----------------------------------------------------------------------------------

      }

  //}

  lbEND:

  //[동작해제]{-----------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_download]->_Enable(true);
  //}---------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_DownloadButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 가상기계를 [설치] 합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_UploadButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{--------------------------------------------
  //[맷돌] 에 [설치] 된 [VMEX] 를 읽어 들여서 임시 [저장소] 에 저장한다.
  //<*.gvmx> 로 저장하는 것은 다른 함수로 처리한다.
  //
  //[2011.04.27.수][추가!!!]---------------------------------------------
  //[중복처리] 를 방지한다.
  //}--------------------------------------------------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{-------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Enable(false);
  //}--------------------------------------------------

  //[2009.12.23.수][추가!!!]{------------------------------------------------------
  //<AT45DB041B> 를 ROM 으로 하는 [운영체제] 인 경우는 SPI 로 접근 중일수 있으므로
  //일단 VMOS 의 동작을 정지 시킨뒤 읽어야 오류가 발생하지 않는다.
  //그렇지 않은 경우는 현재 실행 중인 가상기계와 서로 충돌이 생긴다.
  Ide_Ctrl_Stop();
  //}------------------------------------------------------------------------------

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Upload();

  //[동작해제]{---------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_upload]->_Enable(true);
  //}-------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_UploadButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]{---
  //[2013.06.19.수][수정!!!]----
  //기능 활성화로 도움말 수정.
  //}---------------------------

  _tabs->_Blank_Text(" 설치된 가상기계를 읽어들여 <*.gvmx> 로 저장.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_VerifyButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{----------------------------------------------
  //[맷돌] 에 [설치] 한 <*.gvmx> 와 설치된 [VMEX] 가 일치 하는지 검사한다.
  //
  //[2011.04.27.수][추가!!!]-----------------------------------------------
  //[중복처리] 를 방지한다.
  //}----------------------------------------------------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{-------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Enable(false);
  //}--------------------------------------------------

  //[2009.12.23.수][추가!!!]{------------------------------------------------------
  //<AT45DB041B> 를 ROM 으로 하는 [운영체제] 인 경우는 SPI 로 접근 중일수 있으므로
  //일단 VMOS 의 동작을 정지 시킨뒤 읽어야 오류가 발생하지 않는다.
  //그렇지 않은 경우는 현재 실행 중인 가상기계와 서로 충돌이 생긴다.
  Ide_Ctrl_Stop();
  //}------------------------------------------------------------------------------

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Verify();

  //[동작해제]{---------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_verify]->_Enable(true);
  //}-------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_VerifyButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 가상기계의 [설치 검사] 를 수행합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_EraseButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{---------------------------------
  //[맷돌] 의 [ROM] 영역을 완전히 지운고 0xff 로 초기화 된다.
  //안에 [설치] 되 있던 모든 [VMEX] 는 완전히 삭제된다.
  //
  //[2011.04.27.수][추가!!!]----------------------------------
  //[중복처리] 를 방지한다.
  //}---------------------------------------------------------

  //[버튼 중복처리 방지]
  //{
      //[2011.04.27.수][추가!!!]{-----------------------------------------
      //현재 동작중인 <_ctrl_bmpbtns> 계열 버튼이 있다면 처리하지 않는다.
      //}-----------------------------------------------------------------

      if(_ctrl_bmpbtns_on != false) { return; }

  //}

  //[동작중 표시]{------------------------------------
  _ctrl_bmpbtns_on = true;
  //이 버튼이 중복 동작되지 않게 아예 묶어놓는다.
  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Enable(false);
  //}-------------------------------------------------

  //[2009.12.22.화][추가!!!]{-------------------------------------------------------
  //단순하게 직접 지우는 경우는 반드시 먼저 현재 구동중인 맷돌을 정지시킨다.
  //이는 현재 실행 중인 경우 바로 지우는 것은 오류가 발생될수 있기 때문이다.
  //<VMOSAT45DB041B> 인 경우는 전체 크기가 512K 바이트로 전체를 다 지우는데 40초가
  //걸리므로 편의상 첫페이지(264바이트) 만 지우게 되는데 이 경우는 [정지] 하지 않고
  //그냥 지우면 지워지지 않은 나머지가 계속 실행된다.
  //따라서, 일단 지우기 전에 반드시 먼저 정시켜야 한다.
  Ide_Ctrl_Stop();
  //}-------------------------------------------------------------------------------

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Erase();

  //[동작해제]{--------------------------------------
  //[2011.04.27.수][추가!!!]
  _ctrl_bmpbtns_on = false;
  _ctrl_bmpbtns[d_ctrl_bmpbtn_erase]->_Enable(true);
  //}------------------------------------------------

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_EraseButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 설치된 가상기계를 모두 [제거] 합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_HwRunButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{-----------------
  //일시 정지되 있던 [맷돌] 을 다시 기동한다.
  //}-----------------------------------------

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.24.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_HwRunButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Start();

  Sleep(250);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_HwRunButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" [맷돌] 을 [기동] 시킵니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_HwStopButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{-------
  //[맷돌] 기동을 일시 정지 시킨다.
  //}-------------------------------

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.24.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_HwStopButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Stop();

  Sleep(250);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_HwStopButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" [맷돌] 을 일시 [정지] 시킵니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_HwResetButton_Click(void)
{
  //[2009.03.18.수][수정!!!]{------
  //[맷돌] 을 초기화후 기동시킨다.
  //}------------------------------

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.24.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_HwResetButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[2009.04.04.토][추가!!!]
  Ide_Ctrl_Reset();

  Sleep(250);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_HwResetButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" [맷돌] 을 [재기동] 시킵니다.",
                     _ide_option->color_0);

  return;

}

//------------------------------------------------------------------------------
//[검증 관련 동작 함수]---------------------------------------------------------
//------------------------------------------------------------------------------

void __fastcall Tide_buttons_Form::_EVENT_ResetButton_Click(void)
{
  //[2009.04.08.수][추가!!!]

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      //현재 <ACK> 확인 [타이머] 가 동작 중인가?
      if(main_Form->timeOut_Timer->Enabled == true)
      {
        //이 경우는 현재 <ACK> 를 확인 중이므로 다른 명령을 전송하면 안되므로
        //일단 [버튼 동작 대기열] 에 등록해 놓는다.
        main_Form->BtnQueue_Event = _EVENT_ResetButton_Click;

        //[버튼 동작 대기열] 을 구동하는 타이머를 구동시킨다.
        main_Form->btnQueue_Timer->Enabled = true;

        //[대기열] 에서 처리하게 되므로 여기서는 다음을 처리하지 않고 바로 종료한다.
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //새로 시작하므로 행관련 정보를 초기화 한다.
      vdebug->debugLine = 0;

      //버튼 종류를 기록한다.
      vdebug->debugBtn  = d_debug_bmpbtn_reset_vector;

  //}

  Ide_Ctrl_Vm_ResetVector();

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_ResetButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" main() 함수 위치로 이동합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_StepStatementButton_Click(void)
{
  //[2009.04.08.수][추가!!!]

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_StepStatementButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_step_statement;

  //}

  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugOpcode);


  return;

}

void __fastcall Tide_buttons_Form::_EVENT_StepStatementButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" [행] 단위로 실행합니다.",
                     _ide_option->color_0);

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_StepOverButton_Click(void)
{
  //[2009.04.09.목][수정!!!]{--------------------------------
  //[2009.07.30.목][수정!!!]
  //실제 [맷돌모듈] 과 [직렬버스] 를 사용하여 직접 처리한다.
  //
  //[2018.05.06.일][중요수정!!!]-----------------------------
  //[main():종료] 관련 중요 수정 있음. 
  //}--------------------------------------------------------

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

      class  VMOS      *vmos;

      DTU1   opcode;

      //[2009.07.30.목][추가!!!]
      DTU8   temp8;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_StepOverButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VMOS 위치 얻기]-------------------------------
  //이미 생성되 있는 [가상 VMOS] 의 위치를 얻는다.
  VMOS_GetPtr(&vmos);
  //[VDEBUG 위치 얻기][2009.04.09.목][추가!!!]{----
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}----------------------------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_step_over;

  //}

  //[<fncall> 구분 처리]
  //{
      //[2009.04.09.목][중요수정!!!]{----------------------------------------------------------
      //<ASM> 계열에서도 적용될수 있도록 [명령어] 를 검사하여 여기서 <fncall> 인 경우는
      //직접 처리한다.
      //
      //[2018.05.06.일][중요수정/추가!!!]******************************************************
      //[main():종료] 가 된 상태에서 <@PC==0xF:F> 인 경우는 [main():종료] 를 의미하므로
      //<VMOS_WrRd()> 로 <0xF:F> 에 접근 하는 경우 검증 오류가 발생한다.
      //그러므로, <opcode> 추출 위치가 <0xF:F> 인 경우는 [main():종료] 로 보고 검증 종료 처리.
      //이미 [main():종료] 로 더이상 검증할 필요가 없다.
      //
      //[2018.05.05.토] 에 관련 중요 수정 한곳 전체 검색으로 참고.
      //}--------------------------------------------------------------------------------------

      //[opcode 읽기]
      //{
          if     (ide_buttons_Form->_vmosSim_CheckBtn->_checked == true) //[가상 VMOS] 대상 처리.
          {
            //[main():종료 인가?]
            //{
                //[2018.05.06.일][추가!!!]{----------------------------------
                //[main():종료] 인 경우는 더이상 처리 하지 않고 [검증:종료].
                //}----------------------------------------------------------
                
                if(vmos->regREG_[d_VM_Reg_PC] == 0xffffffffffffffff)
                {
                  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugBreak);

                  //더이상 처리하지 않고 즉시 종료.
                  return;

                }

            //}

            //[<opcode> 읽기]{---------------------------------------------
            //현재 @PC 위치에서 1 Byte [명령] 을 읽는다.
            vmos->VMOS_WrRd(d_Rd, vmos->regREG_[d_VM_Reg_PC], 1, &opcode);
            //}------------------------------------------------------------
          }
          else if(ide_buttons_Form->_vmosMdl_CheckBtn->_checked == true) //[맷돌모듈] 대상 처리.
          {
            //@PC 위치에서 1 Byte [명령] 을 읽는다.
            //8Byte 수신-------------------------v
            if(ComBus_Read(d_CB_TS_S, d_CB_AK_B, 3, d_Map_Vmos_RegPC, (DTU1 *)(&temp8)) != true) return;

            //[main():종료 인가?]
            //{
                //[2018.05.06.일][추가!!!]{----------------------------------
                //[main():종료] 인 경우는 더이상 처리 하지 않고 [검증:종료].
                //}----------------------------------------------------------

                if(temp8 == 0xffffffffffffffff)
                {
                  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugBreak);

                  //더이상 처리하지 않고 즉시 종료.
                  return;

                }

            //}

            //VMOS 자체에서 직접 읽어 들인다.
            if(ComBus_Read(d_CB_TS_S, d_CB_AK_V, 0, temp8, &opcode) != true) return;

          }

      //}

      if(opcode == 0x2d) //<fncall> 인가?
      {
        if     (ide_buttons_Form->_vmosSim_CheckBtn->_checked == true) //[가상 VMOS] 대상 처리.
        {
          //[검증 정지점 설정]{---------------------------------------
          //<fncall> 명령 총 크기--------------------------------v
          Ide_Ctrl_Vm_SysBreakPoint(vmos->regREG_[d_VM_Reg_PC] + 11);
          //}---------------------------------------------------------

        }
        else if(ide_buttons_Form->_vmosMdl_CheckBtn->_checked == true) //[맷돌모듈] 대상 처리.
        {
          //8Byte 수신-------------------------v
          if(ComBus_Read(d_CB_TS_S, d_CB_AK_B, 3, d_Map_Vmos_RegPC, (DTU1 *)(&temp8)) != true) return;

          //<fncall> 명령 총 크기-----------v
          Ide_Ctrl_Vm_SysBreakPoint(temp8 + 11);

        }

        //[검증 기동으로 설정]{--------------------------------------------------------
        //[함수] 를 일괄 실행하고 위에서 설정해 놓은 [검증 정지점] 에서 정지하게 된다.
        Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugRun);
        //}----------------------------------------------------------------------------

      }
      else
      {
        //계속 다음 [명령] 을 실행하게 만든다.
        Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugOpcode);

      }

  //}

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_StepOverButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" [문장/함수] 단위로 실행합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_StepAutoButton_Click(void)
{
  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_StepAutoButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_step_auto;

  //}

  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugOpcode);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_StepAutoButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" [행] 단위로 자동 실행합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_StepOverAutoButton_Click(void)
{
  //[2009.04.09.목][생성!!!]

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_StepOverAutoButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_step_over_auto;

  //}

  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugOpcode);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_StepOverAutoButton_MouseEnter(void)
{
  //[2009.04.09.목][생성!!!]

  _tabs->_Blank_Text(" [문장/함수] 단위로 자동 실행합니다.",
                     _ide_option->color_0);

  return;

}
//------------------------------------------------------------------------------
void __fastcall Tide_buttons_Form::_EVENT_BreakpointButton_Click(void)
{
  //[2009.04.29.수][수정!!!]{---------------------------------------------
  //이 버튼은 [전환] 버튼으로 상태 전환에 따른 처리를 수행해 주어야 한다.
  //}---------------------------------------------------------------------

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_BreakpointButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_breakpoint;

  //}

  //[상태에 따른 처리 수행]
  //{
      switch(_debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_index)
      {
        case 0 : //현재 올라온 상태.
        {
          //눌린 상태로 표시한다.
          _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_Index(1);

          //[정지점 그림 교체]
          //{
              //[정지점] 그림을 [무효] 그림으로 설정한다.
              if(editor_edit_Form != NULL)
              {
                editor_edit_Form->_BREAKPOINT_Bmp(d_Editor_BreakPoint_Disable);

              }

          //}

          //[동작 처리]
          //{
              //[!]{---------------------------------------------------------------------------
              //현재 [정지점] 을 [맷돌] 에서 전부 삭제한다.
              //[IDE] 상에서는 계속 [정지점] 이 존재하지만 일시적으로 해제 시키는 것이다.
              //[편집기] 상에서는 계속 [정지점] 이 표시되지만 비활성 기호로 교체되어 표시된다.
              //}------------------------------------------------------------------------------

              if(Ide_Ctrl_Vm_BreakPoint(false) != true) return;

          //}

        } break;

        case 1 : //현재 눌린 상태.
        {
          //올라온 상태로 표시한다.
          _debug_bmpbtns[d_debug_bmpbtn_breakpoint]->_Index(0);

          //[정지점 그림 교체]
          //{
              if(editor_edit_Form != NULL)
              {
                //[정지점] 그림을 [무효] 그림으로 설정한다.
                editor_edit_Form->_BREAKPOINT_Bmp(d_Editor_BreakPoint_Enable);

              }

          //}

          //[동작 처리]
          //{
              //[!]{------------------------------------------------------
              //[정지점] 이 다시 유효화 되므로 다시 [맷돌] 에 설정해 주고
              //[편집기] 에서 다시 활성화 상태로 표시해 준다.
              //}---------------------------------------------------------

              if(Ide_Ctrl_Vm_BreakPoint(true) != true) return;

          //}

        } break;

      }

  //}

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_BreakpointButton_MouseEnter(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text(" 현재 설정된 [정지점] 전체를 [유효/무효] 화 시킵니다.",
                     _ide_option->color_0);

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_DebugRunButton_Click(void)
{
  //[2009.04.09.목][수정!!!]{---
  //[VM] 을 [검증기동] 한다.
  //
  //[2019.02.14.목][수정]-------
  //}---------------------------

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}
  
  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_DebugRunButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_run;

  //}

  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugRun);

  //[행지정자 감추기]
  //{
      //[2019.02.14.목][추가]{-------------------------------------------------
      //실행 이 계속 되므로 [검증] 시 보이는 [행지정자] 를 감춘다.
      //이는 [정지점] 설정으로 멈춘 경우 [행지정자] 가 이 행을 지정하게 되는데
      //[실행] 시에도 그대로 남아 있어 혼란을 주기 때문에 이를 막기 위한것.
      //}----------------------------------------------------------------------

      DEBUG_Indicator_Hide();

  //}

  Sleep(250);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_DebugRunButton_MouseEnter(void)
{
  //[2009.04.09.목][수정!!!]

  _tabs->_Blank_Text(" [가상기계] 를 [검증기동] 시킵니다.",
                     _ide_option->color_0);

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_DebugStopButton_Click(void)
{
  //[2009.04.09.목][수정!!!]{---
  //[VM] 을 [정지] 한다.
  //}---------------------------

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_DebugStopButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;

        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_stop;

  //}

  //[명령] 을 실행하지 않고 정지하되 <Break> 보고를 받아야 하므로 직접 정지후 <Break> 를 요청한다.
  Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugBreak);
  //Ide_Ctrl_Vm_Mode(d_VM_Mode_DebugOpcode);

  Sleep(250);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_DebugStopButton_MouseEnter(void)
{
  //[2009.04.09.목][생성!!!]

  _tabs->_Blank_Text(" [가상기계] 를 일시 [정지] 시킵니다.",
                     _ide_option->color_0);

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_DebugResetButton_Click(void)
{
  //[2009.04.09.목][수정!!!]{-----------------
  //일시 정지되 있던 [VM] 을 [정지] 한다.
  //}-----------------------------------------

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2009.04.17.금][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      if(main_Form->timeOut_Timer->Enabled == true)
      {
        main_Form->BtnQueue_Event = _EVENT_DebugResetButton_Click;
        main_Form->btnQueue_Timer->Enabled = true;
        return;

      }

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  //[검증타이머 종료]{------------------------------
  //[2009.04.17.금][중요추가!!!]
  //일단 반드시 [검증타이러] 를 먼저 종료해야 한다.
  vdebug->DEBUG_Timer(false);
  //}-----------------------------------------------

  //[검증정보 기록]
  //{
      //[2009.04.09.목][추가!!!]

      //버튼 종류를 기록한다.
      vdebug->debugBtn = d_debug_bmpbtn_reset;

  //}

  Ide_Ctrl_Vm_Reset();

  Sleep(250);

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_DebugResetButton_MouseEnter(void)
{
  //[2009.04.09.목][생성!!!]

  _tabs->_Blank_Text(" [가상기계] 를 [재기동] 시킵니다.",
                     _ide_option->color_0);

  return;

}

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

void __fastcall Tide_buttons_Form::_EVENT_Button_MouseLeave(void)
{
  //[2006.11.14.화][생성!!!]

  _tabs->_Blank_Text("",
                     _ide_option->color_0);

  return;

}

//[연결 종류 구분]--------------------------------------------------------------

void __fastcall Tide_buttons_Form::_EVENT_Click_vmosSim_CheckBtn(void)
{
  //[2009.04.04.토][생성!!!]{----------------------------------------------------------------
  //
  //[2010.07.06.화][수정!!!]-----------------------------------------------------------------
  //<Ide_Menu_GVM_Run(), Ide_Menu_GVM_Ide()> 에서 이 함수를 호출하여 [가상기계 전용 환경] 을
  //처리하므로 이와 관련된 처리를 수행한다.
  //}----------------------------------------------------------------------------------------

  //[선택 가능 확인]
  //{
      if(_vmosMdl_CheckBtn->_checked == true)
      {
        //이미 다른 것이 선택된 상태에서는 처리하지 않아야 한다.
        ide_msgbox_Form->_MsgBox(d_MSGBOX_error,
                                 "<맷돌가상구동> 과 <맷돌직접연결> 은 동시에 사용될수 없습니다.\r\n"
                                 "먼저 <맷돌직접연결> 을 해제해 주십시요.");

        //이미 [선택] 된것으로 설정되므로 여기서 다시 해제해 준다.
        _vmosSim_CheckBtn->_Checked(false);

        //처리하지 않는다.
        return;

      }

  //}

  if(_vmosSim_CheckBtn->_checked == true)
  {
    //[선택] 된 경우로, [맷돌가상구동] 을 실행한다.
    Ide_VMOS_Run();

    //[가상기동 전용 환경인가?]
    //{
        //[2010.07.06.화][추가!!!]{-----------------------
        //[가상기동 전용 환경] 의 경우는 처리하지 않는다.
        //}-----------------------------------------------

        if(_ide_option->gvmMode != true)
        {
          //관련 버튼을 활성화 한다.
          _Enable_Sim(true);

        }

    //}

    //[맷돌 통신포트 번호 대피]
    //{
        //[2010.04.01.목][추가!!!]{----------------------------------------------------------
        //[맷돌가상구동] 인 경우는 [맷돌직접연결] 에 사용된 기본통신포트번호를 반드시
        //별도로 저장해 주어야 한다.
        //이는 [맷돌직접연결] 시 적용한 통신포트가 [맷돌가상구동] 시 내부적으로 변경되는경우
        //다시 [맷돌직접연결] 시 재설정 해주어야 하는 번거로움을 막기 위한 것이다.
        //즉, 편의적인 기능인 것이다.
        //}----------------------------------------------------------------------------------

        _ide_option->portNumber_Backup = _ide_option->portnumber;

    //}

    //[전광판]
    //{
        //[2010.04.09.금][추가!!!]{------
        //[전광판] 을 무조건 정지시킨다.
        //}------------------------------

        if(ide_editor_Form != NULL)
        {
          //무조건 정지시킨다.
          ide_editor_Form->_GDotMatrix_RotateTemp2(false);

        }  

    //}

  }
  else
  {
    //[해제] 된 경우로, [맷돌가상구동] 을 중지한다.
    Ide_VMOS_Quit();

    //[가상기동 전용 환경인가?]
    //{
        //[2010.07.06.화][추가!!!]{-----------------------
        //[가상기동 전용 환경] 의 경우는 처리하지 않는다.
        //}-----------------------------------------------

        if(_ide_option->gvmMode != true)
        {
          //관련 버튼을 비활성화 한다.
          _Enable_Sim(false);

        }

    //}

    //[맷돌 통신포트 번호 복구]
    //{
        //[2010.04.02.금][추가!!!]{--------------------------------------------------------
        //[맷돌가상구동] 등으로 새로운 통신포트가 선택된 경우 다시 [맥돌직접연결] 시의
        //통신포트로 대피했던 값을 재 설절해준다.
        //이는 기본적으로 IDE 의 통신포트는 [맷돌직접연결] 이 경우를 위한 것이기 때문이다.
        //}--------------------------------------------------------------------------------

        _ide_option->portnumber = _ide_option->portNumber_Backup;

    //}

    //[전광판]
    //{
        //[2010.04.09.금][추가!!!]{--------------------
        //[전광판] 을 피한 설정값으로 다시 복구시킨다.
        //}--------------------------------------------

        if(ide_editor_Form != NULL)
        {
          ide_editor_Form->_GDotMatrix_RotateTemp2(true);

        }

    //}

  }

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_Click_vmosMdl_CheckBtn(void)
{
  //[2009.04.04.토][생성!!!]{-----------------------------------------------
  //[2011.06.03.금][수정!!!]------------------------------------------------
  //[맷돌직접연결] 이 해제된 경우는 자동으로 열려 있던 통신포트를 닫아준다.
  //
  //[2012.03.11.일][추가!!!]------------------------------------------------
  //<[v]맷동직접연결> 이 선택된 경우 [통신포트] 가 [개발검증내용] 에서 연
  //[통신포트] 와 같은 번호라면 [개발검증내용] 에서 열어 놓은 [통신포트] 를
  //먼저 닫아준 뒤 <[v]맷동직접연결> 을 처리.
  //단, [개발검증내용] 의 [통신포트] 가 [열려] 있는 경우만 처리.
  //같은 포트를 사용하고 있어도 열려있지 않으면 무관.
  //}-----------------------------------------------------------------------

  //[선택 가능 확인]
  //{
      if(_vmosSim_CheckBtn->_checked == true)
      {
        //이미 다른 것이 선택된 상태에서는 처리하지 않아야 한다.
        ide_msgbox_Form->_MsgBox(d_MSGBOX_error,
                                 "<맷돌가상구동> 과 <맷돌직접연결> 은 동시에 사용될수 없습니다.\r\n"
                                 "먼저 <맷돌가상구동> 을 해제해 주십시요.");

        //이미 [선택] 된것으로 설정되므로 여기서 다시 해제해 준다.
        _vmosMdl_CheckBtn->_Checked(false);

        //더이상 처리하지 않고 종료한다.
        return;

      }

  //}

  if(_vmosMdl_CheckBtn->_checked == true)
  {
    //[!]{-----------------------------------------------------------------------
    //[선택] 된 경우로, [맷돌직접연결] 로 설정된다.
    //이는 통신시에 <_vmosMdl_CheckBtn->_checked> 이미 기록된 상태를 참고 하므로
    //별도 처리는 필요없다.
    //}--------------------------------------------------------------------------


    //[<출력창:개발검증내용:통신포트> 확인]
    //{
        //[2012.03.11.일][추가!!!]{-----------------------------------------------------
        //[출력창:개발검증내용:통신포트] 와 [맷돌직접연결:통신포트] 가 같은 번호인 경우
        //배타적인 [열기] 가 가능하도록 처리.
        //단, 둘다 [같은 통신포트 번호] 를 사용하고 있을 경우만 해당.
        //
        //[출력창:개발검증내용:통신포트] 가 열려있는 경우는 이를 먼저 강제로 닫아준다.
        //
        //[2012.03.12.월][수정!!!]------------------------------------------------------
        //전용 함수로 자동 처리.
        //}-----------------------------------------------------------------------------

        if(ide_msg_Form != NULL)
        {
          ide_msg_Form->_ComPort_ExClose();

        }

    //}


    //[통신포트 열기]
    //{
        //[2009.08.09.일][추가!!!]{-------------------------------------------------------------
        //일일히 [대화상자] 를 열어서 [열기] 를 하지 않도록, 직접 여기서 통신포트까지 열어준다.
        //이는 실제 [맷돌모듈] 은 반드시 통신포트로 통신을 해야 하기 때문이다.
        //통신포트를 열지 못했다면 그냥 종료한다.
        //}-------------------------------------------------------------------------------------

        if(Ide_Comport_Open(_ide_option->portnumber) != true)
        {
          //통신포트를 열수 없는 경우이므로 바로 종료한다.

          //이미 [선택표시] 된 것을 다시 지워준다.
          _vmosMdl_CheckBtn->_Checked(false);

          return;

        }

    //}

    //[가상기동 전용 환경인가?]
    //{
        //[2010.07.07.수][추가!!!]{-----------------------
        //[가상기동 전용 환경] 의 경우는 처리하지 않는다.
        //}-----------------------------------------------

        if(_ide_option->gvmMode != true)
        {
          //관련 버튼을 활성화 한다.
          _Enable_Mdl(true);

        }

    //}

    //[전광판]
    //{
        //[2010.04.09.금][추가!!!]{------
        //[전광판] 을 무조건 정지시킨다.
        //}------------------------------

        if(ide_editor_Form != NULL)
        {
          ide_editor_Form->_GDotMatrix_RotateTemp2(false);

        }

    //}

  }
  else
  {
    //[!]{-----------------------------------------------------------------------
    //[해제] 된 경우로, [맷돌직접연결] 로 해제된다.
    //이는 통신시에 <_vmosMdl_CheckBtn->_checked> 이미 기록된 상태를 참고 하므로
    //별도 처리는 필요없다.
    //}--------------------------------------------------------------------------

    //[통신포트 닫기]
    //{
        //[2011.06.03.금][추가!!!]{----------------------------------------------------
        //[맷돌직접연결] 이 해제되는 경우는 통신포트를 닫아준다.
        //여러개의 IDE 를 돌아가면서 동시에 같은 통신 포트를 사용하는 경우 [설정] 으로
        //들어가서 통신포트를 닫아주는 것이 매우 불편한다.
        //
        //단, 통신포트를 닫는 것과 [맷돌직접연결] 을 해제하는 것은 무관하므로
        //통신포트가 닫히지 않는 경우라도 다른 처리는 전부 수행해 주어야 한다.
        //}----------------------------------------------------------------------------

        Ide_Comport_Close();

    //}

    //[가상기동 전용 환경인가?]
    //{
        //[2010.07.07.수][추가!!!]{-----------------------
        //[가상기동 전용 환경] 의 경우는 처리하지 않는다.
        //}-----------------------------------------------

        if(_ide_option->gvmMode != true)
        {
          //관련 버튼을 비활성화 한다.
          _Enable_Mdl(false);

        }

    //}

    //[전광판]
    //{
        //[2010.04.09.금][추가!!!]{--------------------
        //[전광판] 을 피한 설정값으로 다시 복구시킨다.
        //}--------------------------------------------

        if(ide_editor_Form != NULL)
        {
          ide_editor_Form->_GDotMatrix_RotateTemp2(true);

        }

    //}

  }

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_Click_file_C_Btn(void)
{
  //[2009.04.07.화][생성!!!]

  //[VAR]
  //{
      class  VDEBUG  *vdebug;

      //[2011.05.28.토][추가!!!]
      int    vmMode;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2011.05.28.토][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      //현재 <ACK> 확인 [타이머] 가 동작 중인가?
      if(main_Form->timeOut_Timer->Enabled == true)
      {
        //이 경우는 현재 <ACK> 를 확인 중이므로 다른 명령을 전송하면 안되므로
        //일단 [버튼 동작 대기열] 에 등록해 놓는다.
        main_Form->BtnQueue_Event = _EVENT_Click_file_C_Btn;

        //[버튼 동작 대기열] 을 구동하는 타이머를 구동시킨다.
        main_Form->btnQueue_Timer->Enabled = true;

        //[대기열] 에서 처리하게 되므로 여기서는 다음을 처리하지 않고 바로 종료한다.
        return;

      }

  //}

  //[현재 <VMOS:VM> 이 <정지> 상태인가?]
  //{
      //[2011.05.28.토][추가!!!]{-----------------------------------------
      //현재 [VMOS:VM] 이 [정지] 가 아니라면 문서전환을 하지 않아야 한다.
      //}-----------------------------------------------------------------

      //<vmMode> 읽어들이기.
      if(Ide_Ctrl_Vm_Mode_Read(&vmMode) != true) return;

      //[정지] 상태가 아니라면 종료한다.
      if(vmMode != d_VM_Mode_Stop) return;

  //}

  //[VDEBUG 위치 얻기]{---
  VDEBUG_GetPtr(&vdebug);
  //}---------------------

  _file_C_CheckBtn->_Checked(true);
  _file_C_Btn->_FontColor(IDE_COLOR_1);

  _file_Asm_CheckBtn->_Checked(false);
  _file_Asm_Btn->_FontColor(_ide_option->color_0);

  _file_CAsm_CheckBtn->_Checked(false);
  _file_CAsm_Btn->_FontColor(_ide_option->color_0);

  //[바로 문서를 전환해 준다]
  //{
      //[2009.04.21.화][추가!!!]{-------------------------------------------------------------
      //[정지] 상태를 지정하는 함수를 사용하여 바로 해당문서로 전환하고 현재 위치를 지정한다.
      //}-------------------------------------------------------------------------------------

      if((main_Form->timeOut_Timer->Enabled == false) && (vdebug->debugTimer_En == false))
      {
        //[검증 타이머] 가 구동되고있지 않은 경우만 처리한다.

        //[2010.12.30.목][수정!!!]{-----------------------------------
        //[명령] 이 실행되지 않고 행만 지정되도록 <true> 로 지정한다.
        Debug_Break(true);
        //}-----------------------------------------------------------

      }

  //}

  //[동작을 유지할 것인가?]
  //{
      //[2011.05.28.토][추가!!!]{--------------------------------------------------------------
      //함수 앞부분의 기능 추가로 이 버튼의 기능이 실행되는 경우 [VMOS] 가 멈추가 된다.
      //단, 이전에 [자동] 관련 검증이 실행 중이었던 경우는 계속 이 기능이 유지되도록 처리한다.
      //}--------------------------------------------------------------------------------------

      if     (vdebug->debugBtn == d_debug_bmpbtn_step_auto)
      {
        _EVENT_StepAutoButton_Click();

      }
      else if(vdebug->debugBtn == d_debug_bmpbtn_step_over_auto)
      {
        _EVENT_StepOverAutoButton_Click();

      }

  //}

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_Click_file_Asm_Btn(void)
{
  //[2009.04.07.화][생성!!!]{---------------------------------------------------
  //[2011.05.28.토][수정!!!]----------------------------------------------------
  //현재 [VMOS:VM] 이 구동중일 때는 문서 전환시 제대로 정보가 표시되지 않으므로
  //문서가 전환되지 않도록 수정한다.
  //일반적인 [->>>] [-/-\->>] 등 검증의 경우는 영향 받지 않는다.
  //}---------------------------------------------------------------------------

  //[VAR]
  //{
      class  VDEBUG  *vdebug;

      //[2011.05.28.토][추가!!!]
      int    vmMode;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2011.05.28.토][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      //현재 <ACK> 확인 [타이머] 가 동작 중인가?
      if(main_Form->timeOut_Timer->Enabled == true)
      {
        //이 경우는 현재 <ACK> 를 확인 중이므로 다른 명령을 전송하면 안되므로
        //일단 [버튼 동작 대기열] 에 등록해 놓는다.
        main_Form->BtnQueue_Event = _EVENT_Click_file_Asm_Btn;

        //[버튼 동작 대기열] 을 구동하는 타이머를 구동시킨다.
        main_Form->btnQueue_Timer->Enabled = true;

        //[대기열] 에서 처리하게 되므로 여기서는 다음을 처리하지 않고 바로 종료한다.
        return;

      }

  //}

  //[현재 <VMOS:VM> 이 <정지> 상태인가?]
  //{
      //[2011.05.28.토][추가!!!]{-----------------------------------------
      //현재 [VMOS:VM] 이 [정지] 가 아니라면 문서전환을 하지 않아야 한다.
      //}-----------------------------------------------------------------

      //<vmMode> 읽어들이기.
      if(Ide_Ctrl_Vm_Mode_Read(&vmMode) != true) return;

      //[정지] 상태가 아니라면 종료한다.
      if(vmMode != d_VM_Mode_Stop) return;

  //}

  //[VDEBUG 위치 얻기]{---
  VDEBUG_GetPtr(&vdebug);
  //}---------------------

  _file_C_CheckBtn->_Checked(false);
  _file_C_Btn->_FontColor(_ide_option->color_0);

  _file_Asm_CheckBtn->_Checked(true);
  _file_Asm_Btn->_FontColor(IDE_COLOR_1);

  _file_CAsm_CheckBtn->_Checked(false);
  _file_CAsm_Btn->_FontColor(_ide_option->color_0);

  //[바로 문서를 전환해 준다]
  //{
      //[2009.04.21.화][추가!!!]{-------------------------------------------------------------
      //[정지] 상태를 지정하는 함수를 사용하여 바로 해당문서로 전환하고 현재 위치를 지정한다.
      //}-------------------------------------------------------------------------------------

      if((main_Form->timeOut_Timer->Enabled == false) && (vdebug->debugTimer_En == false))  
      {
        //[검증 타이머] 가 구동되고있지 않은 경우만 처리한다.

        //[2010.12.30.목][수정!!!]{-----------------------------------
        //[명령] 이 실행되지 않고 행만 지정되도록 <true> 로 지정한다.
        Debug_Break(true);
        //}-----------------------------------------------------------

      }

  //}

  //[동작을 유지할 것인가?]
  //{
      //[2011.05.28.토][추가!!!]{--------------------------------------------------------------
      //함수 앞부분의 기능 추가로 이 버튼의 기능이 실행되는 경우 [VMOS] 가 멈추가 된다.
      //단, 이전에 [자동] 관련 검증이 실행 중이었던 경우는 계속 이 기능이 유지되도록 처리한다.
      //}--------------------------------------------------------------------------------------

      if     (vdebug->debugBtn == d_debug_bmpbtn_step_auto)
      {
        _EVENT_StepAutoButton_Click();

      }
      else if(vdebug->debugBtn == d_debug_bmpbtn_step_over_auto)
      {
        _EVENT_StepOverAutoButton_Click();

      }

  //}

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_Click_file_CAsm_Btn(void)
{
  //[2009.04.07.화][생성!!!]{---------------------------------------------------
  //[2011.05.28.토][수정!!!]----------------------------------------------------
  //현재 [VMOS:VM] 이 구동중일 때는 문서 전환시 제대로 정보가 표시되지 않으므로
  //문서가 전환되지 않도록 수정한다.
  //일반적인 [->>>] [-/-\->>] 등 검증의 경우는 영향 받지 않는다.
  //}---------------------------------------------------------------------------

  //[VAR]
  //{
      class  VDEBUG  *vdebug;

      //[2011.05.28.토][추가!!!]
      int    vmMode;

  //}

  //[버튼 동작 대기열 등록]
  //{
      //[2011.05.28.토][중요추가!!!]{-----------------------------
      //현재 <ACK> 를 확인하고 있는 중일수 있으므로 이경우는 바로
      //동작되지 않고 일단 [동작 대기열] 에 등록해 놓은뒤에
      //<ACK> 확인용 [타이머] 가 종료되면 자동으로 동작되게 한다.
      //}---------------------------------------------------------

      //현재 <ACK> 확인 [타이머] 가 동작 중인가?
      if(main_Form->timeOut_Timer->Enabled == true)
      {
        //이 경우는 현재 <ACK> 를 확인 중이므로 다른 명령을 전송하면 안되므로
        //일단 [버튼 동작 대기열] 에 등록해 놓는다.
        main_Form->BtnQueue_Event = _EVENT_Click_file_CAsm_Btn;

        //[버튼 동작 대기열] 을 구동하는 타이머를 구동시킨다.
        main_Form->btnQueue_Timer->Enabled = true;

        //[대기열] 에서 처리하게 되므로 여기서는 다음을 처리하지 않고 바로 종료한다.
        return;

      }

  //}

  //[현재 <VMOS:VM> 이 <정지> 상태인가?]
  //{
      //[2011.05.28.토][추가!!!]{-----------------------------------------
      //현재 [VMOS:VM] 이 [정지] 가 아니라면 문서전환을 하지 않아야 한다.
      //}-----------------------------------------------------------------

      //<vmMode> 읽어들이기.
      if(Ide_Ctrl_Vm_Mode_Read(&vmMode) != true) return;

      //[정지] 상태가 아니라면 종료한다.
      if(vmMode != d_VM_Mode_Stop) return;

  //}

  //[VDEBUG 위치 얻기]{---
  VDEBUG_GetPtr(&vdebug);
  //}---------------------

  _file_C_CheckBtn->_Checked(false);
  _file_C_Btn->_FontColor(_ide_option->color_0);

  _file_Asm_CheckBtn->_Checked(false);
  _file_Asm_Btn->_FontColor(_ide_option->color_0);

  _file_CAsm_CheckBtn->_Checked(true);
  _file_CAsm_Btn->_FontColor(IDE_COLOR_1);

  //[바로 문서를 전환해 준다]
  //{
      //[2009.04.21.화][추가!!!]{-------------------------------------------------------------
      //[정지] 상태를 지정하는 함수를 사용하여 바로 해당문서로 전환하고 현재 위치를 지정한다.
      //}-------------------------------------------------------------------------------------

      if((main_Form->timeOut_Timer->Enabled == false) && (vdebug->debugTimer_En == false))
      {
        //[검증 타이머] 가 구동되고있지 않은 경우만 처리한다.

        //[2010.12.30.목][수정!!!]{-----------------------------------
        //[명령] 이 실행되지 않고 행만 지정되도록 <true> 로 지정한다.
        Debug_Break(true);
        //}-----------------------------------------------------------

      }

  //}

  //[동작을 유지할 것인가?]
  //{
      //[2011.05.28.토][추가!!!]{--------------------------------------------------------------
      //함수 앞부분의 기능 추가로 이 버튼의 기능이 실행되는 경우 [VMOS] 가 멈추가 된다.
      //단, 이전에 [자동] 관련 검증이 실행 중이었던 경우는 계속 이 기능이 유지되도록 처리한다.
      //}--------------------------------------------------------------------------------------

      if     (vdebug->debugBtn == d_debug_bmpbtn_step_auto)
      {
        _EVENT_StepAutoButton_Click();

      }
      else if(vdebug->debugBtn == d_debug_bmpbtn_step_over_auto)
      {
        _EVENT_StepOverAutoButton_Click();

      }

  //}

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_Click_debugPeriod_Btn(void)
{
  //[2009.04.10.금][생성!!!]

  //[VAR]
  //{
      //[2009.04.09.목][추가!!!]
      class  VDEBUG    *vdebug;

      char   tempStr[OPT_wordStrSize];

      int    tempVal = 100;

  //}

  //[VDEBUG 위치 얻기]{------
  //[2009.04.09.목][추가!!!]
  VDEBUG_GetPtr(&vdebug);
  if(vdebug == NULL) return;
  //}------------------------

  if(STR_Match(_debugPeriod_Btn->_caption, "검증주기설정") != true)
  {
    //[한줄 편집기] 를 보여준다.

    //[값 => 문자열로 변환]
    //{
        CONV_LongVal_To_Str(vdebug->debugTimer_Period, 5, false, tempStr);

    //}

    //표시하기.
    _debugPeriod_Edit->_EDIT_TextOut(tempStr);

    _debugPeriod_Edit->Visible = true;

    //버튼의 이름을 바꾸어 설정 중이라는 것을 알려준다.
    _debugPeriod_Btn->_Caption("검증주기설정");

  }
  else
  {
    //현재 설정된 10진수 문자열을 검사하고 이를 실제 값으로 바꾸어 적용한다.

    //[10진수 인지 학인]
    //{
        if(STR_Is_Dec(_debugPeriod_Edit->_editbuf) != true)
        {
          //10진수 문자열이 아닌 것이다.
          //오류 알림글은 STR_Is_Dec() 함수 내부적으로 자동 처리 된다.

          return;

        }

    //}

    //[문자열 => 값 으로 변환]
    //{
        CONV_DecStr_To_IntVal(_debugPeriod_Edit->_editbuf, &tempVal);

    //}

    //[값 범위 확인]
    //{
        //[2009.04.13.월][추가!!!]{-----------------------
        //[검증 주기] 값은 0 - 10,000 ms 까지만 허용된다.
        //}-----------------------------------------------

        if((0 <= tempVal) && (tempVal <= 10000))
        {
          //이상없는 값을 여기서 할당한다.
          vdebug->debugTimer_Period = tempVal;

        }
        else
        {
          //이전 설정값이 그대로 남아 있게 된다.
          ide_msgbox_Form->_MsgBox(d_MSGBOX_error,
                                   "[검증 주기] 값은 0 - 10000(ms) 사이의 값만 사용할수 있습니다.");

        }

    //}

    //[값 => 문자열로 변환]
    //{
        CONV_LongVal_To_Str(vdebug->debugTimer_Period, 5, false, tempStr);

    //}

    //버튼에 표시할 문자열을 합성한다.
    STR_Add(tempStr, "(ms)");

    //버튼에 설정된 [주기값] 을 표시해 준다.
    _debugPeriod_Btn->_Caption(tempStr);

    _debugPeriod_Edit->Visible = false;

  }

  return;

}

void __fastcall Tide_buttons_Form::_EVENT_KeyEnter_debugPeriod_Edit(void)
{
  //[2009.04.10.금][생성!!!]

  _EVENT_Click_debugPeriod_Btn();

  return;

}

//--------------------------------------------------------------------------------
//[부가함수]----------------------------------------------------------------------
//--------------------------------------------------------------------------------

void __fastcall Tide_buttons_Form::_VmosMdl_ExUnCheck(void)
{
  //[2012.03.11.일][생성!!!]{----------------------------------------------------
  //<[v]맷동직접연결> 인 경우 자동으로 해제시킨다.
  //<_EVENT_Click_vmosMdl_CheckBtn()> 함수의 [해제] 부분만 사용.
  //
  //[처리경우]-------------------------------------------------------------------
  //
  //기본적으로 [통신포트가 겹치는 경우] 이고 [통신포트가 열려있는 경우] 만 해당.
  //
  //단, 2가지 경우만 처리가 허용된다.
  //
  //1) <[]맷돌가상구동> && <[]맷돌직접연결> && 통신포트개방.
  //
  //2) <[]맷돌가상구동> && <[v]맷돌직접연결> && 통신포트개방 && 검증상태가아님.
  //
  //}----------------------------------------------------------------------------

  //[<맷돌직접연결> 이 비활성 상태인가?]
  //{
      //[2012.03.12.월][추가!!!]{-------------------------------------
      //[맷돌직접연결] 자체가 [비활성] 상태라면 아예 처리하지 않는다.
      //}-------------------------------------------------------------

      if(_vmosMdl_CheckBtn->_enable == false) return;

  //}

  //[통신포트가 겹치나?]
  //{
      //[2012.03.12.월][추가!!!]{------------------------
      //사용하는 포트가 다르다면 더이상 처리하지 않는다.
      //}------------------------------------------------

      if(_ide_option->portnumber != _ide_option->port2_Num) return;

  //}

  //[통신포트가 현재 열려있나?]
  //{
      //[2012.03.12.월][추가!!!]{-------------
      //기본 통신포트가 열려있는 경우만 처리.
      //}-------------------------------------

      if(ide_menu_Form->_comPort_RadioBtn->_checked != true) return;

  //}

  //[<가상기동 전용 환경> 인가?]
  //{
      //[2012.03.12.월][추가!!!]{----------------------------------------------------
      //[가상기동 전용 환경] 에서는 [맷돌가상구동/맷돌직접연결] 선택부분이
      //[비활성화] 되므로 처리해서는 안된다.
      //
      //그러나, [가상기동 전용 환경] 에서는 가장 위의 [제어부분] 만 남고
      //아래 [편집기/출력창] 부분 등은 전부 다 감춰지므로 사실상 처리할 필요가 없다.
      //}----------------------------------------------------------------------------

      if(_ide_option->gvmMode == true) return;

  //}

  //[처리 조건에 해당하나?]
  //{
      if     ((_vmosSim_CheckBtn->_checked == false) &&
              (_vmosMdl_CheckBtn->_checked == false))
      {
        //[!]{-----------------------------------------------------
        //1) <[]맷돌가상구동> && <[]맷돌직접연결> && 통신포트개방.
        //의 경우로 처리 대상.
        //}--------------------------------------------------------

      }
      else if((_vmosSim_CheckBtn->_checked == false) &&
              (_vmosMdl_CheckBtn->_checked == true) &&
              //검증상태가 아니어야 한다([가상기계개발] 상태인 경우만 해당).
              (_tabs->_tabindex == 0))
      {
        //[!]{------------------------------------------------------------------------
        //2) <[]맷돌가상구동> && <[v]맷돌직접연결> && 통신포트개방 && 검증상태가아님.
        //의 경우로 처리 대상.
        //}---------------------------------------------------------------------------

      }
      else
      {
        //위 조건에 해당하지 않는 경우는 처리하지 않는다.
        return;

      }

  //}

  //[<맷돌직접연결> 해제]
  //{
      //[!]{-----------------------------------------------------------------------
      //[맷돌직접연결] 을 해제하고 사용한 [통신포트] 를 닫고 관련 처리 수행.
      //이는 통신시에 <_vmosMdl_CheckBtn->_checked> 이미 기록된 상태를 참고 하므로
      //별도 처리는 필요없다.
      //}--------------------------------------------------------------------------

      //[통신포트 닫기]
      //{
          //[!]{-----------------------------------------------------------------
          //[맷돌직접연결] 이 해제되는 경우는 통신포트를 닫아준다
          //단, 통신포트를 닫는 것과 [맷돌직접연결] 을 해제하는 것은 무관하므로
          //통신포트가 닫히지 않는 경우라도 다른 처리는 전부 수행해 주어야 한다.
          //}--------------------------------------------------------------------

          Ide_Comport_Close();

      //}

      //[가상기동 전용 환경인가?]
      //{
          //[!]{--------------------------------------------------------------
          //[가상기동 전용 환경] 의 경우는 처리하지 않는다.
          //실제 [가상기동 전용 환경] 의 경우는 <[v]맷돌직접연결> 관련 기능이
          //[비활성화] 되므로 이 부분이 필요 없으나 일단 그대로 둔다.
          //}-----------------------------------------------------------------

          if(_ide_option->gvmMode != true)
          {
            //관련 버튼을 비활성화 한다.
            _Enable_Mdl(false);

          }

      //}

      //[전광판]
      //{
          //[!]{-----------------------------------------
          //[전광판] 을 피한 설정값으로 다시 복구시킨다.
          //현재는 사용하지 않지만 일단 그대로 둔다.
          //}--------------------------------------------

          if(ide_editor_Form != NULL)
          {
            ide_editor_Form->_GDotMatrix_RotateTemp2(true);

          }

      //}

  //}

  //[확인 표시 지우기]
  //{
      //[2012.03.12.월][추가!!!]{----------------------------------
      //직접 선택하는 것이 아니기 때문에 마지막으로 [v] 를 지운다.
      //}----------------------------------------------------------

      _vmosMdl_CheckBtn->_Checked(false);

  //}

}





