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++ ;
: }