Ownerdraw для Listbox
Вот пример обработчика OnDrawItem, выводящий английские гласные в красном цвете:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); VAR S : String; N : Word; WasColor : TColor; begin WITH Control AS TListBox, Canvas DO BEGIN S := Items[Index]; FillRect(Rect); MoveTo(Rect.Left+2, Rect.Top); SetTextAlign(Canvas.Handle, TA_LEFT OR TA_UPDATECP); WasColor := Font.Color; FOR N := 1 TO Length(S) DO BEGIN CASE UpCase(S[N]) OF 'A','E','I','O','U': Font.Color := clRed; ELSE Font.Color := WasColor; END; WinProcs.TextOut(Canvas.Handle, 0, 0, @S[N], 1); END; END; end; |
Обратите внимание на то, что для того, чтобы использовать стиль TA_UPDATECP (при котором каждый следующий вызов TextOut выводил текст в позиции, расположенной после предшествуюшей), необходимо использовать функцию API function TextOut (WinProcs.TextOut) вместо метода объекта Delphi Canvas TextOut.
- Neil [000607]