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

  #11
Antiguo 10 de febrero de 2024, 15:06
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@Paulo, se te habrá olvidado añadir la librería shell32.lib en tu proyecto, va dentro del ZIP

Veo que has puesto la directiva ALPHAL(WORD) porque el nombre de la función aparece en Camel-Case, pero sin la librería no va a compilar porque no sabe dónde está la función.

Si has añadido la librería y te sigue dando error, tienes que hacer REBUILD ALL para recompilarlo todo y funcionará.



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
  #12
Antiguo 11 de febrero de 2024, 10:08
Paulo
Forero Senior
Última Actividad 24.09.2026 19:31
Posts Posts: 101
Likes enviados Enviados: 25
Likes recibidos Recibidos: 33

Citación del post de Kuk Ver Mensaje
❞
@Paulo, se te habrá olvidado añadir la librería shell32.lib en tu proyecto, va dentro del ZIP

Veo que has puesto la directiva ALPHAL(WORD) porque el nombre de la función aparece en Camel-Case, pero sin la librería no va a compilar porque no sabe dónde está la función.

Si has añadido la librería y te sigue dando error, tienes que hacer REBUILD ALL para recompilarlo todo y funcionará.

Hola Kuk

Adicionei a livraria shell32.lib, fiz o rebuild all, mas o erro continua...
Archivos Adjuntos
Tipo de Archivo: zip DragDrop-kuk.zip (40,1 KB)Descargas: 25
Paulo is offline   Responder Con Cita
  #13
Antiguo 11 de febrero de 2024, 12:16
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@Paulo, es que la función DragAcceptFiles no es así, sólo lleva 2 parámetros, y tú le has añadido un parámetro demás y es por eso que no compila, debe ser así:

Código COBOL:
  1.      call "DragAcceptFiles" with stdcall using by value wsHwnd
  2.                                                by value pow-true

Y tú tienes 2 veces el pow-true:

Código COBOL:
  1.     call "DragAcceptFiles" with stdcall using by value wsHwnd
  2.                                               by value pow-true
  3.                                               by value pow-true.
  4.                                                      



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
  #14
Antiguo 12 de febrero de 2024, 11:19
Paulo
Forero Senior
Última Actividad 24.09.2026 19:31
Posts Posts: 101
Likes enviados Enviados: 25
Likes recibidos Recibidos: 33

Gracias Kuk,
Tanto verifiquei a rotina e não vi esse erro.
Paulo is offline   Responder Con Cita
  #15
Antiguo 12 de febrero de 2024, 12:50
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@Paulo, de nada compañero, ya nos cuentas y si puedes enséñanos cómo te ha quedado



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
  #16
Antiguo 12 de noviembre de 2024, 18:56
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

Hola , estoy implementado Arrastrar y soltar archivos (Drag and Drop) sin procedure-pointer
obteniendo la direccion de la funcion , la consulta cual seria la mejor forma de atrapar el nombre del archivo arrastrado , lo estoy haciendo con un cmtimer
pero no se si es la forma correcta
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  wsHwnd         pic s9(9) comp-5.
  5.  01  newWndProc     pic s9(9) comp-5.
  6.  01  OldWndProc     external pic s9(9) comp-5.
  7.  01  GWLP-WNDPROC   pic s9(9) comp-5 value -4.
  8.  01  hModule        pic s9(9) comp-5.
  9.  
  10.  PROCEDURE       DIVISION.      
  11.    
  12.                                                      
  13.                                                      
  14.                                                      
  15.      move "hwnd" of pow-self to wsHwnd.
  16.      move wsHwnd to  "Text" OF CmText1        
  17.  
  18.      call "GetModuleHandleA" with stdcall using by value 0 returning hModule
  19. *    DISPLAY "hModule: " , hModule.          
  20.      call "GetProcAddress" with stdcall using by value hModule
  21.                                               by content "_ProcDragFile@16" & X"00"
  22.                                               returning newWndProc.
  23.      
y la imagen con
Código COBOL:
  1.  01 EXP-FILE-NAME              PIC X(250) GLOBAL EXTERNAL. *> Retorno del Procedimiento    
  2.     *cmtimer*
  3.      IF EXP-FILE-NAME NOT = SPACES THEN
  4. *         display "Fichero TIMER: " EXP-FILE-NAME        
  5.           MOVE EXP-FILE-NAME TO "ImageName" OF CmImage1
  6.       END-IF.  
Saludos ....
fastpho is offline   Responder Con Cita
  #17
Antiguo 13 de noviembre de 2024, 12:56
Kuk
Administrador
Última Actividad 03.10.2026 00:00
Posts Posts: 2.500
Likes enviados Enviados: 1038
Likes recibidos Recibidos: 1207

@fastpho, no sé si he entendido bien tu pregunta, pero en este caso hacemos algo parecido a lo de buscar y traer enfrente un programa. Es decir que le pasamos una función como parámetro, la cual se ejecuta cuando ocurra el evento correspondiente. Con lo cual, no necesitas un Timer, puedes hacer lo que necesitas en la propia función "MyWndProc" que se ejecuta, como decía, automáticamente cuando ocurra el evento.



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
  #18
