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
[Compilador] Drag-and-drop de Objetos Joseg PowerCOBOL (ActiveX, v4 - v11) 1 1 de septiembre de 2023 22:27

Respuesta
 
Herramientas

  #21
Antiguo 13 de noviembre de 2024, 20:04
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@fastpho, sí, efectivamente se me han olvidado las variables en la Working de "MyWndProc", acabo de editar el post original

Me alegro de que te haya funcionado!

P.S. a @Nitzer le va a gustar todo esto



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
  #22
Antiguo 15 de noviembre de 2024, 09:31
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@fastpho, se me ha ocurrido una manera más elegante de hacerlo.

En "Opened" de tu form pones:
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  imgControl     pic s9(9) comp-5 is external.
  3.  PROCEDURE       DIVISION.
  4.  
  5.      move CmImage1 to imgControl
  6.    

En "MyWndProc" haces esto:

Código COBOL:
  1.  IDENTIFICATION DIVISION.
  2.  PROGRAM-ID. "MyWndProc".
  3.  ENVIRONMENT DIVISION.
  4.  CONFIGURATION   SECTION.
  5.  SPECIAL-NAMES.
  6.  REPOSITORY.
  7.      CLASS COM AS "*COM"
  8.      .
  9.  DATA DIVISION.
  10.  WORKING-STORAGE SECTION.  
  11. ...
  12.  01  imgControl     pic s9(9) comp-5 is external.
  13.  01  comClass      object reference COM.
  14. ...
  15.  
  16.      IF  MSG = WM_DROPFILES        
  17.          call "DragQueryFileA" with stdcall using by value WPARAM
  18.                                                   by value 0
  19.                                                   by reference dropFileName
  20.                                                   by reference fileSize
  21.          
  22.          if  comClass = null
  23.              call "POWERCONVTOCOM" USING imgControl RETURNING comClass
  24.          end-if
  25.          
  26.          invoke comClass "set-ImageName" using dropFileName
  27.      END-IF
  28.          

A ver qué tal, a mi me funciona. Y el código me gusta más, porque el CALL a "XPOW-..." es un poco chapuza.

[HR][/HR]
El ejemplo limpio queda así:

"Opened" del form:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  wsHwnd         pic s9(9) comp-5.
  5.  01  ptrMyWndProc   procedure-pointer.
  6.  01  newWndProc redefines ptrMyWndProc pic s9(9) comp-5.
  7.  
  8.  01  OldWndProc     is external pic s9(9) comp-5.
  9.  
  10.  01  GWLP-WNDPROC   pic s9(9) comp-5 value -4.
  11.  
  12.  01  imgControl     pic s9(9) comp-5 is external.
  13.  PROCEDURE       DIVISION.
  14.  
  15.      move CmImage1 to imgControl
  16.          
  17.      set ptrMyWndProc to entry "MyWndProc@16"
  18.      
  19.      move "hwnd" of pow-self to wsHwnd
  20.      
  21.      call "GetWindowLongA" with stdcall using by value wsHwnd
  22.                                               by value GWLP-WNDPROC
  23.                                               returning OldWndProc
  24.                                              
  25.      call "SetWindowLongA" with stdcall using by value wsHwnd
  26.                                               by value GWLP-WNDPROC
  27.                                               by value newWndProc
  28.  
  29.      call "DragAcceptFiles" with stdcall using by value wsHwnd
  30.                                                by value pow-true
  31.                                                
  32.      

"MyWndProc":
Código COBOL:
  1.  IDENTIFICATION DIVISION.
  2.  PROGRAM-ID. "MyWndProc".
  3.  ENVIRONMENT DIVISION.
  4.  CONFIGURATION   SECTION.
  5.  SPECIAL-NAMES.
  6.  REPOSITORY.
  7.      CLASS COM AS "*COM"
  8.      .
  9.  DATA DIVISION.
  10.  WORKING-STORAGE SECTION.  
  11.  01  OldWndProc     IS  EXTERNAL PIC S9(9) COMP-5.
  12.  
  13.  
  14.  01  WM_DROPFILES   PIC  S9(9) COMP-5 VALUE H"0233".  
  15.  
  16.  01  P1                   POINTER.
  17.  01  HWND REDEFINES P1    PIC S9(9) COMP-5.
  18.  01  P2                   POINTER.
  19.  01  MSG  REDEFINES P2    PIC  9(9) COMP-5.
  20.  01  P3                   POINTER.
  21.  01  WPARAM REDEFINES P3  PIC S9(9) COMP-5.
  22.  01  P4                   POINTER.
  23.  01  LPARAM REDEFINES P4  PIC S9(9) COMP-5.
  24.  
  25.  01  dropFileName         pic x(250).
  26.  01  fileSize             pic 9(4) comp-5.
  27.  
  28.  01  imgControl     pic s9(9) comp-5 is external.
  29.  01  comClass       object reference COM.
  30.  
  31.  LINKAGE SECTION.
  32.  77  PARM1                PIC S9(9) COMP-5.
  33.  77  PARM2                PIC  9(9) COMP-5.
  34.  77  PARM3                PIC S9(9) COMP-5.
  35.  77  PARM4                PIC S9(9) COMP-5.
  36.  
  37.  PROCEDURE DIVISION WITH STDCALL USING PARM1 PARM2 PARM3 PARM4.
  38.      
  39.      MOVE FUNCTION ADDR(PARM1) TO P1
  40.      MOVE FUNCTION ADDR(PARM2) TO P2
  41.      MOVE FUNCTION ADDR(PARM3) TO P3
  42.      MOVE FUNCTION ADDR(PARM4) TO P4
  43.      
  44.      IF  MSG = WM_DROPFILES        
  45.          call "DragQueryFileA" with stdcall using by value WPARAM
  46.                                                   by value 0
  47.                                                   by reference dropFileName
  48.                                                   by reference fileSize
  49.          
  50.          
  51.          if  comClass = null            
  52.              call "POWERCONVTOCOM" USING imgControl RETURNING comClass
  53.          end-if
  54.          
  55.          invoke comClass "set-ImageName" using dropFileName
  56.      END-IF
  57.          
  58.      CALL "CallWindowProcA" WITH STDCALL USING BY VALUE OldWndProc
  59.                                                BY VALUE HWND
  60.                                                BY VALUE MSG
  61.                                                BY VALUE WPARAM
  62.                                                BY VALUE LPARAM  
  63.      
  64.      GOBACK
  65.      .
  66.      



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
  #23
