|
정진우 님이 쓰신 글 :
: 파일에서 텍스트를 읽어들여 폼에 출력하려 하는데,
: 스크롤이 생기지 않도록 하려 합니다. ( 그러니깐 글이 일정범위를 넘어가면
: 생기는 스크롤을 방지) 스크롤 대신 next 버튼을 누르면 다음에 이어질 내용이
: 출력되는(refresh) 기능을 하는 텍스트 뷰어를 만드려고 하는데. 어떻게 하는게 좋을까요.
: 폰트가 알파벳 대소문자, 특수기호마다 차지하는 넓이가 각각달라서 글씨크기로 문자열
: 길이를 연산하는 편법은 안통합니다. Memo 컨트롤이나 RichEdit 컨트롤등에서도
: 입력된 글이 컨트롤 크기를 넘어가도 알아챌수 있는 방법이 없는것 같고...
: 조언좀..?
프로그램이 좀 지저분하기는 하지만.. 어차피 해결은 되는거 같으니깐 올립니다.
우선 RichEdit 컴포넌트를 두개 올립니다.
똑같은 크기여야 됩니다. -_-a
그리고 한쪽에는 님이 말씀하신대로 파일에서 그냥 읽어옵니다.
우선 미리 알아둬야 할 사항은 RichEdit의 라인의 수를 알아둬야 합니다.
라인의 수를 알아두고나서..
프로그램은 이런식으로 합니다.
프로그램이 상당히 지저분하니 고쳐서 사용하세용~~
////////////////////////////////// KKongsu.cpp ////////////////////////
// 3개를 전역변수로 선언~
int iPageCount;
int iPageLine;
int iCurrentPage;
void __fastcall TForm1::FormShow(TObject *Sender)
{
RichEdit2->Lines->LoadFromFile("KKongsu.cpp");
iPageCount = RichEdit2->Lines->Count / iPageLine + 1;
iCurrentPage = 0;
Button3Click(Sender);
}
// Page Prev...
void __fastcall TForm1::Button2Click(TObject *Sender)
{
RichEdit1->Lines->Clear();
int PrintLine = 0;
if ( iCurrentPage > 0 ) {
iCurrentPage--;
for ( int i = 0; i < iPageLine; i++) {
PrintLine = ( iCurrentPage - 1 ) * 20 + i;
if ( PrintLine < RichEdit2->Lines->Count )
RichEdit1->Lines->Add(RichEdit2->Lines->Strings[PrintLine]);
else
break;
}
}
}
// Page Next...
void __fastcall TForm1::Button3Click(TObject *Sender)
{
RichEdit1->Lines->Clear();
int PrintLine = 0;
if ( iCurrentPage < iPageCount ) {
iCurrentPage++;
for ( int i = 0; i < iPageLine; i++) {
PrintLine = ( iCurrentPage - 1 ) * 20 + i;
if ( PrintLine < RichEdit2->Lines->Count )
RichEdit1->Lines->Add(RichEdit2->Lines->Strings[PrintLine]);
else
break;
}
}
}
이상 초짜의 꽁수였습니당.. ('' )( '')a
|