감사합니다. ~
박지훈.임프 님이 쓰신 글 :
: 스트링그리드에서 기본적으로 그리는 텍스트를 안그리도록 하려면 DefaultDrawing을 false로 설정하면 됩니다만, 그렇게 하면 원하시는 헤더 배경 부분도 아예 그리지 않게 되지요. 그래서 DefaultDrawing 설정으로는 해결되지 않고요.
:
: 원하시는 대로 테마 배경을 그리는 루틴을 직접 호출해주시면 되겠네요. 스트링그리드의 소스를 보면 헤더에 테마 배경을 그리는 루틴은 DrawThemeBackground()입니다. 다음과 같이 해보니 잘 되더군요.
:
:
DrawThemeBackground((void *)(ThemeServices()->Theme[teHeader]), StringGrid1->Canvas->Handle,
: 1, 1, &Rect, &Rect);
: 이전의 FillRect()를 지우시고 이 코드를 대신 넣으시면 되겠습니다.
: (어차피 DrawThemeBackground() 함수도 기존의 배경에 덮어써버리니 FillRect()가 필요하지 않겠지요)
:
: 그런데 이렇게 해서 그려보시면 원하시는 것과 비슷하긴 하겠지만, 잘 보시면 글자가 그려진 사각 영역이 불투명해져서 글자가 있는 부분만 테마 배경이 지워지고 희게 나타나게 될 겁니다. 그래서 스트링그리드에 실제로 텍스트를 그려넣기 전에 아래와 같이 브러시의 스타일을 투명하게 지정해주셔야 하겠습니다.
:
:
StringGrid1->Canvas->Brush->Style = bsClear;
:
: 아래와 같이 잘 나오는군요.
:
:
:
:
:
: 송신영 님이 쓰신 글 :
: : 안녕하세요. 오래간만에 질문 하나 드립니다.
: : 2010에서 String Gride를 gdsGradient 이나, gdsThemed 로 사용중에
: : Fixed Cell의 문자를 정렬하려면 그림과같이 Title1, Title3 같이 글자가 겹쳐서 그려집니다.
: : 그래서 배경을 지우고 그리면 원래의 Gradient나 Theme가 사라집니다. (Title2 같이..)
: : 그냥 내용 Cell의 경우 배경을 지우는 것은 문제될게 없는데
: : Fixed Cell은 참 보기가 그렇군요...
: : 원래의 배경을 그대로 두고 글자만 다시 정렬하는 방법이 없을 까요?
: : 감사합니다.
: :
: :
: :
: :
: :
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
: : TGridDrawState State)
: : {
: : // unsigned OldAlign = SetTextAlign(StringGrid1->Canvas->Handle, TA_CENTER);
: : // StringGrid1->Canvas->TextRect(Rect, (Rect.Right+Rect.left)/2, Rect.Top+2, StringGrid1->Cells[ACol][ARow]);
: : // SetTextAlign(StringGrid1->Canvas->Handle, OldAlign);
: :
: : if(ACol == 1) {
: : StringGrid1->Canvas->Brush->Color = clWhite;
: : StringGrid1->Canvas->FillRect(Rect);
: : }
: :
: : DrawText(StringGrid1->Canvas->Handle,
: : AnsiString(StringGrid1->Cells[ACol][ARow]).c_str() ,-1,&Rect,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TForm1::FormShow(TObject *Sender)
: : {
: : StringGrid1->Cells[0][0] = "Title1";
: : StringGrid1->Cells[1][0] = "Title2";
: : StringGrid1->Cells[2][0] = "Title3";
: :
: : StringGrid1->Cells[1][2] = "내용1";
: : StringGrid1->Cells[2][2] = "내용2";
: : }
: : //---------------------------------------------------------------------------
: :
: :