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.

tMemDataSet y refrescos en tdbBrowse

Foro de Xailer profesional en español
Responder
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

Hola,
Os dejo un proyecto donde ocurre lo siguiente:
Formulario con un folder.
En un pagefolder hay un tpanel con alBOTTOM y un dbBroswse con alCLIENT
en onchange del dbbrowse tiene:
otpanel1:lVisible := .F.
Resultado:
cada movimiento del browse hace que, al hacer el oPanel1:lVisible := .t., se
refresque el browse completamente. Esto se traduce (cuando el browse está
completamente lleno) en un pequeño parpadeo al hacer click (es curioso pero
solo ocurre al hacer click). Ese parpadeo se nota cuando hacemos click en
la parte inferior del browse (donde debería estar el tpanel no visible).
El problema ocurre cuando el browse tiene menos lineas que las que caben.
Entonces, si hacemos que el browse muestre todas las linea y hacemos click
en la última veremos que se comporta de forma extraña.
A ver como se puede solucionar este inconveniente. Y, si es error mío de
programación... entonces os pido disculpas por haceros perder tiempo.
Saludos,
José Luis Capel


Attached files pruebas6.zip (8 KB)Â
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

Ups,
Donde dice:
> cada movimiento del browse hace que, al hacer el oPanel1:lVisible := .t.,
> se
tiene que decir
> cada movimiento del browse hace que, al hacer el oPanel1:lVisible := .F.,
> se
Disculpad por el error de mecanografiado.
SAludos,
José Luis CApel
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

Hola,
Un video donde se puede ver lo que ocurre (es el ejemplo):
http://hyperupload.com/download/0291c88 ... settpane.a vi.html
Saludos,
José Luis Capel
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45194b09@news.xailer.com...]45194b09@news.xailer.com...[/email]
> Ups,
>
> Donde dice:
>
>> cada movimiento del browse hace que, al hacer el oPanel1:lVisible := .t.,
>> se
>
> tiene que decir
>
>
>> cada movimiento del browse hace que, al hacer el oPanel1:lVisible := .F.,
>> se
>
> Disculpad por el error de mecanografiado.
>
> SAludos,
> José Luis CApel
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

tMemDataSet y refrescos en tdbBrowse

Mensaje por ignacio »

José Luis,
Sin ver tu ejemplo. ¿Porque no pones lVisible a .F. solo cuando sea
verdadero?
Estas forzando al formulario ha recalcular todos los controles con
alineaciones cada vez que cambias lVisible aunque se quede igual.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=45194feb@news.xailer.com...]45194feb@news.xailer.com...[/email]
> Hola,
>
> Un video donde se puede ver lo que ocurre (es el ejemplo):
> http://hyperupload.com/download/0291c88 ... settpane.a vi.html
>
> Saludos,
> José Luis Capel
>
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:[email=45194b09@news.xailer.com...]45194b09@news.xailer.com...[/email]
>> Ups,
>>
>> Donde dice:
>>
>>> cada movimiento del browse hace que, al hacer el oPanel1:lVisible :=
>>> .t., se
>>
>> tiene que decir
>>
>>
>>> cada movimiento del browse hace que, al hacer el oPanel1:lVisible :=
>>> .F., se
>>
>> Disculpad por el error de mecanografiado.
>>
>> SAludos,
>> José Luis CApel
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

Ignacio,
Gracias por tu respuesta.
Estoy como dos horas intentando reproducir en un ejemplo de pocas lineas el
error que estoy viendo en Xailer.
>
> Sin ver tu ejemplo. ¿Porque no pones lVisible a .F. solo cuando sea
> verdadero?
>
Esa solución no es viable en mi aplicación.
Saludos y disculpa por haceros perder vuestro tiempo.
Saludos,
José Luis Capel
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

tMemDataSet y refrescos en tdbBrowse

Mensaje por ignacio »

José Luis,
if oFoler:lVisible
oFolder:lVisible := .f.
endif
¿No puedes hacer eso? :-o
Saludos
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:451953dd$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Ignacio,
>
> Gracias por tu respuesta.
>
> Estoy como dos horas intentando reproducir en un ejemplo de pocas lineas
> el error que estoy viendo en Xailer.
>>
>> Sin ver tu ejemplo. ¿Porque no pones lVisible a .F. solo cuando sea
>> verdadero?
>>
>
> Esa solución no es viable en mi aplicación.
>
> Saludos y disculpa por haceros perder vuestro tiempo.
> Saludos,
> José Luis Capel
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

Hola Ignacio,
Gracias por tu respuesta,
>
> if oFoler:lVisible
> oFolder:lVisible := .f.
> endif
>
> ¿No puedes hacer eso? :-o
>
Si, claro que puedo hacerlo. Pero entonces hay algo que no me queda claro.
En mi aplicación ese panel se hace visible o no dependiendo de una columna
del dbbrowse. Trasladando esa situación al ejemplo sería hacer esto en el
onchange (del ejemplo)
METHOD DBBrowse1Change( oSender, lBookMarkChanged ) CLASS TForm3
::opanel1:lVisible := ::oMemDataSet1:tres
::ofolderpage1:cText := ::oMemDataSet1:uno
::oLabel1:cText := ::oMemDataset1:dos
RETURN Nil
Donde ::oMemDataSet1:tres es un valor lógico. Entonces podemos encontrarnos
en situaciones donde todas las filas tengan valor .f. (que es lo que he
reproducido en el ejemplo). El parpadeo que supone hacer click (y que el
dbbrowse se repinte entero) no me preocupa. Lo que sí me preocupa, y es por
lo que he puesto este mensaje, es que después de recalcular posiciones y
repintar lo que el browse ha considerado oportuno, el registro marcado no es
el elegido por el usuario: es otro. Es a eso a lo que me refiero.
En fin, disculpad por hacer perder vuestro tiempo.
Saludos y gracias.
José Luis Capel
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

