versión 11 (Modificado)
APPEND DATA TO PASTEBOARD (tipoDatos; datos)
Parámetro | Tipo | Descripción | |
tipoDatos | Alfa | Tipo de datos (4 caracteres) | |
datos | BLOB | Datos a añadir al portapapeles |
Descripción
El comando APPEND DATA TO PASTEBOARD añade en el portapapeles los datos del tipo especificado en tipoDatos en el BLOB datos.
Advertencia: El valor pasado en tipoDatos es sensible a las mayúsculas y minúsculas, por ejemplo "abcd" no es igual a "ABCD."
Si los datos del BLOB se añaden correctamente al portapapeles, la variable OK toma el valor 1. De lo contrario la variable OK toma el valor 0 y se puede generar un error.
Generalmente, se utiliza el comando APPEND DATA TO PASTEBOARD para agregar múltiples instancias de los mismos datos al portapapeles o para añadir datos que no son de tipo TEXT o PICT. Para añadir nuevos datos al portapapeles, primero debe limpiar el portapapeles utilizando el comando CLEAR PASTEBOARD.
Si quiere limpiar y añadir:
texto al portapapeles, utilice el comando SET TEXT TO PASTEBOARD,
una imagen al portapapeles, utilice el comando SET PICTURE TO PASTEBOARD.
Sin embargo, note que si un BLOB contiene texto o una imagen, usted puede utilizar el comando APPEND DATA TO PASTEBOARD para añadir un texto o una imagen al portapapeles.
Ejemplo
Utilizando los comandos del tema portapapeles y de los BLOBs, puede construir esquemas sofisticados de Cortar/Copiar/Pegar para administrar datos estructurados en lugar de una sola pieza de información. En el siguiente ejemplo, los dos métodos de proyecto SET RECORD TO CLIPBOARD y GET RECORD FROM CLIPBOARD le permiten tratar un registro de una información a copiar en o desde el portapapeles.
` Método de proyecto ENVIAR REGISTRO AL PORTAPAPELES ` ENVIAR REGISTRO AL PORTAPAPELES ( Numérico ) ` ENVIAR REGISTRO AL PORTAPAPELES ( Número de tabla ) C_LONGINT($1;$vlCampo;$vlTipoCampo) C_POINTER($vpTabla;$vpCampo) C_STRING(255;$vsDocNombre) C_TEXT($vtRegistroDatos;$vtCampoDatos) C_BLOB($vxRegistroDatos) ` Limpiar el portapapeles (estará vacío si no hay un registro actual) CLEAR PASTEBOARD ` Obtener un puntero a la tabla cuyo número se pasa como parámetro $vpTabla:=Table($1) ` Si hay un registro actual para esa tabla If ((Record number($vpTabla->)>=0) | (Is new record($vpTabla->))) ` Inicializar la variable texto que contendrá la imagen de texto del registro $vtRegistroDatos:="" ` Para cada campo del registro: For ($vlCampo;1;Count fields($1)) ` Obtener el tipo de campo GET FIELD PROPERTIES($1;$vlCamp;$vlCampoTipo) ` Obtener un puntero hacia el campo $vpCampo:=Field($1;$vlCampo) ` Dependiendo del tipo de campo, copiar (o no) sus datos de manera apropiada Case of : (($vlCampoTipo=Is Alpha field ) | ($vlCampoTipo=Is Text )) $vtCampoDatos:=$vpCampo-> : (($vlCampoTipo=Is Real ) | ($vlCampoTipo=Is Integer ) | ($vlCampoTipo=Is LongInt ) | ($vlCampoTipo=Is Date ) | ($vlCampoTipo=Is Time )) $vtCampoDatos:=String($vpCampo->) : ($vlCampoTipo=Is Boolean ) $vtCampoDatos:=String(Num($vpCampo->);"Sí;;No") Else ` Pasar e ignorar los otros tipos de campos $vtCampoDatos:="" End case ` Acumular los datos del campo en una variable de texto que almacena la imagen de texto del registro $vtRegistroDatos:=$vtRegistroDatos+Field name($1;$vlCampo)+":"+Char(9)+$vtCampoDatos+CR ` Nota: El método CR devuelve Char(13) en Macintosh y Char(13)+Char(10) en Windows End for ` Colocar la imagen de texto del registro en el portapapeles SET TEXT TO PASTEBOARD($vtRegistroDatos) ` Nombre del archivo scrap en la carpeta Temporales $vsDocNombre:=Temporary folder+"Scrap"+String(1+(Random%99)) ` Borrar el archivo scrap si existe (Se debe hacer una prueba de error aquí) DELETE DOCUMENT($vsDocNombre) ` Crear archivo scrap SET CHANNEL(10;$vsDocNombre) `Enviar el registro completo al archivo scrap SEND RECORD($vpTabla->) ` Cerrar el archivo scrap SET CHANNEL(11) ` Cargar el archivo scrap en un BLOB DOCUMENT TO BLOB($vsDocNombre;$vxRegistroDatos) ` No necesitamos más el archivo scrap DELETE DOCUMENT($vsDocNombre) ` Añadir la imagen completa del registro al portapapeles ` Nota: utilizamos arbitrariamente el tipo de datos "4Drc" APPEND DATA TO PASTEBOARD("4Drc";$vxRegistroDatos) ` En este punto, el portapapeles contiene: ` (1) Una imagen de texto del registro (como se muestra en las copias de pantalla a continuación) ` (2) Una imagen completa del registro (incluyendo imágenes, subarchivos y los campos de tipo BLOB) End if
Al introducir el siguiente registro:
Si aplica el método
ENVIAR REGISTRO AL portapapelesa la tabla [Empleados], el portapapeles contendrá el texto del registro y la imagen completa del registro.
Puede pegar esta imagen del registro en otro registro, utilizando el método GET RECORD FROM CLIPBOARD, como se muestra a continuación:
` Método OBTENER REGISTRO DESDE PORTAPAPELES ` OBTENER REGISTRO DESDE PORTAPAPELES ( Número ) ` OBTENER REGISTRO DESDE PORTAPAPELES ( Número de tabla ) C_LONGINT($1;$vlCampo;$vlCampoTipo;$vlPosCR;$vlPosColon) C_POINTER($vpTabla;$vpCampo) C_STRING(255;$vsDocNombre) C_BLOB($vxPortapapelesDatos) C_TEXT($vtPortapapelesDatos;$vtCampoDatos) ` Obtener un puntero hacia la tabla cuyo número se pasa como parámetro $vpTabla:=Table($1) ` Si hay un registro actual If ((Record number($vpTabla->)>=0) | (Is new record($vpTabla->))) Case of ` ¿El portapapeles contiene una imagen completa del registro? : (Pasteboard data size("4Drc")>0) ` Si es así, extraiga el contenido del portapapeles GET PASTEBOARD DATA("4Drc";$vxPortapapelesDatos) ` Nombre para el archivo scrap en la carpeta temporales $vsDocNombre:=Temporary folder+"Scrap"+String(1+(Random%99)) ` Borrar el archivo scrap si existe (Se debe hacer una prueba de error aquí) DELETE DOCUMENT($vsDocNombre) ` Guardar el BLOB en el archivo scrap BLOB TO DOCUMENT($vsDocNombre;$vxPortapapelesDatos) ` Abrir el archivo scrap SET CHANNEL(10;$vsDocNombre) ` Recibir el registro completo del archivo scrap RECEIVE RECORD($vpTable->) ` Cerrar el archivo scrap SET CHANNEL(11) ` No necesitamos más el archivo scrap DELETE DOCUMENT($vsDocNombre) ` ¿El portapapeles contiene TEXT? : (Pasteboard data size("TEXT")>0) ` Extraer el texto del portapapeles $vtPortapapelesDatos:=Get text from pasteboard ` Inicializar el número de campos a incrementar $vlCampo:=0 Repeat ` Buscar la línea de campo siguiente en el texto $vlPosCR:=Position(CR ;$vtPortapapelesDatos) If ($vlPosCR>0) ` Extraer la línea de campo $vtCampoDatos:=Substring($vtPortapapelesDatos;1;$vlPosCR-1) ` Si hay dos puntos ":" $vlPosColon:=Position(":";$vtCampoDatos) If ($vlPosColon>0) ` Tomar sólo los datos de campo (eliminar el nombre de campo) $vtCampoDatos:=Substring($vtCampoDatos;$vlPosColon+2) End if ` Incrementar el número de campo $vlCampo:=$vlCampo+1 ` El portapapeles puede contener más información de la que necesitamos... If ($vlCampo<=Count fields($vpTabla)) ` Obtener el tipo de campo GET FIELD PROPERTIES($1;$vlCampo;$vlCampoTipo) ` Obtener un puntero al campo $vpCampo:=Field($1;$vlCampo) ` Dependiendo del tipo de campo, copiar (o no) el texo de una manera apropiada Case of : (($vlCampoTipo=Is Alpha field ) | ($vlCampoTipo=Is Text )) $vpCampo->:=$vtCampoDatos : (($vlCampoTipo=Is Real ) | ($vlCampoTipo=Is Integer ) | ($vlCampoTipo=Is LongInt )) $vpCampo->:=Num($vtCampoDatos) : ($vlCampoTipo=Is Date ) $vpCampo->:=Date($vtCampoDatos) : ($vlCampoTipo=Is Time ) $vpCampo->:=Time($vtCampoDatos) : ($vlCampoTipo=Is Boolean ) $vpCampo->:=($vtCampoDatos="Sí") Else ` Pasar e ignorar los otros tipos de datos de campos End case Else ` Todos los campos han sido asignados, salir del bucle $vtPortapapelesDatos:="" End if ` Eliminar el texto que acaba de ser extraído $vtPortapapelesDatos:=Substring($vtPortapapelesDatos;$vlPosCR+Length(CR )) Else ` No se encontró un delimitador, salir del bucle $vtPortapapelesDatos:="" End if ` Repetir mientras tengamos datos Until (Length($vtPortapapelesDatos)=0) Else ALERT("El portapapeles no contiene datos que puedan pegarse como un registro.") End case End if
Ver también
CLEAR PASTEBOARD, SET PICTURE TO PASTEBOARD, SET TEXT TO PASTEBOARD.
Variables sistema
Si los datos en el BLOB se añaden correctamente al portapapeles, la variable sistema OK toma el valor 1; de lo contrario OK toma el valor 0 y se podría generar un error.
Manejo de errores
Si no hay suficiente memoria para añadir los datos del BLOB al portapapeles, se genera un error -108.