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
[54035] Re:Memo 에 대해 질문 있습니다
장성호 [nasilso] 1639 읽음    2008-07-23 01:18
TMemo 를 비롯하여 TListBox TListView ,TStringGrid 등 ScrollBar를 Scroll시키는 방법은 대게 비슷합니다.

TMemo를 기존으로 몇가지 방법을 정리해 보겠습니다.

방법1. SelStart를 Text-Length 즉 줄끝으로 정하기.. (꼼수)

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Memo1->SelStart=Memo1->Text.Length()-2;
  Memo1->SelLength=1;
}



방법2. WM_VSCROLL 메세지에   SB_BOTTOM을 wParam으로

void __fastcall TForm1::Button3Click(TObject *Sender)
{
//  SendMessage(Memo1->Handle,WM_VSCROLL, SB_BOTTOM, 0);
  Memo1->Perform(WM_VSCROLL, SB_BOTTOM, 0);
}
//SendMessage와 Perform을 거의 똑같음



방법3. TMemo 같은 EDIT 컨트롤의 경우 EM_LINESCROLL 메세지를 이용

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  Memo1->Perform(EM_LINESCROLL,0,Memo1->Lines->Count-1);
}


방법4. 기타 Scroll관련 메세지 이용

void __fastcall TForm1::Button5Click(TObject *Sender)
{
  Memo1->Perform(EM_SCROLL,SB_BOTTOM,0);

//  기타 SB(ScrollBar) 메세지
//#define SB_LINEUP           0                  //한줄 위로
//#define SB_LINELEFT         0                // 왼쪽 한줄
//#define SB_LINEDOWN         1             // 아래로 한줄
//#define SB_LINERIGHT        1              // 오른쪽으로 한줄   
//#define SB_PAGEUP           2              //한 페이지 위로
//#define SB_PAGELEFT         2             //한 페이지 왼쪽으로
//#define SB_PAGEDOWN         3          //한 페이지 아래로
//#define SB_PAGERIGHT        3           //한 페이지 오른쪽으로
//#define SB_THUMBPOSITION    4       // ???
//#define SB_THUMBTRACK       5        // ???
//#define SB_TOP              6                // 맨 위로
//#define SB_LEFT             6                // 맨 왼쪽으로 
//#define SB_BOTTOM           7           // 맨 아래로 
//#define SB_RIGHT            7              // 맨 오른쪽으로 
//#define SB_ENDSCROLL        8        // ???

}



방법2 가 일반적으로 많이 쓰이는것 같습니다.
TMemo뿐만 아니라 다른 Control에도 대게 잘 적용되고 하니까요

그럼..


번외편 님이 쓰신 글 :
: Memo에 받은 데이터를 표시하다가 100줄 이상 넘어가면
: 윗줄부터 삭제하려고 합니다
: 그래서 이런방법을 써봤는데 삭제가 되긴 되는데 마우스 포인터가
: Memo 맨위에 있네요. 이 마우스 포인터를 맨아래로 내리려면 어떻게 해줘야하나요?
:
:                 if( data[serial_number] == 0x0d )
:                 {
:
:                         *Str_Data = (char)data[0];
:                         for(j=1;j<serial_number  ;j++)
:                         {
:                                 *Str_Data = *Str_Data + (char)(data[j]);
:                         }
:
:                         Memo1->Lines->Add(*Str_Data )  ;
:                         while(Memo1->Lines->Count>100)Memo1->Lines->Delete(0);  <-- 이부분입니다.
:                         serial_number = 0;
:                        
:                 }
:                 else
:                 {
:                         serial_number++ ;
:                 }

+ -

관련 글 리스트
54029 Memo 에 대해 질문 있습니다 번외편 1190 2008/07/22
54035     Re:Memo 에 대해 질문 있습니다 장성호 1639 2008/07/23
54040         매번 감사합니다 번외편 2060 2008/07/23
54032     Re:Memo 에 대해 질문 있습니다 둘리 1394 2008/07/22
54039         감사합니다. 번외편 1266 2008/07/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.