PDA

Ver la Versión Completa : [Compilador] Aplicación en Powercobol / dos monitores


Joseg
23 de enero de 2026, 11:29
¿Es posible que una aplicación Powercobol funcione con dos monitores?
Por ejemplo, si inicio la aplicación en un monitor y arrastro una ventana a otro, los eventos de la Listview dejan de responder.

Gracias,
José

Roberto
23 de enero de 2026, 17:07
Particularmente a mi me funciona bien.

Kuk
24 de enero de 2026, 20:47
@Joseg, es muy raro lo que cuentas, porque no tiene nada que ver, en teoría.

Si vuelves a traerla a la pantalla inicial, vuelve a funcionar?
De qué eventos estamos hablando? Enséñanos el código a ver...

Joseg
25 de enero de 2026, 13:52
@Joseg, es muy raro lo que cuentas, porque no tiene nada que ver, en teoría.

Si vuelves a traerla a la pantalla inicial, vuelve a funcionar?
De qué eventos estamos hablando? Enséñanos el código a ver...

El principal problema que veo está en el evento "ItemClick" de "ListView" (al seleccionar una Línea); al arrastrarlo al monitor principal, funciona sin problemas. Powercobol 9.

Exemplo:

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 POW-PLISTITEM OBJECT REFERENCE POW-CLISTITEM.
PROCEDURE DIVISION USING POW-PLISTITEM.

MOVE "Text" (1) OF POW-PLISTITEM TO RFAM
INVOKE POW-SELF "CloseForm"
EXIT PROGRAM.

Kuk
25 de enero de 2026, 19:20
@Joseg, entonces el problema es sólo en el Drag-and-Drop ? Cuando lo arrastras, dónde te lo llevas? A otra pantalla PowerCOBOL ?

Joseg
26 de enero de 2026, 11:49
@Joseg, entonces el problema es sólo en el Drag-and-Drop ? Cuando lo arrastras, dónde te lo llevas? A otra pantalla PowerCOBOL ?

Exactamente!

Kuk
26 de enero de 2026, 12:28
@Joseg, y qué es lo que pasa? Se queda colgada la aplicación? Te salta algún error? O simplemente no hace nada y el resto funciona todo?

Joseg
26 de enero de 2026, 13:26
@Joseg, y qué es lo que pasa? Se queda colgada la aplicación? Te salta algún error? O simplemente no hace nada y el resto funciona todo?

No genera ningún error; el evento "ItemClick" simplemente no ocurre.

Utilicé "debug" para confirmar.

Si vuelvo a colocar la ventana en el monitor principal, todo funciona sin problemas.

La ventana que llama es una DLL, y la ventana que se llama (donde se encuentra ListView, donde se buscan) también es una DLL.

Ejemplo: ManCli.DLL ---> PesquisaClientes.dll


INVOKE POW-SELF "CallForm" USING "PesquisaClientes" "PesquisaClientes" *> --> Funciona Ok!

Kuk
26 de enero de 2026, 17:03
@Joseg, por lo que entiendo debe ser un bug, no creo que sea problema de código.

En qué versión de PowerCOBOL trabajas? Si existe una más reciente, lo mismo vale la pena de probar primero con el run-time más reciente y hasta recompilando (en una VM para no alterar la instalación existente).

Y si esto tampoco ayuda, entonces plantearse cambiar el enfoque y hacerlo de tal manera que no se base en el evento ItemClick: por ejemplo que lo que se hace en este evento lo metas en el evento Click de un botón, done primero validas que haya un Item seleccionado y luego haces todo lo que se hace ahora.

Joseg
27 de enero de 2026, 00:36
@Joseg, por lo que entiendo debe ser un bug, no creo que sea problema de código.
No sé si es un bug, ya que muchos entornos de desarrollo antiguos no funcionan bien con configuraciones multimonitor. Creo que vi el mismo problema con una aplicación de VB6 en un foro.


En qué versión de PowerCOBOL trabajas?
Si existe una más reciente, lo mismo vale la pena de probar primero con el run-time más reciente y hasta recompilando (en una VM para no alterar la instalación existente).

Powercobol v9


Y si esto tampoco ayuda, entonces plantearse cambiar el enfoque y hacerlo de tal manera que no se base en el evento ItemClick: por ejemplo que lo que se hace en este evento lo metas en el evento Click de un botón, done primero validas que haya un Item seleccionado y luego haces todo lo que se hace ahora.

Puedo intentarlo, pero tengo este problema con docenas de ventanas.

