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
[66345] Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요..
이길남.HoPe [miru0418] 1290 읽음    2012-02-21 10:14
맨아래 타이머를 이용한 방법은 어떠신지요?

물론 다른 방법보다는 속도가 느립니다.

하지만, 먹통되는 현상은 일어나지 않겠지요.

또한, 보통 4000줄을 한 화면에 보이지 않을겁니다.

타이머로 한 화면에 보이는 양만큼만 조금씩 표시를 해주고,

메세지나 라벨로 "데이터 갱신중입니다..."라고 표시해줘도 충분히 고객분은 이해 하실듯 한데요...

참고로 저는 보통 우선 화면에 보이는 영역만 빠르게 갱신해주고,

다른 부분은 타이머로 사용해서 갱신해 줍니다.

사용자가 보이지 않는 영역이니깐요. ^^;;

물론 갱신중에 스크롤을 돌리면......... ㅠㅠ

말빨로.....돌리시면 안대지 말입니다.....ㅋㅋㅋ

김태우 님이 쓰신 글 :
: 답변 감사합니다..
: 하지만.. 지금 님같은 경우는 숫자로만 하셨지만...
: 제가 읽어 들일 파일들은 문자도 있고 숫자도 있고 빈칸도 있는 경우 입니다..
: 마찬가지로..말씀해주신결로 적용을 해보았으나..
: 마찬가지로 시간이 오래 걸리네요..30초 이상으로요..ㅜㅜ
:
:
:
:
: 이길남.HoPe 님이 쓰신 글 :
: : 제가 아래와 같이 테스트 해봤습니다.
: : 참조 하세요.
: :
: : Row, Col 수량을 4000씩 잡았습니다.
: : 하기와 같이 하면 약 6~7초 정도 걸렸습니다.
: :
: :     int row = StringGrid1->RowCount - 1;
: :     int col = StringGrid1->ColCount - 1;
: : 
: :     unsigned long tt = GetTickCount();
: : 
: :     for(int j = 1; j < row + 1; j++)    StringGrid1->Rows[j]->BeginUpdate();
: :     for(int i = 1; i < col + 1; i++)    StringGrid1->Cols[i]->BeginUpdate();
: : 
: :     for(int j = 1; j < row + 1; j++)
: :     {
: :         for(int i = 1; i < col + 1; i++)
: :         {
: :             StringGrid1->Cells[i][j] = IntToStr(i);
: :         }
: :     }
: :     for(int j = 1; j < row + 1; j++)    StringGrid1->Rows[j]->EndUpdate();
: :     for(int i = 1; i < col + 1; i++)    StringGrid1->Cols[i]->EndUpdate();
: : 
: :     Caption = GetTickCount() - tt;
: : 

: :
: : 하기와 같이 하면 약17초 정도 걸리거더군요.
: :
: :     int row = StringGrid1->RowCount - 1;
: :     int col = StringGrid1->ColCount - 1;
: : 
: :     unsigned long tt = GetTickCount();
: : 
: :     for(int j = 1; j < row + 1; j++)
: :     {
: :         for(int i = 1; i < col + 1; i++)
: :         {
: :             StringGrid1->Cells[i][j] = IntToStr(i);
: :         }
: :     }
: : 
: :     Caption = GetTickCount() - tt;
: : 

: :
: : 이것도 느리면 타이머를 사용해서 조금씩 변경하는 방법이 있습니다.
: :
: : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : {
: : /*
: :     외부에서 FRowIndex를 0으로 하면 다시 갱신하는 구조입니다. ^^;;
: :     전체를 다 갱신하면 FRowIndex가 RowCount보다 많기 때문에 갱신작업을 하지 않을껍니다.
: : */
: :     if(FRowIndex > StringGrid1->RowCount)
: :     {
: :         Caption = "갱신 완료!";
: :         return;
: :     }
: : 
: :     for(int c = 0; c < StringGrid1->ColCount; c++)
: :     {
: :         StringGrid1->Cells[c][FRowIndex] = IntToStr(c);
: :     }
: : 
: :     Caption = "갱신 중!";
: :     FRowIndex++;
: : }
: : //---------------------------------------------------------------------------
: : 

: :
: : Ps. 답변이 되실련지 모르겠네요.
: :
: : 김태우 님이 쓰신 글 :
: : : for(int j = 1; j < row+1; j++)
: : :         {
: : :            
: : :             for(int i = 1; i < col+1; i++)
: : :             {
: : :
: : :                 StringGrid1->Cells[i][j] = XLSheet.OlePropertyGet("Cells", j , i).OlePropertyGet("Value");
: : :                 StringGrid1->Cells[0][j] = IntToStr(j);
: : :                 StringGrid1->Cells[i][0] = IntToStr(i);
: : :             }
: : :         }
: : :
: : : StringGrid1->Rows[0]->BeginUpdate();
: : : 이렇게 밖에 사용을 못하나요??
: : :
: : : 그러면 이렇게 엑셀에서 읽어온값을 그리드에 넣어줄때..
: : : 어떻게 사용해야되는건지...
: : : 초보입니다.. 부탁드리겠습니다.
: : : 검색을 해봐도.. 제가 적용하면 마찬가지로 프로그램이 용량이큰엑셀은 30초 정도는 멈춰 있네요..

+ -

관련 글 리스트
66341 StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 2074 2012/02/21
66348     Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 델파이수행중 1787 2012/02/21
66346     Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 박우성 1710 2012/02/21
66343     Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1434 2012/02/21
66344         Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1504 2012/02/21
66349             Re:Re:Re: 님~ 테스트에 사용한 엑셀파일 올려보세여 인디 1389 2012/02/21
66347             Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 장성호 2655 2012/02/21
66353                 Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1631 2012/02/21
66358                     Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 장성호 1419 2012/02/21
66361                         Re:Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1556 2012/02/21
66345             Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1290 2012/02/21
66362                 Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1250 2012/02/21
66363                     Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1384 2012/02/22
66369                         Re:Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 김태우 1199 2012/02/23
66372                             Re: 님~ 아직 파일 안올렸네여~ 인디 1217 2012/02/23
66378                                 Re:Re: 님~ 아직 파일 안올렸네여~ 김태우 1231 2012/02/23
66375                                 Re:Re: 님~ 아직 파일 안올렸네여~ 이길남.HoPe 1227 2012/02/23
66382                                     Re:Re:Re: 님~ 아직 파일 안올렸네여~ 김태우 1298 2012/02/23
66388                                         Re:Re:Re:Re: 님~ 아직 파일 안올렸네여~ 이길남.HoPe 1276 2012/02/24
66407                                             Re:Re:Re:Re:Re: 님~ 아직 파일 안올렸네여~ 김태우 1255 2012/02/25
66370                             Re:Re:Re:Re:Re:Re:Re:StringGrid 에서 BeginUpdate 를 사용어떻게 하나요.. 이길남.HoPe 1835 2012/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.