Page 1 of 1

KINETIC SCROLL - problema al cerrar dialog (SOLUCIONADO)

Posted: Thu May 20, 2010 11:25 pm
by rolitocere
Hola

Es muy bonito el KINETIC SCROLL pero me da un problema.

Si mientras el scroll se esta ejecutando, se cierra el dialog en el que está el xBrowse, la aplicación se cierra indicando un error porque tengo la costumbre de cerrar la DBF cuando cierro el dialog así:

Code: Select all

valid (oDbf:close() , .t.)
Obviamente, si no cierro la DBF el error desaparece pero la cuestión es que todo el sistema que acabo de pasar a la nueva xBrowse está hecho para funcionar así, cerrando las DBF al cerrar los dialogs y esto, sin usar el KINETIC SCROLL no ocasiona ningún problema.

Ya probé colocando la línea así:

Code: Select all

valid (oBrw:lKinetic:=.F. , oDbf:close() , .t.)
Pero sigue dando el error.

¿Alguna idea sobre como solucionarlo?. Gracias

Rolis

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 1:15 pm
by ermatica
Hola Rolis,

Deberías poner algo del código o del error que te dá para saber más exactamente donde tienes el problema.

De todas formas por lo que indicas prueba a poner antes de cerrar la DBF del xbrowse lo siguiente:

Code: Select all

oBrw:cAlias:=nil
Espero te sirva...

Un saludo,
Ernesto

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 2:07 pm
by rolitocere
Ernesto,

Probé como sugieres pero sigue el error.

Copio el error abajo pero la falla está, creo yo, porque se queda sin la DBF para seguir "hojeando" con el kinetic.

Code: Select all

Application
===========
   
   Size: 2,888,704 bytes
   Time from start: 0 hours 0 mins 10 secs 
   Error occurred at: 21/05/2010, 10:54:57
   Error description: Error DBCMD/2001  Area de trabajo no usada: ORDKEYCOUNT
   Args:

Stack Calls
===========
   Called from:  => ORDKEYCOUNT(0)
   Called from: D:\FWH10.4\SOURCE\CLASSES\DATABASE.PRG => (b)TDATABASE:TDATABASE(161)
   Called from:  => TDATABASE:KEYCOUNT(0)
   Called from: D:\FWH10.4\SOURCE\CLASSES\DATABASE.PRG => (b)TDATABASE:SETXBROWSE(986)
   Called from: D:\SISTEMA\PRG\xbrowse4-10.prg => (b)TXBROWSE:TXBROWSE(380)
   Called from:  => TXBROWSE:KEYCOUNT(0)
   Called from: D:\SISTEMA\PRG\xbrowse4-10.prg => TXBROWSE:REFRESH(1127)
   Called from: D:\SISTEMA\PRG\xbrowse4-10.prg => TXBROWSE:LBUTTONUP(3187)
   Called from:  => TWINDOW:HANDLEEVENT(0)
   Called from: D:\FWH10.4\SOURCE\CLASSES\CONTROL.PRG => TCONTROL:HANDLEEVENT(1483)
   Called from: D:\SISTEMA\PRG\xbrowse4-10.prg => TXBROWSE:HANDLEEVENT(10746)
   Called from: D:\FWH10.4\SOURCE\CLASSES\WINDOW.PRG => _FWH(3394)
   Called from:  => WINRUN(0)
   Called from: D:\FWH10.4\SOURCE\CLASSES\WINDOW.PRG => TWINDOW:ACTIVATE(979)
   Called from: D:\SISTEMA\PRG\fwso.prg => PRIMERA(1050)
 
Aclaro que uso "xbrowse4-10.prg" porque, en la versión más vieja de FWH que usaba antes tenía una pequeña modificación hecha por mí y, para compatibilizar la llamada a esa modificación es que le agregué algunas líneas para evitar cambiar todo el código de los PRG's míos. En realidad son datas que no se usan para nada en la nueva xBrowse y obviamente no influyen en esta cuestión ya que sólo las declaro.

Voy a seguir investigando como solucionarlo. Cualquier ayuda será bienvenida.

Gracias. Rolis.

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 2:45 pm
by ermatica
Hola Rolis,

Si no utilizas KINETIC SCROLL desactivalo en la creación del xbrw:

Code: Select all

   oxbrw := TXBrowse():New( oDlg )
   oxbrw :lKinetic:=.f.  //--------------------->poner OFF
   oxbrw :CreateFromResource(500)
   ...
 
Y por otra parte no se si utilizas entorno MDI, yo lo hago así:

