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
[43860] Re:ImpStringGrid 컴포넌트 사용중이신분 도움 부탁드립니다.
박지훈.임프 [cbuilder] 2737 읽음    2006-02-28 14:23
엄청난 압박이시군요... 하긴 버그가 있는 채로 공개한 제 업보이겠습니다만... --;;

방금 확인해보니, goRowSelect인 상태에서는 VCL의 TStringGrid가 아직 폼에서 Loading 중인 상태에서 SelectCell이
호출되더군요. TStringGrid 소스에서 원인을 찾아보니, Options 프로퍼티를 폼에서 로드하는 과정에서 MoveCurrent()가
호출되고, 여기서 다시 SelectCell()을 호출합니다. 그런데 제가 오버라이드한 SelectCell 함수에서는 Columns 객체를
액세스하려고 하려고 하기 때문에, Columns 객체가 아직 생성되지 않은 시점에서 Columns를 액세스하게 되는 결과가
나오는 거군요.

해결책은..TImpStringGrid.SelectCell()의 구현 부분에 한 줄만 추가하면 됩니다.
begin 다음에 나오는 result := inherited SelectCell(ACol, ARow); 다음에 한줄을 추가해서 다음과 같이 코딩해주세요.
if csLoading in ComponentState then exit;

이거면 됩니다. 자료실에 있는 컴포넌트는 웬만하면 업데이트하지 않겠다고 말씀드렸듯이 지금은 새로 올리지 않겠습니다.
대신 해당 자료 글의 댓글에 이 답변글을 링크로 걸어놓죠.

그럼...


zepirox 님이 쓰신 글 :
: 임프님께서 올려주신 ImpStringGrid를 사용하고 있습니다만,
: 제 실력이 아직 pascal 까지 커버할 역량이 못되는지라, 질문드립니다.
:
: ImpStringGrid 속성중 Options에서 goRowSelecte를 true로 설정하면 EList Error.... 하는 에러가 나는데...
: 왜 그런지 모르겠네요...
: 에러 명칭은 아래와 같습니다.
:
: Error : List Index out of bounds (1)
:
: 그리고 디버깅해보니 아래 함수에서 에러가 나는것까지 확인하였습니다.
:
: goRowSelect를 false로 하면 이상없이 실행됩니다만,,, 도대체 이유를 모르겠네요.
:
:
: function TImpStringGrid.SelectCell(ACol, ARow: Integer): Boolean;
: var
:   AColumn: TColumnDef;
: begin
:   result := inherited SelectCell(ACol, ARow);
:  if (ACol<FixedCols) or (ARow<FixedRows) then
:  begin
:     HideEditor;
:     result := false;
:   end;
:   if result then
:   begin
:     AColumn := Columns[ACol]; <== 이 부분에서 에러가 납니다.
:     EditorMode := (goAlwaysShowEditor in Options) and AColumn.Enabled and (AColumn.EditStyle<>exCheck);
:     if goRowSelect in Options then
:     begin
:       InvalidateRow(Row);
:       if Row<>ARow then InvalidateRow(ARow);
:     end;
:     if Assigned(FOnSelectCell) then
:       FOnSelectCell(Self, ACol, ARow, Result);
:   end;
: end;
:
:
:
: 고수님들의 답변 부탁드리겠습니다.

+ -

관련 글 리스트
43855 ImpStringGrid 컴포넌트 사용중이신분 도움 부탁드립니다. zepirox 2168 2006/02/28
43860     Re:ImpStringGrid 컴포넌트 사용중이신분 도움 부탁드립니다. 박지훈.임프 2737 2006/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.