In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Error al Cerrar formulario (HASFOCUS) de forma espor

Foro de Xailer profesional en español
Responder
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por Toni »

Jose/Ignacio
El error que os adjunto sale al cerrar un formulario pero no siempre y ya no
se por donde mirar. He añadido a todos los eventos de las columnas del
browse try/catch y sigue saliendo.
El cierre del formulario lo hago con un simple ::Close() y todos los
datasets estan creados en el IDE.
¿Que más puedo mirar?.
No puedo preparar un ejemplo porque forma parte de una aplicación y como
digo no pasa siempre.
Saludos
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Class: 'NIL' has no exported method
Operación: HASFOCUS
Argumentos: [ 1] = Tipo: U Valor: NIL
Fichero:
Código error SO: 0
Pila de llamadas:
TDBBRWCOLUMN:PAINTDATA (72)
TDBBROWSE:DRAWLINE (264)
(b)XBROWSE:XBROWSE (158)
TDBBROWSE:REFRESHCURRENT (0)
(b)XBROWSE:XBROWSE (266)
TDBBROWSE:WMKILLFOCUS (0)
RUNFORM (0)
TAPPLICATION:RUN (209)
MAIN (26)
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9257
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por ignacio »

Toni,
El error parece que se produce en la lí­nea marcada en rojo:
METHOD PaintData( hDC, nRow, nHeight, lHighLite, lSelected, nOrder, lAltPane ) CLASS XBrwColumn
local Value, xRet
local hBrush, hOldFont
local cText
local nWidth, nBmpRow, nBmpCol, nBmpWidth, nImage,;
aRect[4], nStyle, nType, nMaxWidth, nBmpHeight, nCol
local nClrText, nClrPane
local lRet
DEFAULT lHighLite TO .f.,;
lSelected TO .f.,;
nOrder TO 0
If ::oParent:nLen == 0
return nil
Endif
Value := ::GetData()
nImage := 0
xRet := ::OnGetData( @Value, @nImage, lSelected )
IF xRet != Nil
Value := xRet
ENDIF
IF Empty( ::cPicture )
cText := ToString( Value, "" )
ELSE
cText := Transform( Value, ::cPicture )
ENDIF
if !lHighLite
If ::nClrText != clWindowText
nClrText := ::nClrText
else
nClrText := ::oParent:nClrText
Endif
If ::nClrPane != clWindow
nClrPane := ::nClrPane
else
With Object ::oParent
nClrPane := iif( !lAltPane, :nClrPane, :nClrAltPane )
End with
endif
else
With Object ::oParent
if :HasFocus()
nClrText := :nClrSelFocusText
nClrPane := :nClrSelFocusPane
else
nClrText := :nClrSelText
nClrPane := :nClrSelPane
endif
End with
endif
Según veo en el mensaje de error que me mandas el error se produce porque ::oParent pasa a valer NIL, lo cual no tiene mucho sendido, cuando por ejemplo se utiliza también ::oParent en unas cuantas lí­neas más arriba (color azul). Es posible que en el evento OnGetData que se ejecuta también en este método haya un ProcessMessages() que provoque la ejecución del código del destructor de su browse ya que estabas cerrando el formulario. Prueba a comentar la lí­nea que te indico en BrwCol.prg
//---------------------------------------------------------- ----------------
METHOD Free() CLASS XBrwColumn
IF ::oGridEdit != Nil
::oGridEdit:End()
::oGridEdit := Nil
ENDIF
::oDataField := Nil
::oFont := Nil
::oHeader := Nil
::oFooter := Nil
::oParent := Nil <<<<<<<<<<<<<<<<<<<<<<<<<< esta
::OnHeaderRClick := Nil
RETURN Super:Free()
Pero sobre todo, si en algún evento OnGetData tienes una llamada a ProcessMessages() o TBrowse:Close() debes de quitarla.
Un saludo,
--
Ignacio Ortiz de Zúñiga
Xailer support / Soporte de Xailer
http://www.xailer.com
http://www.xailer.info
"Toni Sales" <toni.sales@gmail.com> escribió en el mensaje news:[email=4a603e1e@svctag-j7w3v3j....]4a603e1e@svctag-j7w3v3j....[/email]
> Jose/Ignacio
> El error que os adjunto sale al cerrar un formulario pero no siempre y ya no
> se por donde mirar. He añadido a todos los eventos de las columnas del
> browse try/catch y sigue saliendo.
> El cierre del formulario lo hago con un simple ::Close() y todos los
> datasets estan creados en el IDE.
>
> ¿Que más puedo mirar?.
> No puedo preparar un ejemplo porque forma parte de una aplicación y como
> digo no pasa siempre.
>
> Saludos
>
> Subsistema: BASE
> Código de error: 1004
> Estado: .F.
> Descripción: Class: 'NIL' has no exported method
> Operación: HASFOCUS
> Argumentos: [ 1] = Tipo: U Valor: NIL
> Fichero:
> Código error SO: 0
>
> Pila de llamadas:
> TDBBRWCOLUMN:PAINTDATA (72)
> TDBBROWSE:DRAWLINE (264)
> (b)XBROWSE:XBROWSE (158)
> TDBBROWSE:REFRESHCURRENT (0)
> (b)XBROWSE:XBROWSE (266)
> TDBBROWSE:WMKILLFOCUS (0)
> RUNFORM (0)
> TAPPLICATION:RUN (209)
> MAIN (26)
>
>
>
>
>
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por Toni »

