TComboBox 에서 Item 별로 폰트색 등을 다르게 하는 법.

 

 

1. ComboBox1.Style:=csOwnerDrawFixed;

2. ComboBox1.DrawItem 함수를 떠덕 만든다.

3. DrawItem 함수를 아래처럼 작성

 

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);

var ComboBox: TComboBox absolute Control;
begin

  // 선택된 Item 의 배경색을 흰색으로 해주기 위해
  if odSelected in State then begin
    ComboBox.Canvas.Brush.Color:=clWhite;
    ComboBox.Canvas.FillRect(Rect);
  end;

 

  // 폰트색을 파란색으로
  ComboBox.Canvas.Font.Color:=clBlue;
  

  // Item Add
  ComboBox.Canvas.TextOut(Rect.Left, Rect.Top, TComboBox(Control).Items[Index]);
end;

 

 

 

 

 

 

 

만약 어떤 Flag로 폰트색을 결정해야 한다면 AddObject 를 사용함.

아래의 예는 재직자는 파란색, 퇴사자는 빨간색으로 구분하여 출력하기 위함.

 

 

ComboBox Item 추가시

 

procedure TForm1.Button1Click(Sender: TObject);
begin

  // DB에서 사람정보를 가져옴

   ...

   ...

  // 콤보박스에 넣음.

  // AccessPermitFromDB는 Integer형이라고 가정함.

  ComboBox1.Items.AddObject(NameFromDB, TObject(AccessPermitFromDB));
end;

 

 

DrawItem

 

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
const
  재직자=1;
  퇴사자=0;

var ComboBox: TComboBox absolute Control;
begin

  // 선택된 Item 의 배경색을 흰색으로 해주기 위해
  if odSelected in State then begin
    ComboBox.Canvas.Brush.Color:=clWhite;
    ComboBox.Canvas.FillRect(Rect);
  end;

 

  // 재직자, 퇴사자에 따른 폰트색 변경

  case Integer(ComboBox.Items.Objects[Index]) of
    재직자: ComboBox.Canvas.Font.Color:=clBlue;
    퇴사자: ComboBox.Canvas.Font.Color:=clRed;
  end;

 

  // Item Add
  ComboBox.Canvas.TextOut(Rect.Left, Rect.Top, TComboBox(Control).Items[Index]);
end;









Posted by bloodguy
,