C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[68999] Re:[RAD Studio 2010] StringGrid Fixed Cell 부분 가운데 정렬 문제
박지훈.임프 [cbuilder] 3432 읽음    2013-01-16 09:55
스트링그리드에서 기본적으로 그리는 텍스트를 안그리도록 하려면 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";
: }
: //---------------------------------------------------------------------------
: 
: 

+ -

관련 글 리스트
68996 [RAD Studio 2010] StringGrid Fixed Cell 부분 가운데 정렬 문제 송신영 2455 2013/01/15
68999     Re:[RAD Studio 2010] StringGrid Fixed Cell 부분 가운데 정렬 문제 박지훈.임프 3432 2013/01/16
69009         Re:Re: 감사합니다. ~ 송신영 1913 2013/01/16
68998     Re:[RAD Studio 2010] StringGrid Fixed Cell 부분 가운데 정렬 문제 장성호 2175 2013/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.