Kuk
28 de enero de 2026, 22:02
@Joseg, prueba primero con el run-time más moderno: Run-Times y Merge-Modules v10.1 - Cobol Foro (https://www.cobolforo.es/showthread.php?t=307-Run-Times-y-Merge-Modules-v10-1)

dariodr
29 de enero de 2026, 12:02
Hola Kuk, el archivador esta con contraseña-

Josber
29 de enero de 2026, 18:59
Hola Kuk, el archivador esta con contraseña-

Tienes la password en el mismo nombre del archivo que descargas NetCOBOL_Win_V10_1_Runtimes_PASS_RunMyCOBOL :) ;)

Un salu2.-

Joseg
30 de enero de 2026, 12:26
@Joseg, prueba primero con el run-time más moderno: Run-Times y Merge-Modules v10.1 - Cobol Foro (https://www.cobolforo.es/showthread.php?t=307-Run-Times-y-Merge-Modules-v10-1)

Mismo comportamiento :(

Kuk
30 de enero de 2026, 16:42
@Joseg, entonces habría que intentarlo recompilando en una versión más moderna de PowerCOBOL, garantía ninguna pero puede que ayude...

Joseg
2 de febrero de 2026, 12:22
@Joseg, entonces habría que intentarlo recompilando en una versión más moderna de PowerCOBOL, garantía ninguna pero puede que ayude...

PowerCobol se ha estancado. Las versiones más recientes son EXACTAMENTE iguales a las anteriores. Por lo que he podido comprobar, no ha habido cambios desde la versión 9. Solo se ha modificado o setup para cumplir con los últimos requisitos de MSI/Microsoft.

Kuk
2 de febrero de 2026, 21:14
@Joseg, no te creas, el compilador usa librerías propias (de Fujitsu) y de Microsoft para compilar, alguna que otra de estas tienen fechas más recientes y versiones más altas en versiones más recientes de PowerCOBOL. Así que, yo que tú, intentaría de todos modos recompilar la aplicación.

Josber
9 de febrero de 2026, 16:13
@Joseg, Por una casualidad, ¿has probado a crear un archivo .manifest diciéndole que quieres usar mejoras visuales como es multimonitor?, parece una chorrada pero ese tipo de archivos, controlan bastantes "tonterias"

Tendrías que incluir el siguiente código en el .manifest


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<!-- Activar estilos visuales modernos (Common Controls v6) -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>

<!-- Compatibilidad con Windows 10 y DPI Awareness (multi-monitor) -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<!-- DPI por monitor (ideal para doble monitor con resoluciones distintas) -->
<dpiAware>true</dpiAware>
<dpiAwareness>PerMonitorV2</dpiAwareness>

<!-- Declarar compatibilidad con Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</windowsSettings>
</application>

</assembly>


Eso sí, tendrías que hacer un .manifest por cada programa que tengas, tanto el que llama (PROGRAMA) como el que recibe la llamada (SUBPROGRAMA), porque no son heredados

Ya nos vas diciendo

Un salu2.-

Joseg
9 de febrero de 2026, 17:23
@Joseg, Por una casualidad, ¿has probado a crear un archivo .manifest diciéndole que quieres usar mejoras visuales como es multimonitor?, parece una chorrada pero ese tipo de archivos, controlan bastantes "tonterias"

Tendrías que incluir el siguiente código en el .manifest


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<!-- Activar estilos visuales modernos (Common Controls v6) -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>

<!-- Compatibilidad con Windows 10 y DPI Awareness (multi-monitor) -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<!-- DPI por monitor (ideal para doble monitor con resoluciones distintas) -->
<dpiAware>true</dpiAware>
<dpiAwareness>PerMonitorV2</dpiAwareness>

<!-- Declarar compatibilidad con Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</windowsSettings>
</application>

</assembly>


Eso sí, tendrías que hacer un .manifest por cada programa que tengas, tanto el que llama (PROGRAMA) como el que recibe la llamada (SUBPROGRAMA), porque no son heredados

Ya nos vas diciendo

Un salu2.-


Ya uso el archivo .manifest.

Ejemplo: myprog.exe / myprog.exe.manifest

Cuando dices "por programa", ¿te refieres a DLL, EXE, FORM, etc.?

Con el .manifest que sugieres parece una buena idea, pero el programa no está despegando.

Gracias

Josber
9 de febrero de 2026, 19:42
Cuando dices "por programa", ¿te refieres a DLL, EXE, FORM, etc.?

Me refiero a EXE y DLL, ten en cuenta que no es como los permisos de las aplicaciones, que son heredadas de "padres" a "hijos", aquí n éste caso, el .manifest es único para cada programa y,
el programa no está despegando
Significa que lo tienes parado o que tienes más problemas ¿?¿?¿?

Por cierto, si ya tienes un archivo .manifest, del que te he pasado, las 2 primeras líneas y la última, no has de incluirlas, que esas ya las tienes