Советы по 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 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]



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