Идёт загрузка страницы...

htp://aptem.net.ru





Delphi 1

Пример 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]