Conceptos básicos del portapapeles (cortar / copiar / pegar)

click fraud protection

El Portapapeles de Windows representa el contenedor de cualquier texto o gráfico que se corte, copie o pegue desde o hacia una aplicación. Este artículo le mostrará cómo usar el objeto TClipboard para implementar funciones de cortar, copiar y pegar en su aplicación Delphi.

Portapapeles en general

Como probablemente sepa, el Portapapeles puede contener solo una pieza del mismo tipo de datos para cortar, copiar y pegar a la vez. Si enviamos nueva información en el mismo formato al Portapapeles, borramos lo que había antes, pero el el contenido del Portapapeles permanece con el Portapapeles incluso después de pegar esos contenidos en otro programa.

TClipboard

Para utilizar el Portapapeles de Windows en nuestras aplicaciones, debemos agregar el Unidad ClipBrd a la cláusula de usos del proyecto, excepto cuando restringimos cortar, copiar y pegar a los componentes que ya poseen soporte incorporado para los métodos del Portapapeles. Esos componentes son TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage y TDBMemo.

instagram viewer

La unidad ClipBrd representa automáticamente un objeto TClipboard llamado Portapapeles. Usaremos el CutToClipboard, Copiar al portapapeles, PasteFromClipboard, Claro y HasFormat métodos para manejar las operaciones del Portapapeles y la manipulación de texto / gráficos.

Enviar y recuperar texto

Para enviar texto al Portapapeles, se utiliza la propiedad AsText del objeto Portapapeles. Si queremos, por ejemplo, enviar el cuerda información contenida en la variable SomeStringData en el Portapapeles (borrando cualquier texto que haya), usaremos el siguiente código:

usos ClipBrd; ...
Portapapeles. AsText: = SomeStringData_Variable; 

Para recuperar la información de texto del Portapapeles usaremos

usos ClipBrd; ...
SomeStringData_Variable: = Portapapeles. AsText; 

Nota: si solo queremos copiar el texto de, digamos, Editar componente en el Portapapeles, no tenemos que incluir la unidad ClipBrd en la cláusula uses. El método CopyToClipboard de TEdit copia el texto seleccionado en el control de edición al Portapapeles en el formato CF_TEXT.

procedimiento TForm1.Button2Click (Remitente: TObject); empezar// la siguiente línea seleccionará // TODO el texto en el control de edición {Edit1.SelectAll;} Edit1.CopyToClipboard; final; 

Imágenes del portapapeles

Para recuperar imágenes gráficas del Portapapeles, Delphi debe saber qué tipo de imagen se almacena allí. Del mismo modo, para transferir imágenes al portapapeles, la aplicación debe decirle al portapapeles qué tipo de gráficos está enviando. A continuación se presentan algunos de los posibles valores del parámetro Formato; Hay muchos más formatos de Portapapeles proporcionados por Windows.

  • CF_TEXT - Texto con cada línea que termina con un CR-LF combinación.
  • CF_BITMAP - Un gráfico de mapa de bits de Windows.
  • CF_METAFILEPICT - Un gráfico de metarchivo de Windows.
  • CF_PICTURE - Un objeto de tipo TPicture.
  • CF_OBJECT - Cualquier objeto persistente.

El método HasFormat devuelve True si la imagen en el Portapapeles tiene el formato correcto:

Si Portapapeles. HasFormat (CF_METAFILEPICT) luego ShowMessage ('El portapapeles tiene metarchivo'); 

Use el método Assign para enviar (asignar) una imagen al Portapapeles. Por ejemplo, el siguiente código copia el mapa de bits de un objeto de mapa de bits llamado MyBitmap en el Portapapeles:

 Portapapeles. Asignar (MyBitmap); 

En general, MyBitmap es un objeto de tipo TGraphics, TBitmap, TMetafile o TPicture.

Para recuperar una imagen del Portapapeles tenemos que: verificar el formato del contenido actual del portapapeles y usar el método Asignar del objeto de destino:

{coloque un botón y un control de imagen en el formulario1} {Antes de ejecutar este código, presione la combinación de teclas Alt-PrintScreen}usos clipbrd;... procedimiento TForm1.Button1Click (Remitente: TObject); empezarSi Portapapeles. HasFormat (CF_BITMAP) luego Imagen 1. Imagen. Mapa de bits Asignar (Portapapeles); final; 

Más control del portapapeles

El Portapapeles almacena información en múltiples formatos para que podamos transferir datos entre aplicaciones usando diferentes formatos. Al leer información del portapapeles con la clase TClipboard de Delphi, estamos limitados a los formatos estándar del portapapeles: texto, imágenes y metarchivos.

Suponga que está trabajando entre dos aplicaciones Delphi diferentes; ¿Cómo definiría el formato del portapapeles personalizado para enviar y recibir datos entre esos dos programas? Para fines de exploración, supongamos que está tratando de codificar un Pegado opción del menú. Desea que se desactive cuando no hay texto en el portapapeles (como una instancia).

Dado que todo el proceso con el portapapeles se lleva a cabo detrás de escena, no existe un método de clase TClipboard que le informe cuando se haya producido algún cambio en el contenido del portapapeles. La idea es conectar el sistema de notificación del portapapeles, para que pueda acceder y responder a los eventos cuando el portapapeles cambie.

Para disfrutar de más flexibilidad y funcionalidad, es necesario lidiar con las notificaciones de cambio del portapapeles y los formatos de portapapeles personalizados, escuchar el Portapapeles.

instagram story viewer