PDA

Ver la Versión Completa : [Sintaxis] Uso del control CmProgress


Breew
18 de abril de 2016, 16:15
Hola.

Al arrancar el programa necesito cargar un fichero muy grande.
Como la espera es "desesperante", he intentado decorar la carga con una barra con porcentaje, pero no acabo de ver como funciona.

No encuentro la manera de que vaya bien. Creo que la intencion es buena.
Abro el fichero, invoco el timer y dentro del timer voy leyendo registros.

¿ Como lo haceis funcionar ?

Saludos:(

Josber
18 de abril de 2016, 17:43
Breew,
¿Qué versión de PWC estás usando?

Breew
18 de abril de 2016, 22:44
Hola.

Perdonad el despiste.Estoy usando la version 9.0 compilada en Windows7

Rapinto
19 de abril de 2016, 00:15
Breew,

Está na Cocina del Foro um exemplo para saber o numero total de registos num ficheiro.
"Numero de Registos num Ficheiro indexado".

Colocas o numero total de registos no "MAX" da CMprogress

Em seguida, por cada registo lido, somas 1 ao "value" da cmprogress.

Não necessitas de nenhum cmtimer para isto.
Deves executar um ThruEvents por exemplo de 1000 em 1000 registos, para não bloquear tudo.

Se não conseguires diz-me. Posso fazer um exemplo.

Desculpa responder em português (espero que entendas).

Saludos,
Rui Pinto

Josber
19 de abril de 2016, 09:53
Yo utilizo una barra que es un ocs de terceros, el que trae PWC9, no me gusta nada, el "repintado" que hace es muy malo, el que uso se llama "progressbar-xp.ocx", que trae bastantes opciones y es muy sencillo de utilizar.
Como te ha dicho Rui, no tienes que hacerlo con un timer, sino:

1º - Saber el número total de registros, o lo haces con la utilidad que te ha dicho Rui, o haces una doble lectura del fichero, (la primera para saber el total de registros).
2º - Pones el total de registros en la propiedad "Max" de la barra de progreso y 1 en la propiedad "Min"
3º - Por cada lectura que hagas, sumas 1 a un contador y ese contador lo mueves a la propiedad "Value" de la barra de progreso
4º - Cuando termines de leer, pones a 0 la propiedad "Visible" de la barra

Por ejemplo:


INICIO.
MOVE CONTASQL TO "Max" OF PROGRESO.
MOVE 1 TO "Min" OF PROGRESO.
MOVE 1 TO "Visible" OF PROGRESO.
.
.
.
LEER.
READ fichero NEXT .....
ADD 1 TO CONTA.
MOVE CONTA TO "Value" OF PROGRESO.
.
.
.
FIN.
MOVE 0 TO "Visible" OF PROGRESO.



Y con eso debe de funcionarte, si quieres el ocx, dilo y lo subo.

Un saludo.-

Kuk
19 de abril de 2016, 10:10
Rapinto, Josber, la ventaja del Timer, ahora que lo pienso, podría ser que en Windows 7 por ejemplo, el ProgressBar incluso cuando está parado, si no está a 0, hay un reflejo que recorre la parte llena cada x segundos. Este efecto desaparece en un bucle con ThruEvents, el cual resolvía el problema en XP porque ahí no hay ningun reflejo ni nada, sólo barra de progreso como tal. Como el Timer trabaja, por decirlo de alguna manera, "en un hilo separado", podría mantener el reflejo que digo.

Josber
19 de abril de 2016, 10:42
Supongo Kuk, pero, creo que es consumir recursos así porque así.

Un saludo.-

Breew
22 de abril de 2016, 00:04
Hola Josber,

Sube el ocx, me gustaria echarle un vistazo

Gracias

Josber
22 de abril de 2016, 12:04
Aquí lo tienes, es muy sencillo de usar, pero si te hace falta ayuda, dilo.

Un saludo.-

Breew
23 de abril de 2016, 17:27
Hola.


Perfecto.
Ahora tengo un problema. el cmprogress lo tengo metido en opened event.
Pero no es visible hasta que no acaba de hacer todas las instrucciones del opened event.
Como hago para que primero carque toda la pantalla y despues ejecute la lectura del archivo con el cmprogress[COLOR="Silver"]

---------- Post añadido : 17:27 ---------- Post anterior : 17:10 ----------

Aquí lo tienes, es muy sencillo de usar, pero si te hace falta ayuda, dilo.

Un saludo.-

hola.

No puedo instalarlo ni con el regsvr32 ni con el powercobol. me da error.:confused::confused:

Saludos

Josber
23 de abril de 2016, 17:35
Perfecto.
Ahora tengo un problema. el cmprogress lo tengo metido en opened event.
Pero no es visible hasta que no acaba de hacer todas las instrucciones del opened event.
Como hago para que primero carque toda la pantalla y despues ejecute la lectura del archivo con el cmprogress[COLOR="Silver"]

En el evento Opened, la primera instrucción que tienes que poner es


INVOKE POW-SELF "ShowForm" USING POW-SWSHOWNORMAL.


Esto hará que el form se cargue entero antes de empezar a ejecutar cualquier rutina.

En cuanto al error, ¿que es lo que te dice exactamente?

Un saludo.-

Breew
23 de abril de 2016, 20:01
hola Josber.

No se enviar imagen del error, pero desde el directorio system32 o el syswow64 ejecuto regsvr32 y me dice que no se puede bargar el modulo, que me asegure que el archivo binario este almacenadoen la ruta o que lo depure buscando errores-

Kuk
23 de abril de 2016, 22:06
Breew, tienes que crear un archivo de texto en el mismo directorio que el OCX, renombrarlo en nombre.cmd y dentro poner lo siguiente:


@REGSVR32 Nombre_control.ocx


Luego ejecutar el archivo *.cmd con botón derecho->Ejecutar como Administrador

Breew
24 de abril de 2016, 21:31
Hola.

Nada, no lo consigo.

Kuk
24 de abril de 2016, 22:17
Breew, lo has ejecutado como Administrador? Qué versión de OS tienes, Windows 7 x64?

Josber, en x64 funciona tu OCX?

Breew
24 de abril de 2016, 22:22
Hola.

Si, como administrador en w7 64

Roger
25 de abril de 2016, 02:35
Breew
Ese error te indica que no pusiste la ruta donde lo tienes el .ocx
en el .bat
debes indicar de esta forma:
regsvr32 d:\vet-palao\Progressbar-xp.ocx

Breew
25 de abril de 2016, 07:55
Hola.

Ahora si, faltaba la ruta completa