StringGrid1->FixedCols 은 int 형 프로퍼티며, Fixed Column 개수 를 의미하고,
[] 연산자로 접근도 불가능하고요. StringGrid1->Options 는 TGridOptions 형 프로퍼티네요.
따라서 예를 든것과 같이 쓸수가 없습니다.
의도 하신 바가 뭔지 좀 헷갈리는데,
"첫번째 고정열의 세로줄은 안보이고, 두번째 고정열의 세로줄은 보이게 하고싶다"
라는 것으로 추측이 되는데 맞나요?
아니면 거기에다가 추가로
"고정열의 개수만큼 TGridOptions형 FixedColOptions 라는 프로퍼티를 가지며, [] 연산자로 접근해서 관리 하고 싶다"
라는 건가요?
후자를 포함해야 한다면 TStringGrid 를 재정의 해야 될것 같습니다.
아니면 Grid 별로 변수를 하나 따로 관리하는 방법도 있습니다.
아래는 변수를 배열로 선언했지만, Grid 의 Column 크기가 가변 적이라면,
vector 로 선언해서 ColCount를 변경시 같이 길이를 변경 해줘야 합니다.
bool FixedColVertLine[5]={0,1,0,1,0};
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State)
{
if (State.Contains(gdFixed) && FixedColVertLine[ACol]==false) {
//1번 방법
TColor tmp = ((TStringGrid*)Sender)->Canvas->Pen->Color;
((TStringGrid*)Sender)->Canvas->Pen->Color=((TStringGrid*)Sender)->Color;
((TStringGrid*)Sender)->Canvas->MoveTo(Rect.right,Rect.top);
((TStringGrid*)Sender)->Canvas->LineTo(Rect.right,Rect.bottom);
((TStringGrid*)Sender)->Canvas->Pen->Color=tmp;
//2번 방법
TRect r1=Rect, r2=Rect;
r2.Left=r2.right-1;
r1.Left=r1.right;
r1.Right++;
((TStringGrid*)Sender)->Canvas->CopyRect(r1,((TStringGrid*)Sender)->Canvas,r2);
}
}
1번은 그냥 선 하나를 그리는 것이라 Gradient 가 있는 Fixed 셀에 적용시 이쁘지 않다는 단점이 있고요.
2번은 선 위치의 바로 왼쪽 1픽셀을 복사해서 붙이는 것이라 말끔하게 보이는데, 복사하는 1픽셀에 글씨가 써져 있다면 글씨 까지 복사되는 단점이 있습니다.
사실 AdvStringGrid 의 MergeCell 기능도 이런것과 다를바 없다고 생각 되네요. 그냥 합쳐진것 처럼 보일뿐,
실제로 Cells에 접근해보면 합쳐진 셀은 모두 동일한 값을 가지고 있습니다.
Merge에 대한 정보는 Cellproperties 라는 프로퍼티로 따로 관리 하고요.
어쨋든... 도움이 되었으면 하네요.
물음 님이 쓰신 글 :
: TStringGrid 에서의 Properties->Options값을
:
: 프로그램 상에서 FixedCols 2줄을
:
: 따로 옵션 관리하고싶습니다.
:
: StringGrid1->FixedCols[0] = StringGrid1->Options >> goFixedVertLine;
: StringGrid1->FixedCols[1] = StringGrid1->Options << goFixedVertLine;
:
: 이런식으로 관리하고싶은데 잘 안되네요..
:
: 꼭 좀 필요한 기능이라 혹시 아시는분 공유해주세요. 감사합니다!