FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Error al copiar texto
Saludos compas del Club Delphi
Hace tiempo estaba desarrollando una aplicación que monitoreaba el portapapeles en busca de contenido apto para mi aplicación, pero al encontrar un error que jamás pude erradicar, me dí por vencido, ahora he retomado esta aplicación de nuevo, y e identifico más o menos por donde va el error, usé el truco 214 de Trucomania y un artículo que leí en la revista Síntesis no. 17 de Grupo Albor, lo que hago es que al crear el form registrarme para ver los mensajes del portapapeles;
al destruir el form, informar que salgo de la cadena de mensajes del portapapeles:
al detectar un cambio en la cadena del portapapeles trato el mensaje:
y al recibir el mensaje de que ha cambiado el portapapeles ejecuto lo siguiente Ahora algo importante: el error sucede aquí: Solo cuando estoy ejecutando algún programa de Office, por ejemplo Excel y solamente cuando efectúo una operación de arrastre y lo raro es que algunas veces aparece el mensaje de error en Office y otras en mi aplicación, el mensaje de error de Office es: "No se puede vaciar el portapapeles"y el que aparece en mi aplicación es: "Cannot open clipboard", lo que me hace pensar que al efectuar una operación de arrastre del contenido de algún documento de Office sucede lo siguiente:
El código de aquí es solo de prueba, una vez que funcione exitosamente lo implementaré en mi aplicación. Bueno, después de alargarme un poco con la explicación de mi problema me despido, enviando un saludo y un abrazo amistoso a todos los delphimaniacos de Club Delphi y agradeciendo de una vez a todos aquellos que me puedan ayudar. Gracias
__________________
Herr Heins Faust |
#2
|
||||
|
||||
La filosofía es la siguiente:
Cualquier programa puede registrarse como Visor del portapapeles. Cuando el usuario copia algo en el portapapeles, windows mira quien es el primer programa "visor del portapapeles" (obviamente el programa de windows) y le pasa un mensaje indicando que el contenido del portapapeles ha cambiado. Ese programa, debe continuar la cadena, es decir, seguir informando al resto de programas que son visores del portapapeles del cambio surgido. Por tanto tenemos que: - Registrar nuestro programa para que capture cosas del Portapapeles automaticamente, y guardar quien es el siguiente programa "visor del portapapeles". Además debemos quitarnos de esa lista al cerrar nuestro programa:
- Obviamente necesitamos responder cuando cambie el portapapeles:
El error que yo veo, es que la linea tienes que ponerlo al final de la rutina ¿por qué?, porque un programa "visor del portapapeles" puede cambiar el contenido del mismo, y si lo hace, tu línea está desfasada con el contenido real del portapapeles. Es más yo lo modificaba y solo ponía esto:
Tu procedimiento WMChangeCBCHain creo que es inconsistente, simplemente elimínalo. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
||||
|
||||
¿y luego cómo sé cuál es el siguiente visor?
Gracias por tu respuesta... pero...
Cita:
__________________
Herr Heins Faust |
#4
|
||||
|
||||
Hola,
Cita:
Cita:
|
#5
|
||||
|
||||
Continuo con el error en office
Gracias por sus respuestas camaradas, aunque he usado la solución de Lepe han continuado los errores en Office, por lo que yo creo que la solución es en saber si algún otro programa ha bloqueado temporalmente el portapapeles, pues así antes de extraer el contenido del portapapeles puedo preguntar si está disponible, y evitar el error de Office.
De nuevo gracias por su ayuda y les mando un afectuoso saludo.
__________________
Herr Heins Faust |
#6
|
||||
|
||||
Te propongo una solución, no utilizar la unit clipbrd y copiar el contenido del portapapeles usando solo funciones de la API. Para copiar el texto podemos usar una función como esta:
La funcion anterior intentara copiar el texto del portapapeles, si no lo consigue devolvera una cadena vacia, pero no mostrara ningun error. Asi que podriamos utilizarla de la siguiente manera:
¿Que te parece? por lo menos a mi ya no me sale ningún error al arrastrar en excel. |
#7
|
||||
|
||||
Tengo un programa como he dicho, y me lee todo el contenido cada vez que se copia algo. Uso office 2002.
En casos de arrastrar y soltar, no me lee el portapapeles, ya no se "copia nada en esos momentos", incluso arrastrando desde excel a word y viceversa. Puede que un office de versión superior esté "haciendo virguerías". Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
copiar texto sin formato en un TRichEdit!!!! | aranel | OOP | 1 | 20-12-2005 19:24:17 |
Copiar texto en RichEdit | darkerbyte | Varios | 4 | 16-11-2005 01:37:17 |
Copiar el texto de un RichEdit | soul6301 | Varios | 5 | 11-11-2005 03:31:24 |
Copiar las columnas en un archivo de texto | Paulina | DelphiPACK | 0 | 08-10-2004 18:54:07 |
Copiar texto de un RichEdit a otro | SCH | Varios | 2 | 11-08-2003 08:16:26 |
|