Delphi/Lazarus: Seleccionar todo con CTRL+A en ListView
Consejo de Stefan Trost | Última actualización el 18/11/2022 | Creado el 25/06/2021
Si ha escrito una aplicación en Delphi o Lazarus que contiene un TListView con algunas entradas, es muy bueno tener la posibilidad de seleccionar todos los elementos del ListView presionando el atajo de teclas CTRL y A en el teclado. Desafortunadamente, un ListView no lo admite automáticamente.
Pero podemos remediar esto rápidamente escribiendo el siguiente código en el evento OnKeyDown de nuestro ListView:
procedure Tprog.ListView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i: integer; begin if (Shift = [ssCtrl]) and (key = ord('A')) then begin ListView1.Items.BeginUpdate; for i := 0 to ListView1.Items.Count - 1 do ListView1.Items[i].Selected := true; ListView1.Items.EndUpdate; end; end;
En primer lugar, este código comprueba qué teclas se han pulsado. Si las teclas son "CTRL" (Shift = [ssCtrl] - la tecla Shift se presiona) y "A" (key = ord('A') o también key = 65), revisamos todas las entradas de ListView y establezcamos la propiedad "Selected" de cada elemento en "true". De modo que el ListView no se dibuja nuevamente después de cada uno de estos cambios individuales, llamamos .BeginUpdate y .EndUpdate antes y después de recorrer los elementos. Por supuesto, aún puede agregar condiciones para otras teclas o combinaciones de teclas.
Importante: Para poder seleccionar varios elementos en ListView, tenemos que establecer la propiedad "MultiSelect" de nuestro ListView en "true" antes (por ejemplo a través del Object Inspector). De lo contrario, esta propiedad está deshabilitada de manera predeterminada para que solo un elemento de ListView se pueda seleccionar al mismo tiempo.
Solución más general
En nuestro primer ejemplo de código, trabajamos directamente con una ListView concreta que lleva el nombre ListView1. Puede hacerlo de esta manera, pero en algunos casos una solución más general es más elegante. Por ejemplo, si tenemos varias ListViews y cada una de ellas debe reaccionar a nuestra combinación clave de la misma manera. En este caso, podemos escribir un procedimiento general que luego podemos asignar a cada ListView sin tener que escribir el mismo código para varias veces.
Al hacerlo de esta manera, aprovechamos el variable "Sender" que contiene una referencia a la ListView llamada. Así es como sabemos qué ListView llamó al código para que podamos continuar trabajando con esta ListView. Un código general podría verse así:
procedure Tprog.ListViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var AListView: TListView; i: integer; begin if not (Sender is TListView) then exit; AListView := (Sender as TListView); if (Shift = [ssCtrl]) and (key = 65) then begin AListView.Items.BeginUpdate; for i := 0 to AListView.Items.Count - 1 do AListView.Items[i].Selected := true; AListView.Items.EndUpdate; end; end;
No ha cambiado mucho en comparación con el primer código. En lugar de acceder a "ListView1" directamente, esta vez trabajamos con una variable que hemos llamado "AListView" aquí. De modo que no habrá ningún error si el procedimiento es llamado por un tipo de control diferente, primero verificamos en la primera línea si el remitente es realmente del tipo TListView. Si no, nos romperemos de inmediato. Si es así, podemos continuar y seleccionar todos los elementos de ListView de acuerdo con el proceso que discutimos anteriormente.
Sobre el Autor
Puede encontrar software de Stefan Trost en la pagina es.sttmedia.com. ¿Necesita un software individual según sus propios requisitos? Escribenos: es.sttmedia.com/contacto
Ver Perfil
Temas Relacionados
Script Batch: Apagar Computadora Windows
Tutorial | 2 Comentarios
VirtualBox: Cambiar la Fecha y la Hora
Tutorial | 10 Comentarios
CSS: Cómo incluir CSS en HTML
Tutorial | 0 Comentarios
Renombrar Archivos en sus Nombres de Carpeta
Tutorial | 0 Comentarios
Delphi/Lazarus: ¿Está presionada la tecla ALT, SHIFT o CTRL?
Tutorial | 0 Comentarios
MySQL: Eliminar Datos de Tabla - Diferencia entre TRUNCATE, DELETE y DROP
Tutorial | 0 Comentarios
jQuery: Contar Elementos, Imágenes, Clases, etc.
Consejo | 0 Comentarios
Aviso Importante
Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.
Participar
Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.