procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);VAR S : String;N : Word;WasColor : TColor;begin WITH Control AS TListBox, Canvas DOBEGINS := 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) DOBEGINCASE 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]