Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] ThruEvents pone el puntero por defecto (https://www.cobolforo.es/showthread.php?t=632)

Kuk 17 de mayo de 2017 13:10

ThruEvents pone el puntero por defecto
 
Amigos, me he dado cuenta de que el ThruEvents vuelve a poner el puntero por defecto si antes lo habías cambiado por el de espera.

Es decir, yo hago lo siguiente:

Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA DIVISION.
  3.  PROCEDURE DIVISION.
  4.      
  5.      MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF
  6.      MOVE POW-FALSE   TO "Enabled"      OF POW-SELF
  7.      
  8.      PERFORM UNTIL ...
  9.          ...
  10.          
  11.          INVOKE POW-SELF "ThruEvent"
  12.      END-PERFORM

En el primer ThruEvent vuelve a poner el puntero por defecto y no entiendo por qué. :tonto:
He intentado volver a hacer

Código COBOL:
  1.      MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF

después del ThruEvent pero hace lo mismo.

¿A alguien más le está pasando? Y si es así, ¿habéis encontrado la solución?

Sin el ThruEvent en bucles largos se congela la ventana y Windows se piensa que se la colgado. Por otro lado, me interesa el puntero de espera porque si no hay que hacer algún tipo de mensaje en plan "Espere por favor..." :nocreo:

Rapinto 17 de mayo de 2017 15:04

Kuk,

O ThruEvents permite executar eventos de outros processos que estejam pendentes.
Ao executar o "ThruEvents" podem ser executados outros processos que colocam o puntero noutro estado.
Quando regressa ao teu processo, já está modificado.

Já me aconteceu isso com valores de variáveis, no mesmo programa, ao executar o "ThruEvents"
o valor da variável era 1 e num "Perform Until " o valor do índex alterava. Tinha um "ThruEvents" no meio do "Perform - End-Perform".
Por isso os manuais alertam para usar esta instrução com muito cuidado.
Podes, a seguir ao "ThruEvents" voltar sempre a colocar o puntero como queres.
Un saludo,
Rui Pinto

Kuk 17 de mayo de 2017 15:29

Cita:

Citación del post de Rapinto (Mensaje 3086)
Podes, a seguir ao "ThruEvents" voltar sempre a colocar o puntero como queres.

Es lo que he intentado pero no funciona. :(

FabioYeyo 17 de mayo de 2017 18:18

Kuk.

El ThruEvent no es el que te esta cambiando el puntero quien te lo cambia es cuando pones la instruccion MOVE POW-FALSE TO "Enabled" OF POW-SELF. comenta esta instruccion y veras que funciona bien.

---------- Post añadido : 16:18 ---------- Post anterior : 16:15 ----------

Kuk.

El problema es que cuando pones MOVE POW-FALSE TO "Enabled" OF POW-SELF estas desactivando la ventana que tienes abierta.

Kuk 17 de mayo de 2017 21:44

FabioYeyo, si no hago ThruEvents funciona con la ventana deshabilitada.

Código COBOL:
  1.      MOVE POW-FALSE TO "Enabled" OF POW-SELF

Esto es para que el usuario no haga click en ningún lado y no cambie nada mientras se ejecuta el bucle. Cuando el bucle (por ejemplo una búsqueda) se termina, se vuelve al estado habilitado del Form con:

Código COBOL:
  1.      MOVE POW-TRUE TO "Enabled" OF POW-SELF

Rapinto 17 de mayo de 2017 22:53

Kuk,

Experimenta assim:
Código COBOL:
  1.           move 99 to "MousePointer" OF pow-self
  2.           MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF

No meu PC funciona.
Un saludo,
Rui

FabioYeyo 17 de mayo de 2017 23:05

Kuk.

Lo unico que se me ocurre de momento es que Deshabilites los controle uno a uno

Saludos

Kuk 19 de mayo de 2017 13:57

Rapinto, FabioYeyo, gracias a ambos.

Rui tiene razón, en el bucle cuando hago:

Código COBOL:
  1.          INVOKE POW-SELF "ThruEvents"
  2.                  
  3.          MOVE 99          TO "MousePointer" OF POW-SELF    
  4.          MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF      

Funciona a la perfección. ¡¡¡Rui, eres un crack macho!!! :dart:

---------- Post añadido : 13:57 ---------- Post anterior : 09:16 ----------

Rapinto, funciona, pero mal... El cursor animado hace saltos en algunos procesos.

En definitiva, he sustituido el ThruEvents por lo que uso en PowerCOBOL v3:

Código COBOL:
  1.      CALL "InvalidateRect" WITH STDCALL USING BY VALUE wsHwnd 0 1
  2.      CALL "UpdateWindow"   WITH STDCALL USING BY VALUE wsHwnd

Son llamadas a la WinAPI, y nada mejor, funciona de maravilla.


La franja horaria es GMT +2. Ahora son las 04:03.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.