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

C++빌더 Q&A
C++Builder Programming Q&A
[59122] Re:C++빌더에서 VB의 InputBox() 혹은 자바스크립트의 Propmpt() 함수와 같은 입력기능을 어떻게 구현
아제나 [azena] 1595 읽음    2009-11-16 11:01
C++빌더 VCL에 보시면 InputBox() 라는 API가 있는데요 ^^; 질문답변 게시판에서 InputBox로 검색해보시고요.

그리고 배치 파일에 사용자 입력 값이 필요한 경우에는 대부분 파라미터로 처리합니다....

첫번째 파라미터는 %1 과 같이 표현하죠.

즉, 10번째 칼럼부터 자르기를 원하는 경우에는

cut.bat 10

이런 식으로 명령을 주게 만들면 되지요.

만약에 10을 입력하지 않으면 사용법을 출력해주시고요.

이런식으로 하면 됩니다.

if "%1"="" goto usage
echo 파라미터가 있을 경우 배치 파일이 처리될 부분
goto end
:usage
echo 프로그램 설명입니다. 파일명 [칼럼수]
:end

그리고 프로그램에서 뭔가의 값을 받아서 배치 파일로 전달해주는 경우에 리턴값 처리는 ERRORLEVEL 이란 것을 사용하지요.

C 프로그래밍

test.c

int main()
{
  int ret;
  printf("숫자를 입력하세요? ");
  scanf("%d",&ret);
  return ret;
}

배치 파일 프로그래밍

test.bat

@echo off
test.exe
if errorlevel 1 goto one
if errorlevel 2 goto two
echo 사용자 입력값(리턴값)이 1,2이 아닌 경우
goto end
:one
echo 사용자 입력값이 1인 경우
goto end
:two
echo 사용자 입력값이 2인 경우
:end


사실 오래되어서 기억이 가물합니다 ㅡㅡ;
해당 소스가 틀릴 가능성도 있음에 유념하시기 바랍니다. (테스트 안 해봄)



정** 님이 쓰신 글 :
: 저는 도스프롬프트(CMD) 에서 배치파일을 만들어서 폴더(하위폴더 모두포함) 속의 파일들의 경로가포함된 전체 경로가 사용자로부터 입력받은 수치 이상의 길이를 가지는 파일명들만 출력을 하도록하는 유틸을 만들려고 합니다.
:
: 기본적은 배치파일로 작성해야 될부분을 모두 만들었고 또 잘 작동되나 한가지 빠진것은 사용자로 부터 입력받은 길이 이상의 파일명들만 출력시킬 커트라인이 될  숫자 길이값을 입력받는 것이 아니라 배치파일 내에서 고정된 값을 할당하여야 되는 단점이 있습니다. 물론 배치파일의 'SET /P CUTLIN_NUM=커트라인될 파일의 길이를 입력하세요?'라는 기능을 이용해도 되지만 이것은 비쥬얼한 것이 아니라서 사실 보기도 싫고 사용도 불편합니다.
:
: 그래서 제가 잘 아는 배치파일을 최대로 살리면서 또 배치로는 단점이 있는 최소 부분만 C++빌더로 구현을 할려고 합니다.
:
: 즉 배치파일에서 C++빌더로 컴파일된 .EXE를 호출하여 커트라인될 숫자값을 사용자로 부터 비쥬얼하게 입력받고 그값을 배치로 리턴을 해주는 방식입니다.
:
: 아래는 구체적으로 알고자 하는부분입니다.
:
: C++빌더에서 사용자로부터 숫자값을 입력받는 인풋 박스를 출력하려고 합니다. 비베나 비베스크립트나 자바스크립에서는 InputBox() 혹은 Propmpt() 함수와 같이 간단하게 해결이 되는데 C++빌더에서는 찾기가 좀힘드네요.
: 혹시 API로도 해결이 가능한가요 아니면 MFC까지 구현해야 하나요?
: 이왕이면 제가 이해가 잘아는 API로만 구현을 해보았으면 하는데요.

: 헤드파일이나 리소스(RC) 파일를 포함해야 하는 프로젝트 파일을 만들어야 한다면 소스를 첨부파일이나 이메일로도 좀 올려 주십시오. Borland나 VC++이나 DEV C++,Relo2.0 등등 어떻한 형태의 프로젝트 팔일소스라도 상관없어니 좀 부탁드립니다.
: 저의 이메일은 ssforyah@yahoo.co.kr 입니다.
:
:
: 그럼 답변 부탁드립니다.
:
:
: 아래는 추가적으로 제가 웹검색으로 기본 골격 까지만 겨우 만들어본 것인데 Inputbox의 겉모습은 만들었는데
: OK버턴을 클릭했을때 텍스트박스에 입력되어있는 숫자값을 Return을 해야 하는데 어떻게 해야 하나요?
: =========================================================================================
:
:  #include <WINDOWS.H>
: #include "Project1_res.h"

