FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour tprogress y windows vista
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Mon Nov 05, 2007 06:53 PM
Hola,
tengo una función de reindexar que usa la clase tprogress para mostrar el avance por pantalla. Algo asi,

   Db_OpenNoIndex( "Libros", "LI" )
   oMeter:setRange( 0, LI->(LastRec()) )
   pack
   nMeter := 0
   index on upper(LiCodigo);
         tag CODIGO;
         for ! deleted();
         eval( oMeter:SetPos( nMeter++ ), oMeter:Refresh(), .t. );
         every 1

El caso es que en XP va perfecto, pero en Windows Vista el meter no arranca, como que se queda parado. ¿ Alguna idea ?

Saludos,
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Mon Nov 05, 2007 07:14 PM

Jose Luis,

Revisa samples\ProgTime.prg, aqui funciona bien en Vista.

Prueba a aumentarle el incremento:
oMeter:SetPos( nMeter += 5 )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Tue Nov 06, 2007 08:03 AM
Antonio,
la unica manera de hacerlo funcionar ha sido metiendole un inkey para que vaya más despacito la cosa. Algo así:

   index on upper(LiCodigo);
         tag CODIGO;
         for ! deleted();
         eval ( inkey(0.01), oMeter:SetPos( nMeter+=5 ), oMeter:Refresh(), .t. );
         every 5


Ahora lo que me pasa es que el meter no llega hasta el final, se queda como en la mitad, y eso que cuando termina oMeter:nPos vale lo mismo que oMeter:nMax.

Saludos,
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Tue Nov 06, 2007 09:14 AM

José Luis,

Has probado a usar SysRefresh() en vez de Inkey() ? Es más aconsejable

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Tue Nov 06, 2007 10:43 AM

Si, antes lo tenía con sysrefresh pero no iba bien. Acabo de volverlo a probar y sin inkey no hay tutia. ¿ Cual es la cantidad menor de tiempo que le puedo poner a un inkey ?
Sobre lo de que el meter llegue a la mitad, al estar en un dialogo... ¿ el valor de oMeter:nMax tiene que ser la mitad que si estuviera en una ventana ? Lo digo por el lio de las coordenadas en dialogos que son la mitad y todo eso.

Saludos,

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Tue Nov 06, 2007 10:45 AM

No tendría porque ser la mitad. Cosas de Windows :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Tue Nov 06, 2007 10:45 AM

Lo que no entiendo es que pase con Vista, porque con XP iba de coña.

Saludos,

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Tue Nov 06, 2007 10:47 AM

Cuando haces oMeter:setRange( 0, LI->(LastRec()) ) el meter ya tiene un handle de control válido ? Es decir, tendrías que hacerlo desde la claúsula ON INIT del diálogo.

Existen algunas diferencias entre XP y Vista. Son pocas, pero las hay.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Tue Nov 06, 2007 11:55 AM
Antonio,
yo defino el meter en una función, de esta manera:

   DEFINE DIALOG oDlg OF oApp():oWndMain RESOURCE "UT_INDEXAR" TITLE oApp():cAppName
   oDlg:oFont:= oApp():oFont

      REDEFINE BITMAP oBmp ID 111 OF oDlg RESOURCE "BB_INDEX" TRANSPARENT

      REDEFINE SAY aSay[01] ID  99 OF oDlg PROMPT i18n( "Generando índices..." )
      REDEFINE SAY aSay[02] ID 100 OF oDlg PROMPT ""

      oMeter := TProgress():Redefine( 101, oDlg )

   oDlg:bStart := { || SysRefresh(), Ut_CrearCdx( aSay[02], oMeter, lMsg ), oDlg:End() }

   ACTIVATE DIALOG oDlg ;
      ON INIT DlgCenter(oDlg,oApp():oWndMain)


y en Ut_CrearCdx está el código del reindexado. Asi es como lo he hecho siempre y ha funcionado en 95, 98, Me y XP. Dime que hago para que vaya en Vista, y siga funcionando en XP.

Gracias,
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Tue Nov 06, 2007 03:12 PM

Jose Luis,

El rango del meter, lo defines en Ut_CrearCdx() ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Tue Nov 06, 2007 04:36 PM

Antonio,
el rango del meter lo defino en Ut_CrearCdx y varía para cada dbf que indexo. Cada vez que abro un dbf modifico el rango del meter. Esto me ha funcionado siempre bien.

Saludos,

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Tue Nov 06, 2007 04:38 PM

Jose Luis,

Revisa samples\ProgTime.prg

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM

ok

Posted: Wed Nov 07, 2007 06:22 PM

Jose Luis,

yo uso una pc con vista home basic para desarrollar y he notado que el meter con Progress no llega al 100% o no arranca como tu dices...
¿Puede ser por que el PC es muy rápido?.
Duo core, 1 Giga en Ram.

La verdad no le he dado más importancia... pero lo que si me ha gustado es que antes usaba el METER y al cambiarme a Progress he notado una super velocidad al momento de indexar.
De 1:08 minutos a 8 segundos es un tiempo super rápido al indexar las mismas dbfs.

Saludos
Fernando
México DF

Posts: 564
Joined: Thu Oct 13, 2005 09:23 AM

tprogress y windows vista

Posted: Thu Nov 08, 2007 08:18 AM

Yo creo que la cosa va por ahi, o que la clausula every no se evalua bien en un PC rápido. Si al every le pones un WaitSeconds a la clausula every el meter se actualiza, pero no llega al final. He probado también a modificar el valor del meter con oMeter:DeltaPos y hace lo mismo que con SetPos.

Yo tengo un iMac Core2 duo a 2GHz y 2MB de RAM. El bicho vuela, pero los meter no despegan. Algo pasa, pero no se que. El ejemplo de Antonio si que funciona, pero ahi el intervalo de movimiento es mayor. Tampoco se si en versiones recientes de FWH la clase meter se ha modifcado, yo tengo una de hace más de un año, y me ha ido siempre bien hasta ahora. Con XP iba divinamente.

Saludos,

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

tprogress y windows vista

Posted: Thu Nov 08, 2007 09:28 AM

Jose Luis,

Yo lo estoy usando en un Core Quad y funciona bien. Por lo que no creo que sea cuestion de velocidad, sino tal vez de tiempo de refresco para Windows, de ahí que el WaitSeconds() ayude.

Estas usando Vista en modo nativo ó desde vmware/Parallels ?

regards, saludos

Antonio Linares
www.fivetechsoft.com