Iniciar Sesión

Ver la Versión Completa : [Duda] ThruEvents pone el puntero por defecto


Kuk
17 de mayo de 2017, 13:10
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:


ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.

MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF
MOVE POW-FALSE TO "Enabled" OF POW-SELF

PERFORM UNTIL ...
...

INVOKE POW-SELF "ThruEvent"
END-PERFORM


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


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
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.


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:


MOVE POW-TRUE TO "Enabled" OF POW-SELF

Rapinto
17 de mayo de 2017, 22:53
Kuk,

Experimenta assim:

move 99 to "MousePointer" OF pow-self
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:


INVOKE POW-SELF "ThruEvents"

MOVE 99 TO "MousePointer" OF POW-SELF
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:


CALL "InvalidateRect" WITH STDCALL USING BY VALUE wsHwnd 0 1
CALL "UpdateWindow" WITH STDCALL USING BY VALUE wsHwnd


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