안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당 임펠리테리입니다.
메일로 다시 질문을 보내셨는데.. 저는 메일로 보내신 질문에는 답변하지 않습니다만
마침 잠시 시간이 남아서 답변을 적어봅니다. 다음번에는 게시판을 이용해주시기
바랍니다.
빈 폼에 콤보박스 하나를 떨어뜨리고, 폼의 OnCreate 핸들러와 콤보박스의
OnDrawItem 이벤트에 핸들러를 다음과 같이 작성합니다.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ComboBox1->Style = csOwnerDrawFixed;
AnsiString ColorName;
for(int i=0; i<sizeof(IntColors)/sizeof(TColor); i++)
{
ColorToIdent(IntColors[i], ColorName);
ComboBox1->Items->Add(ColorName);
}
}
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
ComboBox1->Canvas->Brush->Color = State.Contains(odSelected) ? clNavy : clWhite;
ComboBox1->Canvas->FillRect(Rect);
ComboBox1->Canvas->Pen->Color = IntColors[Index];
ComboBox1->Canvas->Pen->Width = 3;
ComboBox1->Canvas->MoveTo(Rect.Left+2, Rect.Top+8);
ComboBox1->Canvas->LineTo(Rect.Right-2, Rect.Top+8);
}
위에서 사용된 IntColors는 컬러들의 값을 가지고 있는 TColor 형 배열입니다.
위 함수들의 위쪽에 그냥 다음과 같이 써주시면 되죠.
TColor IntColors[] = { clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple,
clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite };
실행해보시면 콤보박스에 열여섯가지 색깔의 컬러 띠가 나오는 것을 보실 수 있을
겁니다. 또, 콤보박스에 들어간 각 아이템은 컬러들의 이름인데, OnDrawItem에서
직접 그려줄 수 있습니다. 이것은 직접 해보시기 바랍니다. 그리 어렵진 않을겁니다.
그럼 참고하시길...
임펠리테리 박지훈이었습니다.
(cbuilder, cbuilder@thrunet.com)
|