Voy a asumir bastantes cosas ya que no das muchos detalles
El codigo que te propongo funciona para el
ListView de la
Vcl. No he cambiado ninguna propiedad de las que vienen por defecto al soltar el componente TListView en el form. Todas las cambio en el evento
FormCreate del Form para que quede bien claro
Para que te funcione el codigo necesitas un
TListView llamado
ListView1 y un
TEdit llamado
Edit1. El
Edit le indica al
ListView que debe "repintarse" cuando se presiona
ENTER, obviamente con el foco sobre el Edit. De eso se encarga el evento
OnKeyDown del TEdit
Cuando el ListView recibe la orden de pintarse, el evento
CustomDrawItem se dispara y te permite realizar "ajustes" sobre el item que actualmente se esta pintando. Podes consultar las propiedades del Item que recibio el evento en los argumentos del evento (el parametro Item). Tambien tenes un parametro
State que indica en que "fase" del pintado esta el TListView actualmente. Esto lo explica mejor la documentacion que yo
Es un evento un poco "raro" porque en este el parametro
Sender no es TObject como siempre, es un
TCustomListView, que nos viene muy bien porque necesitamos el
Canvas para poder realizar el pintado personalizado
Hay muchos mas eventos de pintado. Algunos requieren que actives la propiedad
OwnerDraw del TListView para que se disparen. Esto implica que uno mismo debe hacerse cargo del pintado completo del Listview, en todos sus posibles estados. Es un trabajo algo pesado pero tenes flexibilidad absoluta
Sin mas, el codigo
Código Delphi
[-]
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
ListView1.Repaint;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
Col: TListColumn;
Item: TListItem;
begin
ListView1.ViewStyle := TViewStyle.vsReport;
for I := 1 to 2 do
begin
Col := ListView1.Columns.Add;
Col.Caption := 'Columna ' + I.ToString;
Col.Width := 150;
end;
for I := 1 to 10 do
begin
Item := ListView1.Items.Add;
Item.Caption := 'Item ' + I.ToString;
Item.SubItems.Add('Item ' + I.ToString);
end;
end;
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if Edit1.Text = Item.Caption then
Sender.Canvas.Brush.Color := clRed;
end;