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
[39860] Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re: 사용법
2HB [thigon] 1329 읽음    2005-04-16 11:13
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    double Price;
    String sTemp = Edit1->Text;
    TReplaceFlags TF;
    TF<<rfReplaceAll;
    sTemp = StringReplace(sTemp,",","",TF);
    Price = StrToFloat(sTemp);
    Edit1->Text=FormatFloat("###,###",Price);
    Edit1->SelStart = Edit1->Text.Length() + 1;
}

이런 식으로 사용하시면 되는 겁니다. 도움말 파일을 보시면 TF의 속성에 rfReplaceAll가 있습니다. 뭐 대략 통빡.
이걸 넣으면 몽땅 바뀌겠고만.. 하고 넣어보시면 석세스입니다 =_=~


p.s 위에 있는 문자열을 막는 코드가 훨씬 간단하고 효과적이에요 =_=~


궁금이 님이 쓰신 글 :
: 답변 감사드립니다.
: 그런데 제가 아직 프로그램 기초가 부족해서 아 래 예제화면만 보고
: 프로그램에 적용을 할수가 없네요
: 어떻게 사용해야 하는지 간단하게 예제라고 부탁해도 될까요 ^^*
: 관심 가져주셔서 정말 감사합니다
: 그럼 좋은 하루 되시고 행복하세요!!
: uppie 님이 쓰신 글 :
: : StringReplace 사용하면 될듯~
: :
: : Returns an AnsiString with occurrences of one substring replaced by another substring.
: : enum SysUtils__93 { rfReplaceAll, rfIgnoreCase };
: : typedef Set<SysUtils__93, rfReplaceAll, rfIgnoreCase>  TReplaceFlags;
: :
: : extern PACKAGE AnsiString __fastcall StringReplace(const AnsiString S, const AnsiString OldPattern, const AnsiString NewPattern, TReplaceFlags Flags);
: :
: : Description
: : StringReplace replaces occurrences of the substring specified by OldPattern with the substring specified by NewPattern. StringReplace assumes that the source string may contain Multibyte characters.
: :
: : S is the source string, whose substrings are changed.
: :
: : OldPattern is the substring to locate and replace with NewPattern.
: :
: : NewPattern is the substring to substitute for occurrences of OldPattern.
: :
: : Flags is a set of flags that govern how StringReplace locates and replaces occurrences of OldPattern. If Flags does not include rfReplaceAll, StringReplace only replaces the first occurrence of OldPattern in S. Otherwise, StringReplace replaces all instances of OldPattern with NewPattern. If the Flags parameter includes rfIgnoreCase, The comparison operation is case insensitive.
: :
: :
: : 2HB 님이 쓰신 글 :
: : : 중간에 끼어들어봅니다.
: : : 문자열의 특정 글자를 지우는 걸 몰라서 이런 식으로 해결했어요 -_-;;
: : :
: : :     double Price;
: : :     int nPos = 1; //문자열의 첫번째 , 문자의 위치값
: : :     String sTemp = Edit1->Text; //일단 문자열저장
: : :     String sFr, sDr; //, 문자의 앞과 뒤
: : :     while(nPos != 0) //,문자가 없을때까지
: : :     {
: : :         nPos = sTemp.Pos(","); //,문자검색(없으면 0)
: : :         sFr = sTemp.SubString(1,nPos-1); //sFr에 nPos이전값 저장
: : :         sDr = sTemp.SubString(nPos+1,sTemp.Length()); //sDr 에 이후값 저장
: : :         sTemp = sFr + sDr; //합치기
: : :     }
: : :     Price = StrToFloat(sTemp); //Float형으로 변환
: : :     Edit1->Text=FormatFloat("###,###",Price); //포맷지정
: : :     Edit1->SelStart = Edit1->Text.Length() + 1; //마지막 위치로(이것은 계속 첫번째 자리로 커서가 움직여서)
: : :
: : : 덧. 찍어보시면 2번씩 도는 경향이 있는데 이건 어쩔수 없씸더 -_-;;; 체인지 이벤트가 텍스트가 바뀌면 바로 생기기 때문에;; 어떻게 바꾸기가 힘들죠.
: : :
: : : 옥이 님이 쓰신 글 :
: : : : 아 ~~~~~~
: : : : 에러 나는 이유는  FormatFloat("###,###",  값 ) 두번째 들어가는 값이 현재와 같이  StrToFloat 을 해서 그렇습니다.
: : : : 2번째 인자는 int, long, double 값이 들어가야 합니다.
: : : :
: : : : 그런데 지금은 Float으로 변환을 해서 인자값을 주니깐 에러가 나네요..
: : : :
: : : : int, long, double형으로 해 보세요...그럼..
: : : : 이상있으면,, 글 올리세요..그럼.
: : : :
: : : :
: : : :
: : : : 궁금이 님이 쓰신 글 :
: : : : : : : : : : : : : : : : : : : :

