|
구체적으로는 곤란할 수 있지만 일단 방향을 알려드리면...
확실히 구현하려면 스트링그리드를 상속받아서 새 컴포넌트를 만들어야 합니다.
스트링그리드의 CellRect 속성등을 이용해서 강제로 그 위치에 옮겨주는 편법도 있기는 한데, 문제가 100% 생깁니다.
만드는 방법은... 먼저 TStringGrid 자체도 상속을 받아야겠지만, 그보다 더 핵심은 TInplaceEdit라는 클래스입니다.
스트링그리드가 편집모드일 때 나타나는 에디트는 실제로도 에디트인데 이 에디트의 클래스가 TInplaceEdit입니다.
TCustomMaskEdit인가에서 상속받기 때문에 TCustomEdit의 속성은 다 가지고 있습니다. 거기에 추가로 Grid의 내부에서
동작하기 위한 몇가지 함수, 속성들이 추가되어 있구요.
그러니까 원하시는 스핀에디트나 버튼 등을 집어넣으려면 이 TInplaceEdit를 상속받아서 거기다가 집어넣어야 합니다.
에디트에 컴포넌트 집어넣는 것은 얼마전에 델파이 세미나에서 제가 했던 강좌에서도 있으니까 참고하시구요.
(C++빌더 소스도 올려놨습니다)
그리고 마지막으로 중요한 것은, 상속받은 그리드에서 CreateEditor 함수를 오버라이드해야 한다는 것입니다.
이 함수의 역할은 위에서 말한 InplaceEdit를 생성해주는 역할을 하는데, 여기서 원래의 TInplaceEdit 대신에 상속받아
버튼 등을 추가한 새 클래스로 객체를 생성해서 리턴시키면 됩니다.
이렇게 주루룩 말하면 되게 쉬워보이지만, 실용적으로 만들려면 몇배로 더 신경쓰이는데...
예를 들어, 에디트에 어떤 경우에 스핀버튼을 표시하고 어떤 경우에 버튼을 표시하겠습니까. 혹은 콤보박스로 동작하게
하고 싶을 수도 있는데 그때는 어떻게 할까요?
어떤 컨트롤을 보여줄지는 실무 특성상 대부분의 경우 컬럼에 따라 달라질 것입니다. 컬럼에 따라 숫자만 표시할 수도
있고 아니면 팝업을 띄워서 값을 선택해올 수도 있으니까요. 결과적으로 컬럼과 컬럼 에디터가 필요하게 됩니다.
점점 복잡해지지요. 어쨌든.. 컬럼과 컬럼 에디터를 추가하려면 TCollection과 TCollectionItem에서 각각 상속받은
각 컬럼 객체와 컬럼관리 객체가 필요해집니다.
그러면 이렇게 만들기만 하면 끝나는 것은 아닙니다. 스트링 그리드 자체가 컬럼 에디터를 고려하지 않고 만들어져 있어서
아무리 원론적으로 잘 설계해도 컬럼 에디터와 잘 맞지 않습니다. 실제로 써보면 무쟈게 많은 에러가 나기 시작합니다.
예를 들어 컬럼 에디터에서 설정한 값이 실제 스트링그리드에 적용이 되지 않거나 그 반대이거나.. 그렇습니다.
뭐 좀 기다리실 수 있으시다면... 제가 짬짬이 샘플로 만들던 걸 올려드리겠습니다.
스핀버튼은 없는디... 웬만한 기능은 다 있습니다.
그럼...
하안인 님이 쓰신 글 :
: StringGrid에서 한셀에 버튼을 imbed하려면 어떻게 해야하나요..
:
: TADvStringGrid를 사용하다 빌더6으로 버전업하니 trial버전이 되어 버려서...
:
: VirtualTreeView같은 컴포넌트를 써서 사용하는 것은 알겠는데..
:
: 이젠 제가 만들어서 사용하고 싶어서...
:
: 어떻게 공부해야 할지... 도움을 구합니다.
:
: 하고자 하는 것은 StringGrid에서 셀을 선택했을때 버튼이나 스핀컨트롤같은 컴포넌트를
: 셀안에 보여주고 클릭했을 경우 처리하려고 합니다.
|