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
[21034] Re:꽁수..
초짜 [] 896 읽음    2002-08-27 10:29
정진우 님이 쓰신 글 :
: 파일에서 텍스트를 읽어들여 폼에 출력하려 하는데,
: 스크롤이 생기지 않도록 하려 합니다. ( 그러니깐 글이 일정범위를 넘어가면
: 생기는 스크롤을 방지) 스크롤 대신 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

+ -

관련 글 리스트
30406         Re:Re:텍스트 출력에 관한 질문 정성훈.해미 904 2002/08/27
30405         Re:Re:텍스트 출력에 관한 질문 정성훈.해미 818 2002/08/27
21034     Re:꽁수.. 초짜 896 2002/08/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.