OnChange이벤트에서
    Price=StrToFloat(Edit1->Text);
    Edit1->Text=FormatFloat("###,###", Price);
값을 변경해주면 다시한번 OnChange 이벤트를 수행하게 됩니다.
그런데 Edit1->Text값이 콤마가 들어가 있어서 그런가 에러가 발생하네요

: : : : :

아마도 Float형으로 변환이 않되는것 같습니다.

: : : : :

에러메세지를 올려볼게요

: : : : :

보시고 해결 방법 있으시면 도움 부탁드립니다.

: : : : :

너무 감사합니다
 

옥이 님이 쓰신 글 :
: 현재 소스:
:     double Price;
:      if(Edit1->Text.Length() > 3)
:     {
:         Price=StrToFloat(Edit1->Text);
:         Edit1->Text=FormatFloat("###,###,###,###", Price);
:     }
:  변경 후
:     double Price;
:  
:         Price=StrToFloat(Edit1->Text);
:         Edit1->Text=FormatFloat("###,###", Price);

: if 문은 필요가 없습니다. 자동으로 자리수 계산해서 하기 때문에 구지 3자리 이상을 꼼마을 찍으라는 조건 줄 필요
: 없구요.... 그리고 "###,###" 무조건 이 포맷입니다..  9자리든 12자리든 알아서 꼼마 찍습니다.
: 예를 들어 12자리라고 "###,###,###,###" 이렇게 할 필요가 없습니다.
: 그냥 "###,###" 이렇게 하면 됩니다.
:
: //================================================================================
:
: 궁금이 님이 쓰신 글 :
: : 테스트 소스 올려드립니다.
: : 좋은 해결책이 있었으면 좋겠네요
: : 그럼 부탁드립니다.
: :
: : 옥이 님이 쓰신 글 :
: : : 어려운 문제는 아니구요..
: : : 그러면,, 간단하게 Test 소스 해서 올려주세요..
: : : 그럼 제가 해드릴께요...
: : :
: : : 궁금이 님이 쓰신 글 :
: : : : 옥이님 관심 가져 주셔서 감사합니다.
: : : : 그런데 제가 하고자 하는 방법과 좀 차이가 있습니다.
: : : :
: : : : 전 Edit에 값이 입력되면 실시간으로 그값에 맞게 콤마를 찍어주고 싶습니다.
: : : : 옥이님이 적어주신 방법은 값을 모두 넣고 난 후에 하기엔 좋은데 실시간으로
: : : : 처리하기엔 좀 어려운거 같습니다.
: : : :
: : : : 제가 Edit OnChange이벤트에 해당 모듈을 설정해서 해봤는데요
: : : : 쉽지가 않더라구요 ㅜ,.ㅡ
: : : : 이벤트에서 저 모듈을 거치면 커서가 제일 앞으로 이동되서 연속해서 값을 넣기가 힘들어지네요
: : : :
: : : : 혹시 다른 방법이 계시거나 좋은 아이디어 있으시면 조언 부탁드립니다
: : : : 그럼 수고하세요
: : : :
: : : : 옥이 님이 쓰신 글 :
: : : : : 네 알려 드리겠습니다.  ㅋㅋㅋㅋ
: : : : :
: : : : : 예를 들어  test 라는 이름을 가진 edit 가 있다면,, 이렇게 하시면 됩니다.
: : : : :
: : : : : test->Text =  FormatFloat( "###,##0",  원하는 값  )
: : : : :
: : : : : 위와 같이 하시면 됩니다. ###,###0 그대로 써주시고, 2번째 인자에 넣고 싶은 값을 지정하면 됩니다.
: : : : : 단 Int, long, double 자료형 이여야 합니다.
: : : : :
: : : : : ###,### 와 ###,##0 차이점
: : : : :
: : : : : 만약 원하는 값이 아무것도 없으면 때, ###,### 사용하면, 값이 안들어 가지만,
: : : : : ###,##0 을 사용하면,, 만약 값이 없으면,, 디폴트로  0  이 입력 됩니다.
: : : : : 한번 해보세요..ㅋㅋㅋㅋ
: : : : :
: : : : :
: : : : :
: : : : : 궁금이 님이 쓰신 글 :
: : : : : : Edit에 값을 입력하면 자릿수에 맞게 콤마를 넣는 작업을 할려고 합니다.
: : : : : : MaskEdit는 처음부터 콤마가 보이기 때문에 사용하기 난처해서요
: : : : : : 막상 Edit에 콤마를 넣을려고 하니 무지 어렵네요
: : : : : :
: : : : : : 혹시 비슷한 작업을 하셧거나 좋은 의견 있으시면 아낌없는 조언 부탁드립니다.
: : : : : : 부디 여러 고수분들의 많은 관심 부탁드립니다.
: : : : : :
: : : : : : 그럼 수고하세요^^*