Antiguo 15 de noviembre de 2024, 14:10
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 30.09.2026 19:12
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@Kuk me funciona esta opcion tambien sin usar procedure-pointer, y es mas elegante digamos esta opcion,
lo unico es que tuve que modificar algunas lineas por que en la version 5.0 de PowerCobol para acceder
a objetos se debe usar :
Código:
REPOSITORY.
     CLASS OLE AS "*OLE"
     .

y para poder convertir la referencia a la Clase Ole
se debe usar :

Código COBOL:
  1.  CALL "POWERCONVTOOLE" USING ....

Muchas Gracias por tu tiempo
Saludos

[ATTACH=CONFIG]1010[/ATTACH]

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  FOROCOBOL.png
Vistas: 34
Tamaño:  91,4 KB  
fastpho is offline   Responder Con Cita
  #24
Antiguo 15 de noviembre de 2024, 15:36
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@fastpho, declarando "OLE" también fucniona en PowerCOBOL v9 y v10.


Lo que no me gusta es que el CmImage de Power no funciona con nada salvo *.JPG y en un formato concreto de JPEG, que los hay diferentes y sigue siendo JPEG pero no los muestra todos. De GIF o PNG ya no digo nada... Es muy pobre este control.



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
  #25
Antiguo 15 de noviembre de 2024, 15:46
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@fastpho, madre mía el tonto que hemos hecho.........

Acabo de fijarme y CmImage tiene una propiedad llamada DropEnabled, que si la marcas, no hace falta ni WinAPI ni COM/OLE, funciona solito
[ATTACH=CONFIG]1011[/ATTACH]

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  CmImage_dropEnabled.png
Vistas: 36
Tamaño:  9,6 KB  



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
  #26
Antiguo 15 de noviembre de 2024, 16:25
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 30.09.2026 19:12
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@Kuk , si lo probe tildando la opcion DropEnabled y tambien funciona sin la
necesidad de OLE/API , y como decis lo malo del cmimage no toma .png por ejemplo
u otros formatos mas modernos

De todas maneras , DragQueryFileA, sirve por ejemplo para arrastrar archivos en general
a un listview u otro objeto , tiene su sentido todo esto, me parece a parte de arrastrar imagenes.


Saludos...
fastpho is offline   Responder Con Cita
  #27
Antiguo 15 de noviembre de 2024, 18:17
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@fastpho, sí efectivamente sirve para muchas cosas, pero para el propósito inicial, con un solo clic nos valía

Pero bueno, así hemos aprendido cosas nuevas también



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
  #28
Antiguo 27 de noviembre de 2024, 03:18
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 01.10.2026 22:19
Posts Posts: 458
Likes enviados Enviados: 271
Likes recibidos Recibidos: 243

Hola Amigos: ahi estuve probando esto y está espectacular, Felicitaciones.

Ahora una pregunta, esto mismo se puede hacer en RMCobol con WOW?

Saludos

Fito...
Fito is offline   Responder Con Cita
  #29
Antiguo 27 de noviembre de 2024, 18:10
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@Fito, yo nunca he tenido RM así que no te puedo decir nada al respecto. Habrá que ir probando y a ver, lo mismo lo hacemos funcionar.

No sé si RM permite llamadas a la WinAPI (o cualquier librería C exterior), si es así, lo más seguro es que lo vamos a poder hacer. Es decir, lo principal, que es el SubClassing de la WinAPI.
Luego lo de invocar algo desde la función, será por OLE u otra cosa, es lo de menos. Encontraremos también la manera de hacerlo.

Te propongo que hagas pruebas, si te salta algún error o no funciona de manera esperada, lo tratamos juntos y vamos viendo
Lo único, si lo hacemos que sea en el apartado de RM, no aquí, para no mezclar las churras con las merinas



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
  #30
Antiguo 28 de noviembre de 2024, 12:20
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 01.10.2026 22:19
Posts Posts: 458
Likes enviados Enviados: 271
Likes recibidos Recibidos: 243

Hola Carlitos:

En realidad yo no programo en RM, fue un colega que le mostré esto y como él tiene todo en RM me preguntó y trasladé su inquietud. Te digo más, ni siquiera tengo RM instalado en, mi máquina.

Gracias por responder.

Abrazo...

Fito...
Fito 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 06:28.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.