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
[1865] Re:[질문] EDITWORDBREAKPROC, EM_SETWORDBREAKPROC 사용법?
박지훈.임프 [cbuilder] 4063 읽음    1999-08-30 00:00
: 안녕하세요....
: 우선 밑에 질문에 답변해 주신것에 대해 감사드립니다
:
: 밑에 말씀하신대로...해 보니...잘되더군요..첨엔..헬프보고 해석하는데..무지 헤매서리....
:
: 그리고..이번 질문은 무식하게 시리..API 함수 사용법을 몰라서 이렇게 질문을 드리네요..
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:      String temp;
:
:      do {
:           pos = RichEdit1->Perform(EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, pos);
:           temp += IntToStr(pos) + ", ";
:      }while (pos <= RichEdit1->Text.Length());
:      RichEdit1->Lines->Add(temp);
:      pos = 0;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:    FontDialog1->Font->Assign(RichEdit1->SelAttributes);
:    if (FontDialog1->Execute()) CurrText()->Assign(FontDialog1->Font);
:    RichEdit1->SetFocus();
: }
: //---------------------------------------------------------------------------
:
: TTextAttributes *__fastcall TForm1::CurrText(void)
: {
:      return RichEdit1->SelAttributes;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
:      RichEdit1->Lines->Clear();
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
:      int i = EDITWORDBREAKPROC(RichEdit1->Lines, 0, RichEdit1->Text.Length(), WB_RIGHT);
:      RichEdit1->Perform(EM_SETWORDBREAKPROC, 0, i);
: }
: //---------------------------------------------------------------------------
:
: 우선 요런식으로 테스트하기 위해 코딩을 했습니다.
: 그런데 바로위 버튼3 이벤트의......EDITWORDBREAKPROC 에서 에러가 납니다..
: Cannot convert 'int (__stdcall *)()' to 'int'.
: 어디서 나는 에러인지...EDITWORDBREAKPROC 리턴 값 자체가 int 형이던데...
:
: 그리고 버튼3 이벤트로 하려는게..리치에디트 워드랩이 영어..그러니깐 단어기준으로 워드랩이 되더군요..윈도의 워드패드도 마찮가지 구요..
:
: |동해물과 백두산이 마르고 달토록 보우하사    |
: |하나님이                                    |
: |                                            |
:
: 요런식으로요...
: 제가 하고자 하는건..
:
: |동해물과 백두산이 마르고 달토록 보우하사 하 |
: |나님이                                      |
: |                                            |
: 이런식으로 정렬이 되게끔 하려구요..
: 버튼3의 이벤트가 맞게 코딩된건지..틀렸다면 바로잡아 주셨으면 합니다..
:
: 그럼 미리 감사드리겠습니다..



임펠리테리입니다.

상당히 많이 오해하신 것 같습니다.
EditWordBreakProc() 함수는 콜백함수입니다. 콜백함수란, 윈도우즈가
내부적으로 처리하기 위해 호출하는 사용자정의 함수이죠. 다시 말해서,
직접 작성해서 윈도우즈에게 "윈도우즈야.. 여깄다.. 이 함수를 가지고
워드 브레이크를 처리하면 된단다... 알아서 잘 써먹어라..." 하고 넘겨주는 겁니다.

이렇게 콜백함수를 정의해주는 목적은, 기본적인 워드브레이크 룰이 아닌
좀 다른, 사용자가 정해주고 싶은대로 워드브레이크가 발생하도록 해주기
위해서입니다. 예를 들어서, 다음과 같은 문자열,
"저는 문자열입니다"
를 살펴보면, 기본 워드브레이크 룰로는 '저는'과 '문자열입니다' 사이의 공백의 바로 뒤에서 워드브레이크가 발생합니다.
이런 기본적인 룰을 변경해서, 스페이스의 뒤가 아닌 앞에서 워드브레이크가
발생하도록 해주려면 바로 콜백함수를 달아주는 것입니다. 이것은 절대로
사용자가 호출하는 것이 아니라, 사용자가 만들어서 윈도우즈에게 넘겨주는 겁니다.
(윈도우즈에게 넘겨주는 역할을 하는 것이 바로 다음줄에 쓰신 EM_SETWORDBREAKPROC
메시지입니다.)

버튼3의 목적이 원래 무엇인지를 알수가 없어서 어떻게 정정해드려야 할지
모르겠네요. 어쨌든.. 만약 워드브레이크 룰을 변경할 목적이 아니라면
EditWordBreakProc() 함수나 EM_SETWORDBREAKPROC 메시지는 사용하는 것이 아닙니다.

그리고.. 두번째는.. 예까지 들어서 설명해주셨는데도 불구하고.. 쩝..
죄송스럽게도, 구체적으로 원하시는 것이 무엇인지를 잘 이해를 못하겠네요.
좀더 자세히 다시 한번 질문해주셨으면 좋겠습니다.

그럼 이만...


+ -

관련 글 리스트
1864 [질문] EDITWORDBREAKPROC, EM_SETWORDBREAKPROC 사용법? 강호준 3653 1999/08/30
1865     Re:[질문] EDITWORDBREAKPROC, EM_SETWORDBREAKPROC 사용법? 박지훈.임프 4063 1999/08/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.