+ -

관련 글 리스트
39815 [질문]Edit에 콤마 넣는 방법 궁금이 854 2005/04/13
39839     [답변] 문자열에서 특정 문자를 제거하는 법과 문자 입력 막기 정성훈.해미 3252 2005/04/15
39816     Re:[질문]Edit에 콤마 넣는 방법 옥이 1405 2005/04/13
39823         Re:Re:[질문]Edit에 콤마 넣는 방법 궁금이 1850 2005/04/14
39824             Re:Re:Re:[질문]Edit에 콤마 넣는 방법 옥이 908 2005/04/14
39826                 Re:Re:Re:Re:[질문]Edit에 콤마 넣는 방법(test소스) 궁금이 1010 2005/04/14
39827                     Re:Re:Re:Re:Re:[질문]Edit에 콤마 넣는 방법(test소스) 옥이 1056 2005/04/14
39828                         Re:Re:Re:Re:Re:Re:[질문]Edit에 콤마 넣는 방법(test소스)에러발생 궁금이 924 2005/04/14
39831                             Re:Re:Re:Re:Re:Re:Re:[질문]Edit에 콤마 넣는 방법(test소스)에러발생 옥이 1125 2005/04/14
39834                                 Re:Re:Re:Re:Re:Re:Re:Re:일단 해결;; 2HB 1082 2005/04/14
39838                                     Re:Re:Re:Re:Re:Re:Re:Re:Re:StringReplace 사용하세용 juppie 1521 2005/04/15
39859                                         Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:답변감사합니다 궁금이 873 2005/04/16
39860                                             Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:Re: 사용법 2HB 1329 2005/04/16
39855                                         StringReplace 가 있었군요 ㅡ.ㅡ 볼레롱 1612 2005/04/15
39835                                     Re:Re:Re:Re:Re:Re:Re:Re:Re:일단 해결;; 감사합니다^^* 궁금이 1197 2005/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.