여러곳을 뒤졌는데 델파이 쪽까지 다 뒤져봤지만 없더군요,
어쩔수 없이 만들었습니다,
이곳 질문란에 올렸던 스트링 그리드 셀 합치기 혹은 붙이기 랍니다
전체 소스는 회사차원에서의 작업이라서,,,T.T
뛰어난 소스는 아니니깐 아쉬워는 마세요 ^^
간단하게 팁을 공개 할께요
색깔 바꾸기나 3D효과 내기 팁들은 공개되서 많이들 알고 있으리라 믿구요
우선은 그 팁들을 이해한다고 가정하고 시작하겠습니다
그리드라하면 그리드는 TCanvas다라는 말로 풀어나가겠습니다
사실 내부적으로 Canvas위에 일일이 선들을 그리고 있답니다
그리드 제어는 이 TCanvas제어가 핵심입니다
그러므로 각각의 셀에 대한 핸들을 얻을수도 있지 않을까 하는 제
처음 생각이 틀렸음을 말해 주더 군요
핸들을 얻어낼수 없다면 차라리 TCanvas에 일일이 그려 볼까도 생각했지만
그 무수한 좌표제어 생각에 포기했구요
답은 역시 기존의 스트링 그리드를 사용하는것이라는데 도달 했답니다
DrawCell이벤트 함수에 각각의 셀들에 대한 그리기 정보가 넘어 온답니다
그리고 이 DrawCell이벤트는 셀들의 이동 좌우 상하 스크롤바 클릭시 좌표의 변동등과
같이 paint메시지를 호출해야 될 상황에선 무조건 호출 됩니다
인자들을 살펴 보시면 대충 흐름을 이해 하실 겁니다 여기서 중요한게
각각의 셀의 위치로 넘어오는 Rect에 있습니다
사실 Rect가 이 팁에 핵심입니다
//이곳은 그냥 3D 효과를 내기 위한 색깔에 관계된 것이구요
unsigned char step = 30;
unsigned char r = 0x80,g = 0x80,b = 0xC0;
TColor clr_highlight = static_cast( PALETTERGB(r+step,g+step,b+step) );
TColor clr_shadow = static_cast( PALETTERGB(r-step,g-step,b-step) );
//
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender,
int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
TRect CellRect,TextRect;
TStringGrid* StringGrid = static_cast(Sender);
TCanvas* ACanvas = StringGrid->Canvas;
ACanvas->Brush->Color = (TColor)RGB(128,128,192);
// 이 위까지는 그리드에 사용되는 객체를 받는 곳입니다
if( (ACol >= 2 && ACol <=4) && ARow == 1 )
{
AnsiString CellText = "WOW 안녕 하세요";
//이곳은 셀(2,1) 에서 셀(4,1)까지 합칩니다
//합치는게 아니라 덮어 쓴다는 표헌이 맞게군요
CellRect = StringGrid1->CellRect(2,1);
Rect.Left = CellRect.Left;
CellRect = StringGrid1->CellRect(4,1);
Rect.Right = CellRect.Right;
//이곳은 덱스트작업 영역
TextRect = Rect;
TextRect.Left = TextRect.Left + 40;
//이곳에서 바뀐 크기의 좌표를 가지고 그리기 작업을 하는곳입니다
ACanvas->FillRect( Rect );
Frame3D( ACanvas,Rect,clr_shadow,clr_highlight,2 );
DrawText( ACanvas->Handle,CellText.c_str(),CellText.Length(),&TextRect,
DT_LEFT | DT_VCENTER | DT_SINGLELINE );
}
}
가장 간단하고 단순하게 설명 했답니다
여기에 좌우,상하 스크롤이 붙게 되고 각 셀의 좌표가 수시로 바뀌게 되면
각 셀 좌표 제어 하는 문제,그리고 사실 여러가지 자잘한 문제까지 끼어들긴 하지만
가장 기본적인 이 팁의 요점은 이곳에 있답니다
응용하시면 꼭 셀 병합만이 아니라 다른 셀 중간점 혹은 판이한 크기와 위치의
셀도 작성하실수 있을 겁니다
다시 정리하면 핵심은 TCanvas와 인자로 넘어오는 TRect에 있답니다
차후에 컴포넌트로,,
도움이 되셨길 바라면서 이만 물러 갈께요
즐프..~~