Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Duda] COPIAR UN FICHERO SECUENCIAL EN OTRO moraber RM/COBOL 1 6 de julio de 2021 11:10
[Compilador] Copiar Colar (Copy and Paste) diegodm PowerCOBOL y COM/OLE 1 27 de noviembre de 2020 19:38
[Compilador] Copiar / colar em aplicações powercobol LUIZ ANTONIO DE OLIVEIRA PowerCOBOL (ActiveX, v4 - v11) 5 15 de marzo de 2019 04:24
[Compilador] Problema Copiar/Pegar en Windows 7 x64 Joseg PowerCOBOL (ActiveX, v4 - v11) 7 11 de octubre de 2017 16:41
[Sintaxis] Copiar archivos en RED LAN Roger PowerCOBOL (ActiveX, v4 - v11) 6 27 de mayo de 2017 09:38

Respuesta
 
Herramientas

  #1
Antiguo 20 de febrero de 2015, 12:45
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492
Predeterminado Copiar al portapapeles
0 Inactivo Inactivo

¿ Alguien sabe el código para poner un botón de Copiar al Portapapeles ?

Gracias

Un saludo.-
Josber is offline   Responder Con Cita
  #2
Antiguo 20 de febrero de 2015, 13:14
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

La cosa no es tan facil como parece. Yo lo tengo hecho en un programa, pero lo que copio es texto plano que es facil de hacer. Luego si quieres copiar texto fon formato, imagebn, documento etc. ya se complica mas la cosa.

Se hace mediante WinAPI. Si te vale texto plano, esta tarde miro en casa el ejemplo y te lo pego aqui.


P.D. Por cierto, entiendo que no es el caso pero si necesitas copiar pegar datos solo dentro de tu aplicacion, puedes usar variables globales o incluso controls con la propiedad "Visible" desmarcada.
Kuk is offline   Responder Con Cita
  #3
Antiguo 20 de febrero de 2015, 13:43
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Gracias Kuk, es texto plano puro y duro, y no es para uso interno, si no para pegarlo al wordpad, etc.

Un saludo.-
Josber is offline   Responder Con Cita
  #4
Antiguo 20 de febrero de 2015, 18:43
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  WS-HWND     PIC S9(9) COMP-5.
  5.  01  WM_CUT               PIC S9(9) COMP-5 VALUE H"0300".  
  6.  01  WM_COPY              PIC S9(9) COMP-5 VALUE H"0301".  
  7.  01  WM_PASTE             PIC S9(9) COMP-5 VALUE H"0302".  
  8.  PROCEDURE       DIVISION.
  9.      
  10.      MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF
  11.     *>--------------------------------------------
  12.      MOVE "hwnd" OF RichTextBox1 TO WS-HWND
  13.          
  14.      CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HWND
  15.                                             BY VALUE WM_COPY
  16.                                             BY VALUE 0
  17.                                             BY VALUE 0
  18.      CANCEL "SendMessageA"
  19.    
  20.      *>--------------------------------------------
  21.      MOVE POW-MP-DEFAULT TO "MousePointer" OF POW-SELF
  22.      
Kuk is offline   Responder Con Cita
  #5
Antiguo 20 de abril de 2015, 17:20
Adrianeloy
Forero Junior
Última Actividad 24.11.2020 17:31
Posts Posts: 39
Likes enviados Enviados: 29
Likes recibidos Recibidos: 34

Alguien tendrá el codigo contrario, o sea para leer el contenido del portapapeles texto plano (o volcarlo a una variable de cobol)?
Ya se que es mucho pedir, pero...
A alguien le habrá quedado el codigo de la llamada para PowerCobol V.3?
Adrianeloy is offline   Responder Con Cita
  #6
Antiguo 20 de abril de 2015, 18:48
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

adrianeloy, el codigo de la accion contraria seria sustituir WM_COPY por WM_PASTE
Para PowerCOBOL 3 no tengo ni idea.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #7
Antiguo 21 de diciembre de 2015, 19:40
Galileo
Forero Junior
Última Actividad 22.01.2021 11:39
Posts Posts: 38
Likes enviados Enviados: 20
Likes recibidos Recibidos: 41

