Neit 님이 쓰신 글 :
: StringGrid 에서 원하는 cell 을 삭제 한다는게..
:
: 원하는 row 나 col 을 삭제 하고 싶으신거 같은데..
:
: 기본인터페이스에 없는거 같은데요?
:
: 그냥 5,6,7 셀 내용을 하나씩 앞으로 당기고, 마지막 셀 제거하시는 식으로 하시면 되지 않을까요?
:
:
: 김태우 님이 쓰신 글 :
: : StringGrid1->Cells[i][0] 이 셀을 ... 삭제하고 싶습니다.
: :
: : 1 2 3 4 5 6 7
: :
: : 이렇게 있다면..
: :
: : 중간에
: :
: : StringGrid1->Cells[3][0] 을 삭제하면..
: :
: : 1 2 3 5 6 7
: :
: : 이렇게 재배열이 되어하는데...
: :
: : 중간의 셀은 삭제하는 방법을 알고 싶습니다..
답변:
DeleteColumn() 이라는 멤버함수가 있지만, 이 함수는 TCustomGrid 클래스에서 protected 멤버함수로
정의되어 있기 때문에 TStringGrid 에선 DeleteColumn() 멤버함수를 사용할 수 없습니다.
TCustomControl->TCustomGrid ->TCustomDrawGrid->TDrawGrid->TStringGrid
Derived 클래스의 인스턴스로는 패런트에서 private 또는 protected로 정의되어 있는 멤범함수 또는 멤버데이타를
액세스 하는게 허용되지 않는데, 이런 경우... 해당 클래스의 코드 수정없이 사용할 수 있는 방법은... RTTI를 이용하는
방법과, 상속관계 트릭을 이용하는 방법... 이렇게 두가지가 가능 합니다.
RTTI를 이용하는 방법은 조금 복잡하니까 상속관계 트릭을 이용하는 방법만 알려 드릴게요.
//---------------------------------------------------------------------------
class THackedGrid : public TCustomGrid
{
public:
virtual void __fastcall DeleteColumn(int ACol);
};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
reinterpret_cast< THackedGrid* >(StringGrid1)->DeleteColumn(3);
}
//---------------------------------------------------------------------------
위와 같이 THackedGrid란 클래스를 Dummy로 선언해서 사용하는 트릭을 이용하면 됩니다.
...