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
[69009] Re:Re: 감사합니다. ~
송신영 [palindrome] 1912 읽음    2013-01-16 13:27
감사합니다. ~

박지훈.임프 님이 쓰신 글 :
: 스트링그리드에서 기본적으로 그리는 텍스트를 안그리도록 하려면 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 부분 가운데 정렬 문제 송신영 2454 2013/01/15
68999     Re:[RAD Studio 2010] StringGrid Fixed Cell 부분 가운데 정렬 문제 박지훈.임프 3432 2013/01/16
69009         Re:Re: 감사합니다. ~ 송신영 1912 2013/01/16
68998     Re:[RAD Studio 2010] StringGrid Fixed Cell 부분 가운데 정렬 문제 장성호 2174 2013/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.