Página 1 de 1

Problemas con los CardBox

Publicado: Vie May 15, 2020 10:58 am
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.

Re: Problemas con los CardBox

Publicado: Vie May 15, 2020 11:01 am
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

Re: Problemas con los CardBox

Publicado: Vie May 15, 2020 5:07 pm
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

Re: Problemas con los CardBox

Publicado: Vie May 15, 2020 11:31 pm
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.

Re: Problemas con los CardBox

Publicado: Sab May 16, 2020 10:47 am
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

Re: Problemas con los CardBox

Publicado: Sab May 16, 2020 12:43 pm
por Jose Lopez
Ignacio muchas gracias por su respuesta
Un saludo