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.

Problemas con los CardBox

Foro de Xailer profesional en español
Responder
Jose Lopez
Mensajes: 123
Registrado: Mié Jun 16, 2010 2:33 pm

Problemas con los CardBox

Mensaje por Jose Lopez »

Hola a todos
Hay un problema con los CardBox y OnCardPaint
Si llamo aDatosSelect := ::oWebDataSource1:QueryArray(cSelect,@aHeaders) se queda la aplicacion bloqueada
Tambien si pulso algun boton del formulario que realice alguna consulta a oDataSource y en algonos otros casos.
Llevo varios dias intentándolo y solo veo que si el evento OnCardPaint esta activo para el repintado de las tarjetas
es cuando se produce esos comportamientos extraños.
Un Salu2
Pepe.
Jose Lopez
Mensajes: 123
Registrado: Mié Jun 16, 2010 2:33 pm

Re: Problemas con los CardBox

Mensaje por Jose Lopez »

Este es el evento que se ejecuta

METHOD CardBoxLineasCardPaint( oSender, oItem, Value, nClrText, nClrPane, nPos, lActive, hDC, aRect ) CLASS TForm1
Local nStockAlmacen := oSender:aData[nPos,8], nTrasvase := oSender:aData[nPos,10] // Guardo los ya procesados
Local nUnidades := oSender:aData[nPos,4]

//If !lActive
If nStockAlmacen < 1 .OR. oSender:aData[nPos,6] == 3
nClrPane := clRed
ElseIf nTrasvase <> 0 .AND. nTrasvase < nUnidades
nClrPane := clYellow
ElseIf nTrasvase == nUnidades
nClrPane := clLime
ElseIf nTrasvase > nUnidades
nClrPane := clGradientActiveCaption
ElseIf oItem:nItem == 8 //cCampo == "STOCKALMA"
nClrText := IIF( Value > 0, clWindowText, clRed )
nClrPane := clWindow
nClrPane := 0xEAFFEA
Else
If !lActive
nClrPane := clWindow
oSender:nCardClrPane := clWindow
EndIf
EndIf

//EndIf

RETURN Nil
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Problemas con los CardBox

Mensaje por ignacio »

Buenos días,

Por favor díganos cómo reproducir su problema con cualquiera de los ejemplos existentes de Cardbox, incluyendo el archivo error.log si lo hubiese. Gracias.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Jose Lopez
Mensajes: 123
Registrado: Mié Jun 16, 2010 2:33 pm

Re: Problemas con los CardBox

Mensaje por Jose Lopez »

Ignacio,
Aqui tines lo que lo produce

Dentro del:
METHOD CardBox1CardPaint( oSender, oItem, Value, nClrText, nClrPane, nPos, lActive, hDC, aRect ) CLASS TForm1
If !lActive
nClrPane := clWindow // esta es correcta
oSender:nCardClrPane := clWindow // Esta es la linea que produce el problema si la comentas ya va bien
EndIf
LogDebug("Voy")
RETURN Nil
Si no lo ves claro te paso un ejemplo.
Muchas gracias y
Un Salu2
Pepe.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Problemas con los CardBox

Mensaje por ignacio »

Buenos días,

Es normal el comportamiento que indica y no es ningún error. DEBE de utilizar las variables que se pasan por referencia ÚNICAMENTE.

Cuando usted cambia el valor de una propiedad de un objeto, no sólo se cambia el valor de un miembro de la clase, se ejecuta multitud de código y casi siempre se produce un refresco del control. Como norma general debe asumir que en los procesos de pintado NO SE DEBEN manipular propiedades de los objetos que puedan interferir en el proceso de pintado pues lo más normal es que se produzcan bloqueos por recursividad como los que usted está teniendo.

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Jose Lopez
Mensajes: 123
Registrado: Mié Jun 16, 2010 2:33 pm

Re: Problemas con los CardBox

Mensaje por Jose Lopez »

Ignacio muchas gracias por su respuesta
Un saludo
Responder