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
[Sintaxis] ODBC - cambiar el "path" de una base de datos Hrmcobol PowerCOBOL (ActiveX, v4 - v11) 9 15 de noviembre de 2022 20:24
China quiere lanzar una "luna artificial" en 2020 Kuk Charladero - espacio libre 0 20 de octubre de 2018 21:52
[Sintaxis] Error MOVE "Parent" de un nodo "Root" en TreeView dmosca PowerCOBOL (ActiveX, v4 - v11) 1 23 de agosto de 2017 08:47
[Sintaxis] Filtro con CmEdit y evento "change" Roger PowerCOBOL (ActiveX, v4 - v11) 4 26 de febrero de 2017 14:09
[Sintaxis] Cambiar variable de entorno "Path" en ejecución Recato53 PowerCOBOL (ActiveX, v4 - v11) 7 10 de agosto de 2015 14:25

Respuesta

  #1
Antiguo 15 de enero de 2023, 20:27
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 Hacer referencia a un "Name" con una variable
0 Inactivo Inactivo

Estoy intentando a través de una variable, hacer referencia al Nombre (propiedad 'Name') de un CONTROL, por ejemplo, suponiendo que tengo dos controles en un form, que uno se llama NOMBRE y el otro se llama APELLIDOS, la codificación sería

Código COBOL:
  1. WORKING-STORAGE SECTION.
  2. 01  CONTROL_NAME                PIC X(32) VALUE SPACES.
  3. 01  FLAG                                 PIC 9.
  4.        .
  5.        .
  6.        .
  7. PROCEDURE DIVISION.
  8. INICIO-000.
  9.        .
  10.        .
  11.        .
  12.      IF FLAG = 0
  13.          MOVE "Name" OF NOMBRE TO CONTROL_NAME
  14.      ELSE
  15.          MOVE "Name" OF APELLIDOS TO CONTROL_NAME
  16.     END-IF.
  17.        .
  18.        .
  19.        .
  20.     MOVE SPACES TO "Text" OF CONTROL_NAME.

Pero al compilar me da el error
F_PRUEBA PRUEBA(182) : JMN2505I-S 'TO' must be specified in the MOVE statement. 'TO' is assumed.

Por lo que presupongo que, el error es que no tiene ni idea de qué control estoy usando, ya que la sintaxis, está bien

¿Hay alguna manera de hacerlo?

Mil gracias y un salu2.-
Josber is offline   Responder Con Cita
  #2
Antiguo 16 de enero de 2023, 09:36
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber,

Código COBOL:
  1.     MOVE SPACES TO "Text" OF CONTROL_NAME. *> ERROR!!!!
  2.     MOVE SPACES TO CONTROL_NAME.

Se te están mezclando ya los controles del Power y las variables Cobol

O sea que tu problema está ne la línea 20



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
  #3
Antiguo 16 de enero de 2023, 10:42
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

@Kuk, no, no está mal, yo no quiero vaciar la variable CONTROL_NAME, quiero vaciar el control cuyo nombre es el que hay en la variable CONTROL_NAME, (pongo vaciar, pero podría ser, usar el 'hwnd', tipo de letra, colores, etc, cualquier propiedad del control), o sea, unas veces querré vaciar el control Nombre y otras veces el control Apellidos, dependiendo del valor que tenga CONTROL_NAME.

Un salu2.-
Josber is offline   Responder Con Cita
  #4
Antiguo 16 de enero de 2023, 11:15
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber, amigo, ya lo pillo. Pues esto no lo puedes hacer como tu quieres... pero sí de esta manera:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  COBJECT         OBJECT REFERENCE POW-COBJECT.
  5.  01  OBJETO          OBJECT REFERENCE COM.
  6.  
  7.  01  contenido   pic x(50).
  8.  
  9.  PROCEDURE       DIVISION.
  10.        
  11.      move spaces to contenido
  12.        
  13.      move CmText1 to COBJECT
  14.      
  15.      CALL "POWERCONVTOCOM" USING COBJECT RETURNING OBJETO
  16.      
  17.      invoke OBJETO "SET-Text" using contenido
  18.      



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
  #5
Antiguo 16 de enero de 2023, 11:50
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, que mal, no me sirve porque, lo que he puesto es un ejemplo 'al vuelo', realmente lo necesito con otras propiedades, como sería usar el hwnd, color, foco, etc. Imagínate que son varios controles ListView, y que dependiendo de unos parámetros externos, necesite poner un checkbox en ciertos ListView, para ello, necesito saber el hwnd de ese control en concreto

Éste, sería el código que funciona perfectamente

Código COBOL:
  1.      MOVE "hWnd" OF VIEW2 TO WS-HANDLE.
  2.      CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
  3.                                             BY VALUE LVM-SETEXTENDEDLISTVIEWSTYLE
  4.                                             BY VALUE LVS-EX-CHECKBOXES
  5.             .
  6.             .
  7.             .

y éste el que quiero usar, pero que no funciona

