KINETIC SCROLL - problema al cerrar dialog (SOLUCIONADO)

Post Reply
rolitocere
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

KINETIC SCROLL - problema al cerrar dialog (SOLUCIONADO)

Post 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
Last edited by rolitocere on Sat May 22, 2010 12:47 pm, edited 1 time in total.
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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
rolitocere
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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.
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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
rolitocere
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
rolitocere
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: KINETIC SCROLL - problema al cerrar dialog

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

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
rolitocere
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: KINETIC SCROLL - problema al cerrar dialog

Post by Antonio Linares »

Rolis,

De igual forma haz:

oBrw:bKeyNo := { || 0 }
regards, saludos

Antonio Linares
www.fivetechsoft.com
rolitocere
Posts: 41
Joined: Wed Sep 23, 2009 11:50 am

Re: KINETIC SCROLL - problema al cerrar dialog

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post 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 )
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply