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.