본문 바로가기
삽질

delphi / TComboBox, TListBox onDrawItem

by rokwha 2023. 8. 15.

http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=76478 

 

볼랜드포럼: TRzComboBox 항목 개별 색상 변경

안녕하세요 궁금한 게 있어서 처음 글써봅니다. 해당 사이트로 업무에 많은 도움을 받고 있는 점 우선 감사 인사드립니다. 제목 그대로 TRzComboBox로 항목들을 분류하고 있는데요 Items의 각 항목들

cbuilder.borlandforum.com


콤보박스 에서 아이템별로 색상 ( 또는 다른거... ) 을 변경하고 싶으면..  Style 을 csOwnerDrawFixed 로 변경하고 OnDrawItem 에서 코딩으로 처리 하면 된다. -- Style 에 따라 달라지니 다른 스타일도 참고해보자. --

 

보통 OwnerDraw 로 검색하면 될꼴...


Items 에 RED, BLUE, YELLOW 라고 있다고 하고 Events 탭에서 OnDrawItem 을 더블클릭해서 이벤트 프로시져를 만들어보자.

 

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  cItemText: string;
  vCB: TComboBox absolute Control;    // 타입캐스팅을 하기 귀찮으니 absolute 로...
  cColor: TColor;
begin

  cItemText:= vCB.Items[ Index ];  // Items 에서 값을 가져와서 값에 색상을 정한다.

  if cItemText = 'RED' then
    cColor:= clRED
  else if cItemText = 'YELLOW' then
    cColor:= clYellow
  else if cItemText = 'BLUE' then
    cColor:= clBlue;

//canvas 를 조작하여 색상을 설정하고 문자열을 찍어준다. 배경색등 각종설정을 원하는대로 설정
  vCB.Canvas.Font.Color:= cColor;
  vCB.Canvas.FillRect( Rect );
  vCB.Canvas.TextOut(Rect.Left+10, Rect.Top, cItemText  );

end;

TListBox 도 한번 해보자...

TConboBox/TListBox 에서 OnDrawItem 에서..

 

반응형