Cómo añadir un menú emergente que permita copiar al portapapeles de Windows el valor de una columna determinada, de la fila seleccionada actualmente, en un TListView. Se usará el IDE de programación Delphi y el lenguaje base Pascal.

Añadiremos al formulario el componente TListView (en la paleta de componentes Win32):

Añadir menú emergente para copiar valor de columna TListView con Delphi

Y un componente de tipo TPopupMenu (en la paleta de componentes Standard):

Añadir menú emergente para copiar valor de columna TListView con Delphi

Añadiremos las columnas que queramos al componente TListView, por ejemplo: ID, Usuario, Usuario a mostrar en impresora y Código destino:

Añadir menú emergente para copiar valor de columna TListView con Delphi

Quedando:

Añadir menú emergente para copiar valor de columna TListView con Delphi

Asociaremos el ListView con el PopupMenu, seleccionándolo en la propiedad PopupMenu del ListView:

Añadir menú emergente para copiar valor de columna TListView con Delphi

El ListView se rellenará de datos (filas), usando un procedimiento Delphi. Como ejemplo, mostramos el código fuente Pascal (Delphi) que lee los usuarios de una tabla (tablaView), obtiene el nombre y los apellidos, los acorta para dejar 16 caracteres como máximo y rellena la lista anterior con los datos:

  • ID: codigo del usuario.
  • Usuario: nombre completo, compuesto por apellido primero, espacio, apellido segundo, coma, espacio y nombre.
  • Usuario a mostrar en impresora: nombre corto (16 caracteres), acortando nombre y apellidos. Esto es útil para impresoras tipo Ricoh y pantallas de teléfono tipo Cisco, que admiten como máximo 16 caracteres.
  • Codigo destino: un código identificativo.

Las columnas y datos anteriores son un ejemplo para rellenar el ListView, como es lógico, lo rellenaremos con los datos que necesitemos.

Puesto que, desde el formulario TformUsuario, estamos rellenando el ListView contenido en otro formulario (TformCSVEscaner), previamente tendremos que crear este formulario.

Añadiremos los menús que necesitemos en el PopupMenu. En nuestro ejemplo, añadiremos tres menús:

  • Copiar nombre para mostrar: copiará el contenido de la columna «Usuario a mostrar en impresora» al portapapeles, de la fila seleccionada.
  • Copiar usuario: copiará el contenido de la columna «Usuario» al portapapeles, de la fila seleccionada.
  • Copiar código destino: copiará el contenido de la columna «Código destino» al portapapeles, de la fila seleccionada.
Añadir menú emergente para copiar valor de columna TListView con Delphi

Añadiremos ahora el código fuente para cada elemento del menú. Haciendo doble clic sobre el primero, añadiremos el siguiente código:

El código anterior, asignado al menú «Copiar nombre para mostrar», copiará al portapapeles de Windows el valor contenido en la columna 1 (que se corresponde con «Usuario a mostrar en impresora»), de la fila seleccionada actualmente.

Repetiremos el código para el resto de menús, cambiando el índice de la columna a copiar:

IMPORTANTE: para poder usar el procedimiento Clipboard, deberemos añadir al uses del formulario la unidad Clipbrd:

Ejecutando la aplicación, al pulsar con el botón derecho sobre una fila del ListView, nos mostrará el menú emergente, pulsando en una de sus opciones, copiará el texto de la columna correspondiente a la fila seleccionada al portapapeles de Windows:

Añadir menú emergente para copiar valor de columna TListView con Delphi