많은 양의 데이타라...
얼마나 많은 데이타를 부려줬는지 궁금하네요
먼저 메모장은 편집에 한계가 있습니다.
이론적인 근거도 명확하지 않고 명확하게 테스트를 해보진 못했지만
일반적으로 알려진 사실입니다.
다음 링크를 참조하세요
리치에디터 편집 한계
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를 이용하시길 권합니다.
그럼..
아롱사태 님이 쓰신 글 :
: 스트링그리드나 메모장같은 컴포넌트에 많은양의 데이터를 뿌리면
: 뿌려지는 모습이 보이면서 윈도우가 움직이거나 다른 버튼이 눌려지질 않는군요
: 어떻게 해야 중간에 윈도우를 움직이거나 이벤트같은 명령을 넣을수 있는건가요