C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 자료실
C++Builder Programming Resources
[278] InputBox()와 유사한 기능을 하는 함수를 만들어 봤습니다. 많이 사용하세요,
evergreen [heredity] 9266 읽음    2005-06-15 22:06
*** InputString.CPP ***

  //---------------------------------------------------------------------------
  // 사 용 법 : 각 함수의 주석을 참조하시고 사용예는 아래과 같습니다.
  //              AnsiString asPrompt = "사용자명을 입력하십시오.";
  //              AnsiString asValue  = "heredity";
  //              Caption = bInputString( "사용자입력", asPrompt, asValue ) ? asValue : AnsiString( "입력 취소" );
  // 주요함수 : 없슴.
  // 만 든 넘 : 접니다 (heredity).
  // 작 성 일 : 2005-06-15(수)
  // 히스토리 : 없습니다.
  // 여    담 : 가끔 필요해서 만들까 했는데, VCL에 InputBox()가 있어 이것을 주로 애용(?)하다
  //            이번에 기회가 되어 만들어 봤습니다. 만드는데 생각보다 시간이 많이 걸렸습니다. ^_^;
  //            많은 사용 바랍니다.
  //            즐~
  // 주의사항 : 본 프로그램을 사용해서 발생되는 오류에 대한 책임은 사용자 자신에게 있사오니,
  //            신중하게(?) 사용하시기 바랍니다.
  //---------------------------------------------------------------------------

  #include <vcl.h>
  #pragma hdrstop

  #include "InputString.h"

  #pragma package(smart_init)

  //---------------------------------------------------------------------------
  // 기  능 : asPrompt를 DialogBox에 출력후 사용자 입력을 기다림. 입력된 값은 asValue에 보관됨.
  // 리  턴 : true  ; "확인"을 누른 경우
  //          false ; "취소"를 누른 경우
  // 작성일 : 2005-06-16(수)에 작성 & 테스트 됨.
  //---------------------------------------------------------------------------
  bool bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue )
  {
    return( bInputString( asCaption, asPrompt, asValue, "", 0, 0 ) );
  }

  //---------------------------------------------------------------------------
  // 기  능 : bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue )과
  //          사용법이 유사하며, Font명과 Font 크기를 지정하는 것이 다름.
  // 작성일 : 2005-06-16(수)에 작성 & 테스트 됨.
  //---------------------------------------------------------------------------
  bool bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue, AnsiString asFont, int nFontSize )
  {
    return( bInputString( asCaption, asPrompt, asValue, asFont, nFontSize, 0 ) );
  }

  //---------------------------------------------------------------------------
  // 기  능 : bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue )과
  //          사용법이 유사하며, Font명과 Font 크기 및 입력 글자수를 지정하는 것이 다름.
  // 작성일 : 2005-06-16(수)에 작성 & 테스트 됨.
  //---------------------------------------------------------------------------
  bool bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue, AnsiString asFont, int nFontSize, int nMax )
  {
    bool  bRtv = false;
    TForm *pfm = NULL;

    try {
      pfm = new TForm( Application );

      if( pfm != NULL ) {
        AnsiString asOk     = " 확 인 ";
        AnsiString asCancel = " 취 소 ";
        TCanvas    *pCanvas = pfm->Canvas;
        int        nDX   = 8;
        int        nDY   = 8;
        int        nLeft = 10;
        int        nTop  = 10;
        int        nMaxFontWidth;
        int        nLabelWidth;
        int        nBtnWidth, nBtnWidth2, nBtnLeft;

        if( asFont.Trim() != "" ) {
          pfm->Font->Name = asFont;
          pfm->Font->Size = nFontSize;
        }

        TLabel  *plaPrompt  = new TLabel( pfm );
        TEdit   *pedEdit    = new TEdit( pfm );
        TButton *pbtnOk     = new TButton( pfm );
        TButton *pbtnCancel = new TButton( pfm );

        if( (plaPrompt != NULL)  &  (pedEdit != NULL)  &  (pbtnOk != NULL)  &  (pbtnCancel != NULL) ) {
          if( asFont.Trim() != "" ) {
            plaPrompt->Font->Name  = asFont;
            plaPrompt->Font->Size  = nFontSize;
            pedEdit->Font->Name    = asFont;
            pedEdit->Font->Size    = nFontSize;
            pbtnOk->Font->Name     = asFont;
            pbtnOk->Font->Size     = nFontSize;
            pbtnOk->Height         = nFontSize * 3 + 1;
            pbtnCancel->Font->Name = asFont;
            pbtnCancel->Font->Size = nFontSize;
            pbtnCancel->Height     = nFontSize * 3 + 1;
          }

          pfm->BorderStyle  = bsDialog;
          pfm->Caption      = asCaption;
          pfm->Position     = poScreenCenter;

          nMaxFontWidth     = pCanvas->TextWidth( "W" );
          nBtnWidth         = pCanvas->TextWidth( (asOk.Length() > asCancel.Length()) ? asOk : asCancel ) + nMaxFontWidth * 2;
          nBtnWidth2        = nBtnWidth * 2 + nDX;
          nLabelWidth       = pCanvas->TextWidth( asPrompt );
          nLabelWidth       = ((nLabelWidth < nBtnWidth2) ? nBtnWidth2 : nLabelWidth) + nMaxFontWidth;

          // if( nLabelWidth > Screen->Width - nLeft * 2 ) {
          //   nLabelWidth = Screen->Width - nLeft * 2;              // Dialog Form의 Frame 두께를 더 빼야하지만 걍 샹략함.
          // }

          pfm->ClientWidth  = nLabelWidth + nLeft * 2;
          pfm->ClientHeight = plaPrompt->Height + nDY / 10 + pedEdit->Height + nDY + pbtnOk->Height + nTop * 2;
          nBtnLeft          = (pfm->ClientWidth - nBtnWidth2) / 2;

          // Prompt(TLabel) 정보 설정
          plaPrompt->Parent   = pfm;
          plaPrompt->AutoSize = false;
          plaPrompt->Caption  = asPrompt;
          plaPrompt->Left     = nLeft;
          plaPrompt->Top      = nTop;
          plaPrompt->Width    = nLabelWidth;
          nTop               += plaPrompt->Height + nDY / 10;

          // 입력창(TEdit) 정보 설정
          pedEdit->Parent     = pfm;
          pedEdit->MaxLength  = (nMax >= 0) ? nMax : 0;
          pedEdit->Text       = (nMax >= 1) ? asValue.SubString( 1, nMax ) : asValue; // 한글의 경우 마지막 글자가 깨질 수 있음.
          pedEdit->Left       = nLeft;
          pedEdit->Top        = nTop;
          pedEdit->Width      = nLabelWidth;
          nTop               += pedEdit->Height + nDY;
          pedEdit->SelectAll();

          // 확인 번튼(TButton) 정보 설정
          pbtnOk->Parent      = pfm;
          pbtnOk->Caption     = asOk;
          pbtnOk->Default     = true;
          pbtnOk->ModalResult = mrOk;
          pbtnOk->Left        = nBtnLeft;
          pbtnOk->Top         = nTop;
          pbtnOk->Width       = nBtnWidth;

          // 취소 버튼(TButton) 정보 설정
          pbtnCancel->Parent      = pfm;
          pbtnCancel->Caption     = asCancel;
          pbtnCancel->Cancel      = true;
          pbtnCancel->ModalResult = mrCancel;
          pbtnCancel->Left        = nBtnLeft + pbtnOk->Width + nDX;
          pbtnCancel->Top         = nTop;
          pbtnCancel->Width       = nBtnWidth;

          if( pfm->ShowModal() == mrOk ) {
            asValue = pedEdit->Text;
            bRtv    = true;
          }
        }
      }
    }
    catch( ... ) {
    }

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

    return( bRtv );
  }

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



*** InputString.H ***

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

  #ifndef InputStringH
  #define InputStringH

  //---------------------------------------------------------------------------
  bool bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue );
  bool bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue, AnsiString asFont, int nFontSize );
  bool bInputString( AnsiString asCaption, AnsiString asPrompt, AnsiString &asValue, AnsiString asFont, int nFontSize, int nMax );

  //---------------------------------------------------------------------------
  #endif

+ -

관련 글 리스트
278 InputBox()와 유사한 기능을 하는 함수를 만들어 봤습니다. 많이 사용하세요, evergreen 9266 2005/06/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.