Me quieres que el color de una fila en color gris y la otra en blanco.

Tengo el siguiente código, pero hay un espacio en blanco de las líneas verticales de las columnas en Windows 7.

¿Cómo el color de todas las filas?

procedure TForm2.Update_ListBoxCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 if Item.Index mod 2=0
 then
  begin
   Sender.Canvas.Font.Color:=clBlack;
   Sender.Canvas.Brush.Color:=$F6F6F6;
  end
 else
  begin
   Sender.Canvas.Font.Color:=clBlack;
   Sender.Canvas.Brush.Color:=clWhite;
  end;
end;
InformationsquelleAutor Michael | 2011-06-09

1 Comentario

  1. 9

    Conjunto OwnerDraw a true y agregar

    procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
    Rect: TRect; State: TOwnerDrawState);
    var
    i: Integer;
    x1, x2: integer;
    r: TRect;
    S: string;
    const
    DT_ALIGN: array[TAlignment] of integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
    begin
    if Odd(Item.Index) then
    begin
    Sender.Canvas.Font.Color := clBlack;
    Sender.Canvas.Brush.Color := $F6F6F6;
    end
    else
    begin
    Sender.Canvas.Font.Color := clBlack;
    Sender.Canvas.Brush.Color := clWhite;
    end;
    Sender.Canvas.Brush.Style := bsSolid;
    Sender.Canvas.FillRect(Rect);
    x1 := 0;
    x2 := 0;
    r := Rect;
    Sender.Canvas.Brush.Style := bsClear;
    for i := 0 to ListView1.Columns.Count - 1 do
    begin
    inc(x2, ListView1.Columns[i].Width);
    r.Left := x1;
    r.Right := x2;
    if i = 0 then
    S := Item.Caption
    else
    S := Item.SubItems[i];
    DrawText(Sender.Canvas.Handle,
    S,
    length(S),
    r,
    DT_SINGLELINE or DT_ALIGN[ListView1.Columns[i].Alignment] or
    DT_VCENTER or DT_END_ELLIPSIS);
    x1 := x2;
    end;
    end;

    ListView en vsReport modo de coloración de los Elementos de las filas y

    En el ejemplo anterior, la primera columna está alineado a la izquierda y los otros dos están en el centro.

    Si solo tiene una columna, es decir, no hay puntos:

    procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem;
    Rect: TRect; State: TOwnerDrawState);
    var
    r: TRect;
    S: string;
    const
    DT_ALIGN: array[TAlignment] of integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
    begin
    if odd(Item.Index) then
    begin
    Sender.Canvas.Font.Color:=clBlack;
    Sender.Canvas.Brush.Color:=$F6F6F6;
    end
    else
    begin
    Sender.Canvas.Font.Color:=clBlack;
    Sender.Canvas.Brush.Color:=clWhite;
    end;
    Sender.Canvas.Brush.Style := bsSolid;
    Sender.Canvas.FillRect(Rect);
    r := Rect;
    Sender.Canvas.Brush.Style := bsClear;
    S := Item.Caption;
    DrawText(Sender.Canvas.Handle,
    S,
    length(S),
    r,
    DT_SINGLELINE or DT_ALIGN[ListView1.Columns[0].Alignment] or DT_VCENTER or DT_END_ELLIPSIS);
    end;
    • Hay un poco más a ella (y exactamente qué es esto depende de su situación particular), pero esto debe empezar, por lo menos.
    • si no tengo un texto en el Apartado ¿qué hacer? Y cómo dibujar una imagen para el Artículo? Gracias.
    • Si usted no tiene los puntos, sólo tiene una columna. Entonces es aún más fácil. Simplemente quite un par de líneas de código.
    • Por favor me ayudan a hacerlo si tengo los puntos que no puede ser rellenado con texto + Elementos tienen iconos. Gracias!
    • Pensé que era digno de comentario de la línea: ‘S := Elemento.Los puntos[i];’ debe ser ‘S := Elemento.Los puntos[i-1]; » de lo Contrario usted obtiene la lista de índice de errores.
    • Obtener lista de índice fuera de los límites(1) » cada vez que la lista de llegar fresco, también los mapas de bits no se muestran en el apartado de las células (tengo un imagelist limitada a los listviews del smallimages de la propiedad).
    • Sí hay un problema de indexación. Cambiar la » S := Elemento.Los puntos[i]’ fila ‘S := Elemento.Los puntos[i-1]; » por supuesto que no ayuda con el problema de que mi imagen no obtener mostró.

Dejar respuesta

Please enter your comment!
Please enter your name here