Советы по Delphi


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]



Содержание раздела