Items de diferentes colores en un ListBox

3138 vistas

Si nuestro ListBox no tubiera columnas ya nos servirÃa lo explicado en [iurl=85&fs=164#167]Items de diferentes colores en un ComboBox[/iurl], pero en el caso de que las tubiera, necesitarÃamos usar el API



delphi
  1. procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  2.   Rect: TRect; State: TOwnerDrawState);
  3. var
  4.   PosTab: integer;
  5.   dtp: TDrawTextParams;
  6. begin
  7.   with (Control as TListBox) do
  8.     begin
  9.       { Los Items pares de color rojo, los impares en negro }
  10.       if Odd(Index) then Canvas.Font.Color := clRed
  11.       else Canvas.Font.Color := clBlack;
  12.  
  13.       Canvas.FillRect(Rect);
  14.  
  15.       with dtp do
  16.       begin
  17.         cbSize := SizeOf(TDrawTextParams);
  18.         iTabLength := TabWidth;
  19.         iLeftMargin := 0;
  20.         iRightMargin := 0;
  21.       end;
  22.       DrawTextEx( Canvas.Handle, PChar(Items[Index]), Length(Items[Index]),
  23.                   Rect,DT_LEFT or DT_EXPANDTABS or DT_TABSTOP,@dtp);
  24.     end;
  25. end;