Code: Select all

   DEFINE WINDOW oWndChilds[nWnd] MDICHILD OF oWnd ICON oIcon TITLE "Titulo"
   DEFINE DIALOG oDlg NAME "Nombre_Recurso" OF oWndChilds[nWnd] 
   ...
   ACTIVATE DIALOG oDlg NOWAIT  ON INIT (   Funcion_la_quesea()  )  VALID (oWndChilds[nWnd]:End() )
   ACTIVATE WINDOW oWndChilds[nWnd]  ON INIT ( Funcion_laquesea() )  VALID ( FClose_DBF(nWnd,oWnd,oWndChilds,oBROW,cAlias) ,.T. )

  Function FCLOSE_DBF(nWnd,oWnd,oWndChilds,oBROW,cAlias)
     oBRW:cAlias:=nil
    (cAlias)->(DBCLOSEAREA())
   oWndChilds[nWnd]:=nil
 Return 
 

Un saludo
Ernesto

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 4:42 pm
by rolitocere
Ernesto,

Si desactivo el Kinetic no hace el problema pero el asunto es que el Kinetic es que es algo que quiero implementar.

Uso MDI y, de la forma que lo haces para cerrar las dbf es similar a como las cierro yo (en el valid), salvo que tu utilizas una función y yo la cierro directamente ya que uso la clase tDataBase y esta tiene su propia función para cerrar

Code: Select all

valid (oDbf:close() , .t.)
Seguramente lo que hay que hacer para evitar este error, es algún "retoque" a la clase xBrowse, pero no encuentro como hacerlo.

Por eso puse este mensaje, con la esperanza de que Alguien le encuentre la vuelta.

Gracias. Rolis.

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 6:40 pm
by Antonio Linares
Rolis,

Prueba asi:

Code: Select all

valid ( oBrw:cAlias := nil, oBrw:lKinetic:=.F., oDbf:Close(), .t. )
 
Incluso puedes probar a quitar el oBrw:lKinetic := .F. de esa línea

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 7:01 pm
by rolitocere
Antonio,

Gracias por responder, ya había probado esas opciones (entre otras buscando dentro del prg de la clase) pero lamentablemente sigue haciendo la falla.

La verdad es que me trabé y no creo que haya algo que pueda hacer salvo desabilitar el kinetic (lástima porque es superútil en esta aplicación).

Rolis
Antonio Linares wrote:Rolis,

Prueba asi:

Code: Select all

valid ( oBrw:cAlias := nil, oBrw:lKinetic:=.F., oDbf:Close(), .t. )
 
Incluso puedes probar a quitar el oBrw:lKinetic := .F. de esa línea

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 7:56 pm
by Antonio Linares
Rolis,

Como estás usando un objeto TDataBase prueba a hacer tambien:

oBrw:bKeyCount := { || 0 }

ya que es desde ese codeblock desde donde se está llamando al método KeyCount() que es el que da el error por estar la workarea ya cerrada

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Fri May 21, 2010 9:38 pm
by rolitocere
Antonio,

Sigue dando error salvo que ahora el error indica a otra línea de la TDataBase.

Ahora marca error en esta línea de TDataBase

Code: Select all

METHOD KeyNo()             INLINE ( ::nArea )->( OrdKeyNo() )
Antes marcaba a esta línea:

Code: Select all

METHOD KeyCount()          INLINE ( ::nArea )->( OrdKeyCount() )
Saludos. Rolis.

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Sat May 22, 2010 2:41 am
by Antonio Linares
Rolis,

De igual forma haz:

oBrw:bKeyNo := { || 0 }

Re: KINETIC SCROLL - problema al cerrar dialog

Posted: Sat May 22, 2010 12:44 pm
by rolitocere
Perfecto Antonio, muchas gracias.

Lo que hice fue agregarle una función nueva a mi PRG con funciones mías así:

Code: Select all

Function CloseoDbfxBro(oBrw,oDbf)

      oBrw:bKeyCount:={|| 0 }
      oBrw:bKeyNo:={|| 0 }
      oDbf:close()

Return nil
Y ahora para cerrar la oDbf hago así:

Code: Select all

valid (CloseoDbfxBro(oBrw,oDbf), .t.)
Me interesé por modificar la clase Database para seguir usando oDbf:close(), pero me faltaría el objeto oBrw así que opté por la solución comentada antes.

De nuevo, Gracias. Rolis.

Re: KINETIC SCROLL - problema al cerrar dialog (SOLUCIONADO)

Posted: Sat May 22, 2010 1:26 pm
by Antonio Linares
Rolis,

Bien, me alegro que esté solucionado.

Esta es una mejora muy simple pero te ahorra algo de código :-)

Code: Select all

Function CloseoDbfxBro( oBrw, oDbf )

      oBrw:bKeyCount := {|| 0 }
      oBrw:bKeyNo := {|| 0 }
      oDbf:Close()

Return .T.
 

Code: Select all

valid CloseoDbfxBro( oBrw, oDbf )