*** 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
|