tMemDataSet y refrescos en tdbBrowse

Mensaje por jfgimenez »

José Luis,
¿has probado lo que te comenté sobre WMXailer? ¿Te ha funcionado?
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

José,
Negativo. No se como hacer que el browse funcione bien. Sigue teniendo
problemas en el posicionamiento correcto del registro activo.
Hice esto (no se si es exactamente lo que me explicaste):
CLASS tMiForm FORM tForm
....
METHOD WMXAILER()
METHOD oDbBrowseOnChange()
ENDCLASS
METHOD odbBrowseOnChange(a,b) CLASS tMiForm
::SendMsg( WM_XAILER )
RETURN NIL // Es nil o 0 ???
METHOD odbBrowseOnChange(a,b) CLASS tMiForm
::oPanel1:lVisible := ::oMEmDataSet:lCampoLogico
RETURN NIL
Te dejo el proyecto. Ejecútalo y despliega la columna central (para ver la
numeración de registros). Haz que se vean todas las filas (hay sobre 10). Y
haces click empezando de abajo a arriba de dos en dos (por ejemplo), o de
tres en tres. Y observa que _a_veces_ el registro mostrado NO es el
registro donde hiciste click.
Saludos,
José Luis CApel
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:451b8d7d$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
> ¿has probado lo que te comenté sobre WMXailer? ¿Te ha funcionado?
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>


Attached files pruebas6.zip (11.8 KB)Â
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

tMemDataSet y refrescos en tdbBrowse

Mensaje por jfgimenez »

José Luis,
> METHOD odbBrowseOnChange(a,b) CLASS tMiForm
>
> ::SendMsg( WM_XAILER )
>
> RETURN NIL // Es nil o 0 ???
SendMsg no, tienes que usar ::PostMsg(), sino estamos igual.
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

tMemDataSet y refrescos en tdbBrowse

Mensaje por jose.luis »

José,
Funcionando 100x100!!!
Ahora bien... tal y como está va a ser el comportamiento de Xailer o se va a
corregir ese 'inconveniente' para no tener que hacer estas 'triquiñuelas'.
Saludos y muchas gracias por tu tiempo.
José luis Capel
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=451b9b6b@news.xailer.com...]451b9b6b@news.xailer.com...[/email]
> José Luis,
>
>> METHOD odbBrowseOnChange(a,b) CLASS tMiForm
>>
>> ::SendMsg( WM_XAILER )
>>
>> RETURN NIL // Es nil o 0 ???
>
> SendMsg no, tienes que usar ::PostMsg(), sino estamos igual.
>
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

tMemDataSet y refrescos en tdbBrowse

Mensaje por jfgimenez »

José Luis,
> Funcionando 100x100!!!
Estupendo!
> Ahora bien... tal y como está va a ser el comportamiento de Xailer o se va
> a corregir ese 'inconveniente' para no tener que hacer estas
> 'triquiñuelas'.
Pues no lo sé. Cuando pueda intentaré revisarlo, pero como ya te dije, y
ahora se ha confirmado, es un problema de 'timing', es decir, que antes de
terminar de procesar el evento se está haciendo algo que vuelve a disparar
otros eventos que cambian las condiciones. Ten en cuenta que esto es
inherente a todos los sistemas basados en eventos (event driven) como es el
caso de windows. Por lo tanto, quizás se pueda hacer algo en Xailer para
cortar esta situación en concreto o quizás no; o simplemente puede ocurrir
que la complejidad o la pérdida de rendimiento para solucionarlo desde
Xailer sea tal que no valga la pena hacerlo.
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

tMemDataSet y refrescos en tdbBrowse

Mensaje por ignacio »

José Luis,
No hay nada que corregir. Sencillamente no puedes variar las coordenadas de
un control mientras se está pintando, y por lo tanto TIENES QUE ESPERAR a
que termine el proceso de pintado. Y José Giménez te ha explicado un
mecanismo para hacerlo. Eso es todo.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=451b9cf7@news.xailer.com...]451b9cf7@news.xailer.com...[/email]
> José,
>
> Funcionando 100x100!!!
>
> Ahora bien... tal y como está va a ser el comportamiento de Xailer o se va
> a corregir ese 'inconveniente' para no tener que hacer estas
> 'triquiñuelas'.
>
> Saludos y muchas gracias por tu tiempo.
> José luis Capel
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:[email=451b9b6b@news.xailer.com...]451b9b6b@news.xailer.com...[/email]
>> José Luis,
>>
>>> METHOD odbBrowseOnChange(a,b) CLASS tMiForm
>>>
>>> ::SendMsg( WM_XAILER )
>>>
>>> RETURN NIL // Es nil o 0 ???
>>
>> SendMsg no, tienes que usar ::PostMsg(), sino estamos igual.
>>
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder