|
'오너드로우'라고 부르는 방법을 쓰면 됩니다. 오너드로우란 컴포넌트의 그리는 방법을 컴포넌트 자체의
루틴이 아니라 컴포넌트를 사용하는 프로그램에서 직접 그려주는 걸 말하는데, 콤보박스나 리스트박스,
스트링그리드/드로우그리드, 리스트뷰 등에서 지원합니다.
콤보박스에서 오너드로우를 하려면, 먼저 콤보박스의 Style 프로퍼티를 csOwnerDrawFixed이나
csOwnerDrawVariable로 설정합니다. 둘중에서 어느 것을 선택하느냐는 그려질 콤보박스의 아이템들이
일정한 높이이냐 아니면 각각의 아이템이 서로 다른 높이를 갖느냐인데, 모든 아이템에 같은 크기의 폰트를
그려주려는 목적일 테니 csOwnerDrawFixed를 선택하면 될 겁니다.
그런 후에 오브젝트 인스펙터에서 OnDrawItem 이벤트를 더블클릭해서 이벤트 핸들러를 만듭니다.
자동으로 생성된 이벤트 핸들러 함수에는 그려질 아이템의 인덱스(몇번째냐), 그려질 영역(TRect),
그리고 그려질 방법(상태) 등이 인자로 넘어오는데, 이것들을 이용해서 직접 그려주면 됩니다.
해당 폰트에 맞추어 그려주어야 할 테니, 콤보박스.Canvas.Font를 원하는 폰트로 수정해준 다음,
콤보박스.Canvas.TextOut(Rect.Left+2, Rect.Top, 콤보박스.Items[Index]) 정도로 호출해주면 될
겁니다. 참, 상태에 따라 포커스 여부나 선택된 여부(파란색 반전) 등도 그려주어야 하는데..
이 정도는 직접 찾아보세요.
그럼...
신현준 님이 쓰신 글 :
: 폰트 다이얼로그를 사용하지 않고...
:
: 폰트 다이얼로그의 여러 폰트들을 직접 선택할 수 있도록 하려고 합니다.
:
: 헌데.. 이 여러 폰트들의 종류를 콤보박스에서 아이템들로 관리 하려고 하는데요..
:
: 이때 각 아이템들을 각 폰트에 맞게 보여지게 할 수는 없을런지요..
:
: 그리고.. 혹... 폰트 다이얼로그의 여러 폰트들을 콤보박스의 아이템들로 등록시키는 쉬운 방법은 없을까요?
:
: 고수님들의 답변 부탁드립니다..
|