Código COBOL:
  1.      EVALUATE OPC
  2.                      WHEN 1
  3.                                MOVE "View1" TO CONTROL_NAME
  4.                      WHEN 2
  5.                                MOVE "View2" TO CONTROL_NAME
  6.             .
  7.             .
  8.             .
  9.      END-EVALUATE.
  10.  
  11.  
  12.      MOVE "hWnd" OF CONTROL_NAME TO WS-HANDLE.
  13.      CALL "SendMessageA" WITH STDCALL USING BY VALUE WS-HANDLE
  14.                                             BY VALUE LVM-SETEXTENDEDLISTVIEWSTYLE
  15.                                             BY VALUE LVS-EX-CHECKBOXES
  16.             .
  17.             .
  18.             .

El tema está en que son muchos controles y esto ahorraría escribir mucho, ya no para el ListView, sino para otros controles que he de usar que no tienen nada que ver con un ListView.

Muchas gracias.-
Josber is offline   Responder Con Cita
  #6
Antiguo 16 de enero de 2023, 13:30
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber, cómo que no? Sí que funciona!

Código COBOL:
  1.  01  contenido   pic x(50).
  2.  01  hwnd        pic s9(9) comp-5.
  3.  01  WM_SETTEXT  pic s9(9) comp-5 value H"000C".
  4.  PROCEDURE       DIVISION.
  5.        
  6.        move "Hola Josber" to contenido
  7.        
  8.      move CmText1 to COBJECT
  9.      
  10.      CALL "POWERCONVTOCOM" USING COBJECT RETURNING OBJETO
  11.      
  12.      invoke OBJETO "GET-hwnd" returning hwnd
  13.  
  14.      call "SendMessageA" with stdcall using by value hwnd
  15.                                             by value WM_SETTEXT
  16.                                             by value 0
  17.                                             by reference contenido
  18.  



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 16 de enero de 2023, 13:38
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber, también tienes la siguiente opción que se me acaba de ocurrir y me parece que es lo que estabas buscando exactamente:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  miTextBox OBJECT REFERENCE AMixed-DCmTextbox-Main-with-DCfGroupItem-Main.
  5.  PROCEDURE       DIVISION.
  6.      
  7.      move CmText1 to miTextBox
  8.      
  9.      move "Hola Josber" to "Text" OF miTextBox
  10.          

Para ver qué clase debes indicar en OBJECT REFERENCE, tienes que mirar en la carpeta DEBUG el fichero MainForm.prc y dentro buscar el nombre del control, por ejemplo CmText1 y luego copiar y usar la clase en tu código. Quiere decir que todos los CmText tendrán esta clase en referencia. Podrías hasta hacer un OCCURS tipo:

Código COBOL:
  1.  01  campoDeTexto.
  2.      05  misTextBox OCCURS 100 OBJECT REFERENCE AMixed-DCmTextbox-Main-with-DCfGroupItem-Main.



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
  #8
Antiguo 16 de enero de 2023, 19:49
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

@Kuk, si uso la primera opción, (porque la segunda no me gusta, además que es un poco problemática porque los controles están en un Array de controles), y la defino como me has puesto

Código COBOL:
  1.  01  COBJECT                OBJECT REFERENCE POW-COBJECT.
  2.  01  OBJETO                 OBJECT REFERENCE COM.

Así, tal y como está, en 01 OBJETO, al compilar me da el error:

JMN5100I-S The class-name specified in the USAGE OBJECT REFERENCE clause is invalid. The class-name is ignored.

ya sé que no sería el caso pero, si defino en REPOSITORY

Código COBOL:
  1.      CLASS COM AS "*COM".

entonces me da el error:

error LNK2001: unresolved external symbol _XXXXXXXXXXX

donde _XXXXXXXXXXX, es el nombre de la subrutina de la PROCEDURE donde están definidas esas variables.

¿Dónde puede estar el problema?
Josber is offline   Responder Con Cita
  #9
Antiguo 16 de enero de 2023, 20:41
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Josber, la segunda opción no tiene por qué ser un array. Puedes usar una sola variable por tipo de componente visual. Así que bueno, en realidad es lo que querías en principio. Y mientras que no uses componentes distintos una sola variable te vale.

En cuanto al problema de compilación de la primera opción. Es el error de que te falta la librería correspondiente. En caso de mi ejemplo, SendMessageA es la librería User32.lib.

A mi el ejemplo del código me compila y funciona correctamente.

Y es verdad que tienes que añadir lo de

Código COBOL:
  1.      CLASS COM AS "*COM".



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
  #10
Antiguo 17 de enero de 2023, 12:12
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

Citación del post de Kuk Ver Mensaje
@Josber,

En cuanto al problema de compilación de la primera opción. Es el error de que te falta la librería correspondiente. En caso de mi ejemplo, SendMessageA es la librería User32.lib.
La verdad es que tengo otros programas que sí utilizan SendMessageA, (para el tema de poner y quitar líneas, checkbox, etc. en un listview, se hace todo a través de esa llamada), y no tienen incluida la librería User32.lib, pero, de todas maneras, éste sí que la tiene incorporada, porque si no, con el tema del tooltip "casero", no funcionaría y me daría error al compilar, para ser exactos, están incluidas esa librería y advapi32.lib

[ATTACH=CONFIG]876[/ATTACH]
Imágenes Adjuntas
 
Josber 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 15:44.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.