tprogress y windows vista

tprogress y windows vista

Postby José Luis Sánchez » Mon Nov 05, 2007 6:53 pm

Hola,
tengo una función de reindexar que usa la clase tprogress para mostrar el avance por pantalla. Algo asi,

Code: Select all  Expand view

   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,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Mon Nov 05, 2007 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby José Luis Sánchez » Tue Nov 06, 2007 8:03 am

Antonio,
la unica manera de hacerlo funcionar ha sido metiendole un inkey para que vaya más despacito la cosa. Algo así:

Code: Select all  Expand view
   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,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Tue Nov 06, 2007 9:14 am

José Luis,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby José Luis Sánchez » 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,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Tue Nov 06, 2007 10:45 am

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby José Luis Sánchez » Tue Nov 06, 2007 10:45 am

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

Saludos,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby José Luis Sánchez » Tue Nov 06, 2007 11:55 am

Antonio,
yo defino el meter en una función, de esta manera:

Code: Select all  Expand view
   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,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Tue Nov 06, 2007 3:12 pm

Jose Luis,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby José Luis Sánchez » Tue Nov 06, 2007 4: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,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Tue Nov 06, 2007 4:38 pm

Jose Luis,

Revisa samples\ProgTime.prg
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

ok

Postby fleal » Wed Nov 07, 2007 6: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
fleal
 
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Postby José Luis Sánchez » Thu Nov 08, 2007 8: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,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Thu Nov 08, 2007 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 98 guests