Пример OwnerDraw для Listbox
Автор: Neil
Вот пример обработчика 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.
|