Página 1 de 1

Copiar y Pegar

Publicado: Jue Jul 07, 2016 11:56 pm
por ddupre
Estimados,
Se me presenta esta situación y no se por donde comenzar.

Tengo una pequeñisima aplicación que lo único que hace es presentar un TDBBrowse en un Form.
Esa apicación la ejecuto automáticamente cuando un usuario se logea a una sesión de escritorio remoto, de forma tal que en esa sesión solo se puede ver el browse con sus columnas y filas, recorrerlas y ordenarlas ascendente o descendentemente.

Pues bien, el cliente me solicita que pueda marcar las celdas que le interesan (filas enteras, una o varias) y poder copiarlas y pegarlas por ejemplo en una planilla excel que tenga abierta en su equipo. El inconveniente que tengo está en que no se como implementar la opción de copiar y pegar. Como pequeña aclaración tengo bien presente que debo configurar la sesión de RDP para que comparta el "portapapeles" de manera de poder "traer" datos hacia el equipo cliente.

He buscado en el foro con diferentes filtros (copiar y pegar, cut&paste, etc.) alguna ayuda pero no e conseguido nada, tambien revisé los ejemplos de Xailer y no tuve suerte, seguramente porque no busque correctamente.

Necesitaría de la amabilidad de alguien para que me oriente como empezar en ese tema.

Desde ya muchas gracias
Daniel

Re: Copiar y Pegar

Publicado: Vie Jul 08, 2016 12:54 pm
por ignacio
Buenos días,

Primeramente deberá utilizar el estilo TBrowse:nMarqueeStyle = bmHIGHLROWMS. De esta forma el usuario podrá marcar las filas que necesite copiar. Una vez mercadas deberá tener un botón para generar un archivo de texto con dichas filas seleccionadas. Los números de registro de las filas seleccionadas los puede recuperar con la matriz TBrowse:aSelected que le devuelve una matriz con los recnos() del origen de datos.

Para crear la cadena de texto le recomiendo que ponga un tabulador (Chr(9)) entre cada campo y luego un cambio de línea (CRLF) entre cada registro. De esta forma Excel es capaz de pegarlo correctamente. A continuación simplemente use este código, donde 'cMiCadenaDeTexto' es la cadena donde ha incluido toda la información.

Código: Seleccionar todo

 WITH OBJECT TClipBoard():Create( Self )
  IF :Open()
    :Empty()
    :SetText( cMiCadenaDeTexto )
  ENDIF
  :End()
END
Gracias por tener una suscripción activa con nosotros. Ha sido un placer poder ayudarle.

Un saludo

Re: Copiar y Pegar

Publicado: Vie Jul 08, 2016 3:57 pm
por ddupre
Ignacio,
Muchas gracias por la rápida respuesta, trabajaré en ello tal cual su ayuda y le comentaré como me fue.

Un saludos
Daniel

Re: Copiar y Pegar

Publicado: Mar Jul 19, 2016 12:23 am
por ddupre
Ignacio,
Ya tengo funcionando correctamente la opción de copiar y pegar, no obstante quisiera consultarle lo siguiente:
Ud. me suguiere que cree un archivo de texto lo cual hice y se genera correctamente, pero ¿cuál es la función de dicho archivo?, dado que el método :SetText() de la clase TclipBoard, coloca en el portapapeles la cadena que se le pase como parámetro.

Ante la duda de porqué generar el txt hice dos pruebas, primeramente le pasé como parámetro el nombre del archivo y lo que copia al portapeles es el propio nombre, y segundo le pasé la cadena que se genera "en memoria" dentro de una variable de texto y ahí sí, puede copiar correctamente los datos seleccionados.

¿Podra haber algún problema si la cantidad de datos a copiar es muy grande?

Desde ya muchas gracias
Daniel

Re: Copiar y Pegar

Publicado: Mar Jul 19, 2016 10:27 am
por ignacio
Buenos días,

Quise decir cadena de texto.

Un saludo

Re: Copiar y Pegar

Publicado: Mié Jul 20, 2016 4:23 am
por ddupre
Quedó claro.

Muchas gracias

Saludos
Daniel