Ver Mensaje Individual
  #2  
Antiguo 18-01-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
  // inicializo el TListView con 2 columnas y 10 items
  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
  // encontrado
  if Edit1.Text = Item.Caption then
    Sender.Canvas.Brush.Color := clRed;
end;
Responder Con Cita