Gracias Ignacio
No utilizo ningun ProcessMessages() o TBrowse:Close(). El único close lo hago sobre el propio formulario ::Close().
Pruebo a comentar lo que me dices y te digo el resultado.
Saludos
Toni Sales
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9257
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por ignacio »

Toni,
Me refiero dentro del código que puedas tener en algún evento TBrwColumn:OnGetData.
Un saludo,
--
Ignacio Ortiz de Zúñiga
Xailer support / Soporte de Xailer
http://www.xailer.com
http://www.xailer.info
"Toni Sales" <toni.sales@gmail.com> escribió en el mensaje news:4a6447fd$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Gracias Ignacio
No utilizo ningun ProcessMessages() o TBrowse:Close(). El único close lo hago sobre el propio formulario ::Close().
Pruebo a comentar lo que me dices y te digo el resultado.
Saludos
Toni Sales
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Toni
Mensajes: 65
Registrado: Mar Sep 30, 2008 9:55 pm

Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por Toni »

Ignacio
He realizado el cambio pero sigue saliendo el error.
He revisado todos los OngetData y no hay ningun ProcessMesage. Los OnGetData que utilizo que hago es realizar busquedas (Locate()) sobre distintos datasets (tSqlQuerys). He revisado el codigo pero no hay ningun close() o End() que no sea el del propio formulario.
¿El método PaintData que me adjuntas es completo?.
¿Alguna otra idea?
Saludos
Toni Sales
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9257
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por ignacio »

Toni,
Es realmente extraño, si oParent pasa a valer NIL deberí­a ser ese el único punto donde se le asigna dicho valor.
Te recomiendo que hagas las siguientes pruebas:
1) Anula temporalmente los eventos OnGetData de las columnas para ver si son los causantes
2) Poner LogDebug() en el métdo TBrwColumn:Free() y comproar si se ejecutan todos los métodos Free() de todas las columnas antes de lanzarse el error
No obstante te mando el código del método de forma integra a tu correo privado por si quieres poner en él alguna traza y hacer más pruebas.
Un saludo
--
Ignacio Ortiz de Zúñiga
Xailer support / Soporte de Xailer
http://www.xailer.com
http://www.xailer.info
"Toni Sales" <toni.sales@gmail.com> escribió en el mensaje news:4a644c6b$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Ignacio
He realizado el cambio pero sigue saliendo el error.
He revisado todos los OngetData y no hay ningun ProcessMesage. Los OnGetData que utilizo que hago es realizar busquedas (Locate()) sobre distintos datasets (tSqlQuerys). He revisado el codigo pero no hay ningun close() o End() que no sea el del propio formulario.
¿El método PaintData que me adjuntas es completo?.
¿Alguna otra idea?
Saludos
Toni Sales
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Miguel Salas
Mensajes: 40
Registrado: Vie Oct 02, 2015 3:01 am

Re: Error al Cerrar formulario (HASFOCUS) de forma espor

Mensaje por Miguel Salas »

MISMO CASO Toni, ¿lograste resolverlo?

saludos
Responder