Citación del post de Adrianeloy Ver Mensaje
Alguien tendrá el codigo contrario, o sea para leer el contenido del portapapeles texto plano (o volcarlo a una variable de cobol)?
Ya se que es mucho pedir, pero...
A alguien le habrá quedado el codigo de la llamada para PowerCobol V.3?
No me cabe duda de que se debe poder hacer también en PC3. La cosa está en saber cómo se obtiene el identificador (el handle) del componente. Tal vez sea realizando SETFOCUS al control y luego invocando una función del API de Windows que nos devuelva dicho handle.

El caso es que he encontrado un sistema más sencillo que, eso sí, requiere de un programa externo. Se trata de una pequeñísima utilidad que envía pulsaciones simuladas al sistema operativo (concretamente Sendkeys, en http://orlando.mvps.org/SendKeysMore.asp). Es gratuito y fácil de utilizar. Aquí te pongo un ejemplo:

Código COBOL:
  1.     CALL SETFOCUS OF EDIT1.        
  2.     CALL EXECAPL OF SHEET1 USING "SendKeys.exe 0 0 ""Prueba de copy y paste"" ""^C"" ".

Los dos ceros indican, el primero, el número de segundos (o fracción) que ha de esperar antes de enviar la pulsación simulada (una vez que la ventana del programa indicado en el tercer parámetro esté ya con el foco); el segundo, el número de segundos que ha de esperar hasta desistir, si no encuentra la ventana. En el ejemplo, "Prueba de copy y paste" es el título de la ventana de mi programa PC3, y "^C" es la combinación de teclas que se envía al sistema operativo (en este caso, CTRL-C, es decir, el atajo que se usa para copiar al portapapeles).

Lo bueno es que simula cualquier combinación de teclas con cualquier programa. Lo veo muy práctico.

Y un quebradero de cabeza que te quitas.
Galileo is offline   Responder Con Cita
  #8
Antiguo 21 de diciembre de 2015, 21:58
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Galileo, Adrianeloy, echádle un vistazo aquí: Obtener el Handle (HWND) de un control - COBOL Foro



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #9
Antiguo 22 de diciembre de 2015, 09:15
Galileo
Forero Junior
Última Actividad 22.01.2021 11:39
Posts Posts: 38
Likes enviados Enviados: 20
Likes recibidos Recibidos: 41

Vale, ya he probado el código Kuk. Pero no consigo que funcione el copy.

Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA        DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  WS-HWND-P  PIC S9(9) COMP-5.
  5.  01  WS-HWND-C  PIC S9(9) COMP-5.
  6.  01  WS-TEXTO   PIC X(50).
  7.  01  WM_CUT     PIC S9(9) COMP-5 VALUE 768.  
  8.  01  WM_COPY    PIC S9(9) COMP-5 VALUE 769.  
  9.  01  WM_PASTE   PIC S9(9) COMP-5 VALUE 770.  
  10.  
  11.  PROCEDURE DIVISION.
  12.      CALL SETFOCUS OF EDIT1. <* Este es el control con el texto que quiero copiar
  13.      CALL "GetActiveWindow" WITH STDCALL.
  14.      MOVE PROGRAM-STATUS TO WS-HWND-P.
  15.  
  16.      CALL "GetDlgItem" WITH STDCALL USING BY VALUE WS-HWND-P BY VALUE 1.
  17.      MOVE PROGRAM-STATUS TO WS-HWND-C.
  18.  
  19.      CALL "GetDlgItemTextA" WITH STDCALL USING BY VALUE WS-HWND-P BY VALUE 1 BY REFERENCE WS-TEXTO BY VALUE 50.
  20.      CALL DISPLAYMESSAGE OF SHEET1 USING WS-TEXTO. <* Muestra el texto del control
  21.  
  22.      CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HWND-C BY VALUE WM_COPY BY VALUE 0 BY VALUE 0.

Abro el bloc de notas y, cuando intento pegar el contenido del portapapeles, este aparece como vacío.
Galileo is offline   Responder Con Cita
  #10
Antiguo 22 de diciembre de 2015, 09:23
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Galileo, imagino que tu EDIT1 no tiene ID = 1. Si primero has puesto un botón y luego el EDIT, el último tendrá ID = 2. El ID es el orden del TAB.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:46.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.