장성호 님이 쓰신 글 :
: 많은 양의 데이타라...
: 얼마나 많은 데이타를 부려줬는지 궁금하네요
:
:
: 먼저 메모장은 편집에 한계가 있습니다.
: 이론적인 근거도 명확하지 않고 명확하게 테스트를 해보진 못했지만
: 일반적으로 알려진 사실입니다.
: 다음 링크를 참조하세요
:
: 리치에디터 편집 한계
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=2
:
: TMemo가 64KByte넘어갈때 CaretPos 문제
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=760
:
:
: 많은 시간이 요하는 작업을 할때 윈도우가 멈추는 문제는?
:
: 원인은 간단합니다.
: 작업중에 화면그리는것이나, mouse메세지에 등에 대해 처리를 못하기 때문이죠
:
:
: 해결방법은?
:
:
방법1.
: 작업중간에 Window메세지를 처리해주면 됩니다.
:
:
: while(true)
: {
: //작업코드
:
: //작업 중간중간에 다음과 같은 코딩을 넣어주면
: // 메세지를 처리하므로 화면이 먹통되지 않습니다.
:
: Application->ProcessMessages();
: //....
: }
:
:
:
:
방법2.
: 메모장의 경우 BeginUpdate / EndUpdate를 이용하면
: line을 한줄씩 add할때마다 update를 하지 않으므로 매우 빨라집니다.
:
: Memo1->Lines->BeginUpdate();
:
: //반복해서...
: Memo1->Lines->Add("asfd");
:
: Memo1->Lines->EndUpdate();
:
:
:
:
방법3
: 대용량의 파일을 가장 빨리 읽어오는 방법은 파일을 읽어오지 않는게 가장 빠르고
: ListView에 item을 Add하는 가장 빠른 방법은 Item을 add하지 않는게 가장 빠릅니다.
: 참조
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=899
:
: 무슨 말도 안되는 헛 소리냐구요?
:
: 아무리 많은 데이타라 할찌라도 동시에 화면에 다 보여 줄수는 없습니다.
: Memo나 StringGrid에 내용을 모두 add하면 해당 control이 알아서 필요한 부분만 보여주지만..
:
: CustomDraw를 이용해서 개발자가 직접 보여주는 부분만 화면에 그려주면
: Memo나 StringGrid 등에 데이타를 모두다 add할 필요가 없게 되는것입니다.
:
: 다음링크에 있는 Virtual-ListView가 비슷한 개념이죠
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=899
:
: 문론 ListView에서는 이런것을 지원하기때문에 .. 쉽게 구현이 가능하지만...
: TStringGrid는 OnDrawCell 등의 이벤트를 통해 Cell에 그려주면 됩니다.
: OnDrawCell 이벤트가 현재화면에 보여줄 부분만 발생합니다.
:
: TMemo난 OnDrawCell같은 이벤트가 없으니 좀 복잡한데..
: 64kbyte이상이면 TMemo를 대체할 다른 Component를 쓰시길 권하구요
: 그 이하이면 beginupdate / endupdate를 이용하시길 권합니다.
:
: 그럼..
:
:
:
: 아롱사태 님이 쓰신 글 :
: : 스트링그리드나 메모장같은 컴포넌트에 많은양의 데이터를 뿌리면
: : 뿌려지는 모습이 보이면서 윈도우가 움직이거나 다른 버튼이 눌려지질 않는군요
: : 어떻게 해야 중간에 윈도우를 움직이거나 이벤트같은 명령을 넣을수 있는건가요