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
[6568] Re:[찾기]찾긴찾았는데 왜 화면에 안나죠?
박지훈.임프 [cbuilder] 2659 읽음    2001-04-04 03:11
강병우 님이 쓰신 글 :
: 메모나 리치에디트에서 FindDialog를 이용해서 찾는건 쉬운데요..
: 문제가 있네요.
:
: 화면에 없는 Text를 찾을때 찾은문자열이 메모장 화면에 있어야 하는데 Cursor가 그쪽으로 안갑니다.
: 이거 어케 해결하나요?
:
: 예제를 찾아봐도 안나와있어서리.. 누가 아는사람없나요..
:
: 찾은 문자열이 있으면 그 문자열이 있는부분으로 자동으로 이동하게 하는 방법을 알고 계신분 제발 좀 갈켜 주세요..
:

임펠리테리입니다.

빌더의 헬프에 있는 예제대로 다음과 같이 하셨겠죠?
void __fastcall TForm1::FindDialog1Find(TObject *Sender)

{
  int FoundAt, StartPos, ToEnd;
  // begin the search after the current selection
  // if there is one
  // otherwise, begin at the start of the text
  if (RichEdit1->SelLength)
    StartPos = RichEdit1->SelStart + RichEdit1->SelLength;
  else

    StartPos = 0;

  // ToEnd is the length from StartPos
  // to the end of the text in the rich edit control

  ToEnd = RichEdit1->Text.Length() - StartPos;

  FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase);
  if (FoundAt != -1)
  {
    RichEdit1->SetFocus();
    RichEdit1->SelStart = FoundAt;
    RichEdit1->SelLength = FindDialog1->FindText.Length();
  }
}

그런데 이렇게 해도, 찾은 텍스트를 선택은 해줍니다만 자동으로 선택된 텍스트가 보이도록 스크롤되진 않습니다. 이때는 EM_SCROLLCARET 메시지를 이용하면 됩니다. 이 메시지는 현재 커서의 위치로 스크롤시키는 역할을 합니다.
앞에서와 같이 작성한 코드의 마지막에 다음과 같은 한 라인을 추가하세요.
SendMessage(RichEdit1->Handle, EM_SCROLLCARET, 0, 0);

그럼 참고하시길...

+ -

관련 글 리스트
6549 [찾기]찾긴찾았는데 왜 화면에 안나죠? 강병우 2102 2001/04/03
6568     Re:[찾기]찾긴찾았는데 왜 화면에 안나죠? 박지훈.임프 2659 2001/04/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.