Antiguo 13 de noviembre de 2024, 13:35
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 , no me explicado bien , desde el ProcDragFile.cbl obtengo el archivo arrastrado
con la funcion DragQueryFileA :

Código COBOL:
  1.           IF  MSG = WM_DROPFILES
  2.              call "DragQueryFileA" with stdcall using by value WPARAM
  3.                                                       by value 0
  4.                                                       by reference dropFileName
  5.                                                       by reference fileSize
  6.                
  7.                    
  8.                       string dropFileName  
  9.                           delimited by x"00" into EXP-FILE-NAME
  10.                       end-string
  11.  
  12. *                    display "Fichero: " EXP-FILE-NAME        
  13. *                    display "fileSize: " fileSize *> SIEMPRE ZEROS        
  14.           END-IF.

en la variable dropFileName tengo el nombre del archivo
ahora como le paso ese dato al formulario que tiene en este caso un control
cmImage , la unica forma que encontre es metiendo un control timer en el formulario,
en la variable que se llama EXP-FILE-NAME que esta declarada como External Global en el
formulario y en el ProcDragFile.cbl como External

Luego en el timer tengo :
Código COBOL:
  1.       IF EXP-FILE-NAME NOT = SPACES THEN
  2.          *> display "Fichero TIMER: " EXP-FILE-NAME        
  3.           MOVE EXP-FILE-NAME TO "ImageName" OF CmImage1
  4.       END-IF.

Esta implementacion me esta funcionando , pero tengo el timer consumiendo cpu



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

@fastpho, ah vale, ya lo entiendo.

Pues mira, tengo una solución que no vas a entender pero funciona (en mi caso por lo menos).

En "Opened" de tu Form pones esto:

Código COBOL:
  1.  WORKING-STORAGE SECTION.  
  2.  01  nCMIMAGE1 IS EXTERNAL PIC S9(9) COMP-5.
  3.  ...
  4.  PROCEDURE       DIVISION.
  5.      ...
  6.      move CmImage1 to nCMIMAGE1

En "MyWndProc" añades esto en la Working:

Código COBOL:
  1. *>-------------------
  2.  01 POW-0000 PIC S9(18) COMP-5.
  3.  01 POW-0001 PIC S9(9) COMP-5.
  4.  01 POW-0002 PIC S9(9) COMP-5.
  5.  01 POW-0003 PIC S9(9) COMP-5.
  6.  01 POW-0004 PIC S9(9) COMP-5.
  7.  01 POW-0005 PIC S9(9) COMP-5.
  8.  01 POW-0006 PIC X(8192).
  9.  01 POW-0007 PIC S9(9) COMP-5.
  10.  
  11.  01 nCMIMAGE1 IS EXTERNAL PIC S9(9) COMP-5.

Y en la procedure, en el IF MSG = WM_DROPFILES le añades este código, no intentes entenderlo, simplemente pégalo tal cual:
Código COBOL:
  1.      ...
  2.      IF  MSG = WM_DROPFILES
  3.          call "DragQueryFileA" with stdcall using by value WPARAM
  4.                                                   by value 0
  5.                                                   by reference dropFileName
  6.                                                   by reference fileSize
  7.        
  8.          *> display "Fichero: " dropFileName
  9.         *>-------------
  10.          MOVE 117440513 TO POW-0000
  11.          MOVE 4 TO POW-0001
  12.          MOVE 0 TO POW-0002
  13.          MOVE 0 TO POW-0003
  14.          MOVE 0 TO POW-0004
  15.          MOVE 1 TO POW-0005
  16.          MOVE dropFileName TO POW-0006
  17.          MOVE 33636360 TO POW-0007
  18.          CALL "XPOW_INVOKE_BY_ID_2" USING VALUE nCMIMAGE1 REFERENCE POW-0000
  19.          VALUE POW-0001 POW-0002 POW-0003 POW-0004 POW-0005 POW-0007
  20.          REFERENCE POW-0006 END-CALL
  21.         *>-------------                                              
  22.      END-IF
  23.      ...

Rebuild ALL y ejecuta, a ver si funciona. Si no funciona, dime qué error te da.



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
  #20
Antiguo 13 de noviembre de 2024, 19:36
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 anduvo perfecto lo unico que añadi fueron los valores de :

Código COBOL:
  1.  
  2.  01 POW-0000 PIC S9(18) COMP-5.
  3.  01 POW-0001 PIC S9(9) COMP-5.
  4.  01 POW-0002 PIC S9(9) COMP-5.
  5.  01 POW-0003 PIC S9(9) COMP-5.
  6.  01 POW-0004 PIC S9(9) COMP-5.
  7.  01 POW-0005 PIC S9(9) COMP-5.
  8.  01 POW-0006 PIC X(8192).
  9.  01 POW-0007 PIC S9(9) COMP-5.
  10.  01 POW-0008 PIC S9(4) COMP-5.

Muchas Gracias

Saludos ...
fastpho is offline   Responder Con Cita
Respuesta


Herramientas

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