|
모든 Canvas 작업은 DrawCell 안에서 해주시는 것이 좋습니다. 아래는 0 일때, 셀 색을 노란색으로 변경시킨 예제입니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
String stData = StringGrid1->Cells[ACol][ARow].Trim();
if(stData == "0") {
StringGrid1->Canvas->Font->Color = clMaroon;
StringGrid1->Canvas->Brush->Color = clYellow;
}
if(stData == "1") StringGrid1->Canvas->Font->Color = clGreen;
if(stData == "2") StringGrid1->Canvas->Font->Color = clBlue;
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->TextOut(Rect.Left + 2, Rect.Top + 2, stData);
}
//---------------------------------------------------------------------------
이용주 님이 쓰신 글 :
: 답변 정말 감사드립니다. ^^
: 근데 또 궁금한게 있어서요.. (__)
: 글자색은 이렇게 하니까 잘 바뀌는데요.
: 10*10의 grid에서 StringGrid1->Canvas->Brush->Color을 이용하면 지정된 셀의 색깔도 바꿀수가 있더군요. 그런데요.. 이렇게 지정해서 셀의 색깔을 바꾸고 그위에 다른색깔을 글자를 덮어 씌울수는 없나요?? 두개를 같이 쓰고 TextOut을 사용하니까 전체 셀의 글자가 동시에 brush->color로 바뀌더군요.. 마치 바탕화면이 있는것 처럼요.. 아신다면 답변 부탁드릴께요.^^;;
:
: 유영인.Chris 님이 쓰신 글 :
: : Canvas 접근을 하실 때, DrawCell 이벤트에서 하시지 않으시면, 다시 덮어져 지워져 버립니다. 아래와 같이 DrawCell 이벤트로 접근을 하시면 손쉽게 접근을 하실 수 있고, Index #0 도 접근하실 수 있습니다.
: :
: : 아래 예제는 버튼을 클릭하면 0 ~ 2 중에 아무 글자나 넣고, 그 글자에 따라서 색을 다르게 찍는 예제입니다.
: :
: :
: : //---------------------------------------------------------------------------
: :
: : #include <vcl.h>
: : #pragma hdrstop
: :
: : #include "Unit1.h"
: : //---------------------------------------------------------------------------
: : #pragma package(smart_init)
: : #pragma resource "*.dfm"
: : TForm1 *Form1;
: : //---------------------------------------------------------------------------
: : __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
: : {
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: :
: : int itX, itY;
: :
: :
: : for(itX = 0; itX < StringGrid1->ColCount; itX ++)
: : for(itY = 0; itY < StringGrid1->RowCount; itY ++)
: : StringGrid1->Cells[itX][itY] = random(3);
: :
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
: : {
: :
: : String stData = StringGrid1->Cells[ACol][ARow].Trim();
: :
: :
: : if(stData == "0") StringGrid1->Canvas->Font->Color = clMaroon;
: : if(stData == "1") StringGrid1->Canvas->Font->Color = clGreen;
: : if(stData == "2") StringGrid1->Canvas->Font->Color = clBlue;
: :
: : StringGrid1->Canvas->TextOut(Rect.Left + 2, Rect.Top + 2, stData);
: :
: : }
: : //---------------------------------------------------------------------------
: :
: :
: : 이용주 님이 쓰신 글 :
: : : Cell별로 색깔을 넣는것은 canvas->color를 이용해서 구현했는데요.
: : : 색깔을 지정한 셀에 글자를 넣을수가 없더군요. 색이 없어져 버립니다.
: : : 셀의 색깔이 그 셀을 클릭하거나 거기에 글을 넣어도 그래도 남아있게 하는 방법은 없나요?? 있다면 꼭좀 답변좀 부탁드릴께요..
: : : 그리고 한가지만더요 ^^;;
: : : 셀에서 0,0 에 해당하는 곳에는 색깔이 지정이 안되더군요.
: : : 예를 들면 1,1의 위치에는 어떤 색깔이 들어가는데, 0,0, 0,1 1,0 이런 자표 값에는 색깔이 들어가지가 않는건데 이것도 방법이 있는건가요?? 있다면 꼭좀 답해주세요~~ 부탁드립니다. 그럼수고하세요..
:
|