:
: LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
:
: HINSTANCE g_hInst;
:
: LPSTR lpszClass="SubEdit";
:

:
: int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
:
:           ,LPSTR lpszCmdParam,int nCmdShow)
:
: {
:
:     HWND hWnd;
:
:     MSG Message;
:
:     WNDCLASS WndClass;
:
:     g_hInst=hInstance;
:
:    
:
:     WndClass.cbClsExtra=0;
:
:     WndClass.cbWndExtra=0;
:
:     WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
:
:     WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
:
:     WndClass.hIcon=LoadIcon(NULL,IDI_QUESTION);
:
:     WndClass.hInstance=hInstance;
:
:     WndClass.lpfnWndProc=(WNDPROC)WndProc;
:
:     WndClass.lpszClassName=lpszClass;
:
:     WndClass.lpszMenuName=NULL;
:
:     WndClass.style=CS_HREDRAW | CS_VREDRAW;
:
:     RegisterClass(&WndClass);
:
:    
:
:     hWnd=CreateWindow(lpszClass,TEXT("검색할 파일명길이의 커트라인을 입력"),WS_CAPTION|WS_SYSMENU,
:
:         300,200,370,110,
:
:         NULL,(HMENU)NULL,hInstance,NULL);
:
:     ShowWindow(hWnd,nCmdShow);
:
:    
:
:     while(GetMessage(&Message,0,0,0)) {
:
:         TranslateMessage(&Message);
:
:         DispatchMessage(&Message);
:
:     }
:
:    return Message.wParam;
:
:
: }
:

:
: #define ID_EDIT1 100
:
: #define ID_EDIT2 101
:
: HWND hEdit1, hEdit2;
:
: WNDPROC OldEditProc;
:
: LRESULT CALLBACK EditSubProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
:
: {
:
:     switch (iMessage) {
:
:     case WM_KEYDOWN:
:
:         if (wParam==VK_RETURN) {
:
:             return 10;
:
:         }
:
:         if (wParam==VK_TAB) {
:
:             SetFocus(hEdit2);
:
:         }
:
:         break;
:
: //  case WM_LBUTTONDOWN:
:
: //      SendMessage(hWnd,EM_SETSEL,0,-1);
:
: //      return 0;
:
:     }
:
:     return CallWindowProc(OldEditProc,hWnd,iMessage,wParam,lParam);
:
: }
:

:
: LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
:
: {
:
:     PAINTSTRUCT ps;
:
:     HDC hdc;
:
:     char Mes[]="입력된 수치 이상의 파일명들을 출력합니다.";
:
:     switch(iMessage) {
:
:     case WM_CREATE:
:
:         hEdit1=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |
:             ES_AUTOHSCROLL,
:             10,10,150,25,hWnd,(HMENU)ID_EDIT1,g_hInst,NULL);
:
:          hEdit2=CreateWindow("button","확인",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
:                 260,10,50,25,hWnd,(HMENU)0,g_hInst,NULL);
:                
:         SetFocus(hEdit1);
:         OldEditProc=(WNDPROC)SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)EditSubProc);
:         return 0;
:
:      case WM_COMMAND:
:         if(LOWORD(wParam) == 0) {
:           MessageBox(hWnd,"입력된 이 값을 리턴해야 함.","Button",MB_OK);
:           PostQuitMessage(34);
:           return 0;
:           break;
:          }
:         return 0;
:      
:     case WM_PAINT:
:
:         hdc=BeginPaint(hWnd, &ps);
:
:         TextOut(hdc,10,40,Mes,strlen(Mes));
:
:         EndPaint(hWnd, &ps);
:
:         return 0;
:
:     case WM_DESTROY:
:
:         SetWindowLong(hEdit1,GWL_WNDPROC,(LONG)OldEditProc);
:
:         PostQuitMessage(0);
:
:         return 0;
:
:     }
:
:     return(DefWindowProc(hWnd,iMessage,wParam,lParam));
:
: }

+ -

관련 글 리스트
59109 C++빌더에서 VB의 InputBox() 혹은 자바스크립트의 Propmpt() 함수와 같은 입력기능을 어떻게 구현하나 정** 1558 2009/11/15
59122     Re:C++빌더에서 VB의 InputBox() 혹은 자바스크립트의 Propmpt() 함수와 같은 입력기능을 어떻게 구현 아제나 1595 2009/11/16
59158         Re:Re:답변 잘받았습니다. 정** 1013 2009/11/19
59125         Re:Re:C++빌더에서 VB의 InputBox() 혹은 자바스크립트의 Propmpt() 함수와 같은 입력기능을 어떻게 Fregata 1582 2009/11/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.