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.

Relaciones linea-cabecera

Foro de Xailer profesional en español
Responder
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Relaciones linea-cabecera

Mensaje por fredy[1] »

Hola,
Imaginaros la siguiente situación:
Tengo una ficha con un DbNavigator y una serie de TdbEdit
correspondientes a la cabecera de la factura, y en la zona inferior del
fomulario una browse con las lí­neas que corresponden a cada factura.
Cuando pulso los botones de movimiento del DbNavigator, voy recorriendo
las distintas facturas, y lógicamente quiero que las lí­neas que se
muestren sean las correspondientes a la factura que estoy viendo.
¿Cómo lo hago?
Los eventos OnClick... del navigator se procesan antes de hacer el Skip,
por lo que si pongo en ellos un ::DbLineas:Scope( ::DbCabeceras:Numero)
lo que estoy viendo son las lí­neas de la factura que estaba visualizando
anteriormente (ya que primero me aplica el scope y luego cambia de
factura)
¿Hay algún evento OnPostMove, OnPostSkip o algo así­ dentro del DataSet?.
He visto muchos eventos relacionados con la edición de datos, pero
ninguno con el movimiento.
Un saludico,
Fredy
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Relaciones linea-cabecera

Mensaje por jfgimenez »

Fredy,
lo siguiente no es la solución exacta a lo que planteas, pero sí un tip para
situaciones como esta.
Recuerda que cada formulario es una clase derivada de TForm, y a la que
puedes añadir métodos y que a su vez recibe mensajes de windows. Dicho esto,
presta atención a lo siguiente:
METHOD WMXailer( nEvento ) CLASS TMiForm
IF nEvento == 1
...
ELSEIF nEvento == 2
...
...
ENDIF
RETURN Nil
Y en otro sitio:
::PostMsg( WM_XAILER, 1 )
¿Qué se consigue con esto? Pues enviar un mensaje a la cola que será
procesado posteriormente desde el método WMXailer()
Ya te digo que no es la solución exacta a tu planteamiento, pero te puede
servir como "workaround".
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
fredy[1]
Mensajes: 218
Registrado: Mar Mar 08, 2005 2:03 am

Relaciones linea-cabecera

Mensaje por fredy[1] »

Hola,
Ya he visto que comentabas algo de esto en algún otro momento, pero no
llego a entenderlo.
¿Puedes explicarlo más en profundidad?
Un saludico,
Fredy
In article <428afd3a$1@ozsrvnegro.ozlan.local>, "Jose F. Gimenez"
<jfgimenez@wanadoo.es> says...
> Fredy,
>
> lo siguiente no es la solución exacta a lo que planteas, pero sí­ un tip para
> situaciones como esta.
>
> Recuerda que cada formulario es una clase derivada de TForm, y a la que
> puedes añadir métodos y que a su vez recibe mensajes de windows. Dicho esto,
> presta atención a lo siguiente:
>
> METHOD WMXailer( nEvento ) CLASS TMiForm
>
> IF nEvento == 1
> ...
> ELSEIF nEvento == 2
> ...
> ...
> ENDIF
>
> RETURN Nil
>
> Y en otro sitio:
>
> ::PostMsg( WM_XAILER, 1 )
>
> ¿Qué se consigue con esto? Pues enviar un mensaje a la cola que será
> procesado posteriormente desde el método WMXailer()
>
> Ya te digo que no es la solución exacta a tu planteamiento, pero te puede
> servir como "workaround".
>
>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Relaciones linea-cabecera

Mensaje por ignacio »

This is a multi-part message in MIME format.
------=_NextPart_000_0027_01C55B9C.B4152E80
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0028_01C55B9C.B4152E80"
------=_NextPart_001_0028_01C55B9C.B4152E80
Content-Type: text/plain;
charset="iso-8859-15"
Content-Transfer-Encoding: quoted-printable
Fredy,=20
oDataSetDelNavigator:OnPostChange
Tienes los siguientes evento en el DataSet, que puedes ver claramente en =
el inspector de objetos:
Saludos,=20
"Fredy" <fredy@airtel.net> escribi=F3 en el mensaje =
news:[email=MPG.1cf50d4b6e7c1c5e989702@news.ozs.com...]MPG.1cf50d4b6e7c1c5e989702@news.ozs.com...[/email]
Hola,
Imaginaros la siguiente situaci=F3n:
Tengo una ficha con un DbNavigator y una serie de TdbEdit=20
correspondientes a la cabecera de la factura, y en la zona inferior del=20
fomulario una browse con las l=EDneas que corresponden a cada factura.
Cuando pulso los botones de movimiento del DbNavigator, voy recorriendo=20
las distintas facturas, y l=F3gicamente quiero que las l=EDneas que se=20
muestren sean las correspondientes a la factura que estoy viendo.
=BFC=F3mo lo hago?
Los eventos OnClick... del navigator se procesan antes de hacer el Skip, =
por lo que si pongo en ellos un ::DbLineas:Scope( ::DbCabeceras:Numero)=20
lo que estoy viendo son las l=EDneas de la factura que estaba =
visualizando=20
anteriormente (ya que primero me aplica el scope y luego cambia de=20
factura)
=BFHay alg=FAn evento OnPostMove, OnPostSkip o algo as=ED dentro del =
DataSet?.=20
He visto muchos eventos relacionados con la edici=F3n de datos, pero=20
ninguno con el movimiento.
Un saludico,
Fredy
------=_NextPart_001_0028_01C55B9C.B4152E80
Content-Type: text/html;
charset="iso-8859-15"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-15">
<META content=3D"MSHTML 6.00.2900.2627" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV>Fredy, </DIV>
<DIV>Â</DIV>
<DIV>oDataSetDelNavigator:OnPostChange</DIV>
<DIV>Â</DIV>
<DIV>Tienes los siguientes evento en el DataSet, que puedes ver =
claramente en el=20
inspector de objetos:</DIV>
<DIV>Â</DIV>
<DIV><IMG alt=3D"" hspace=3D0 =
src=3D"cid:002201c55b8b$f0877c80$0e00000a@ozlan.local"=20
align=3Dbaseline border=3D0></DIV>
<DIV>Â</DIV>
<DIV>Saludos, </DIV>
<DIV>Â</DIV>
<DIV>"Fredy" <<A =
href=3D"mailto:fredy@airtel.net">fredy@airtel.net</A>>=20
escribi=F3 en el mensaje <A=20
href=3D"news:MPG.1cf50d4b6e7c1c5e989702@news.ozs.com">news:MPG.1cf50d4b6e=
7c1c5e989702@news.ozs.com</A>...</DIV>Hola,<BR><BR>Imaginaros=20
la siguiente situaci=F3n:<BR><BR>Tengo una ficha con un DbNavigator y =
una serie de=20
TdbEdit <BR>correspondientes a la cabecera de la factura, y en la zona =
inferior=20
del <BR>fomulario una browse con las l=EDneas que corresponden a cada=20
factura.<BR><BR>Cuando pulso los botones de movimiento del DbNavigator, =
voy=20
recorriendo <BR>las distintas facturas, y l=F3gicamente quiero que las =
l=EDneas que=20
se <BR>muestren sean las correspondientes a la factura que estoy=20
viendo.<BR><BR>=BFC=F3mo lo hago?<BR><BR>Los eventos OnClick... del =
navigator se=20
procesan antes de hacer el Skip, <BR>por lo que si pongo en ellos un=20
::DbLineas:Scope( ::DbCabeceras:Numero) <BR>lo que estoy viendo son las =
l=EDneas=20
de la factura que estaba visualizando <BR>anteriormente (ya que primero =
me=20
aplica el scope y luego cambia de <BR>factura)<BR><BR>=BFHay alg=FAn =
evento=20
OnPostMove, OnPostSkip o algo as=ED dentro del DataSet?. <BR>He visto =
muchos=20
eventos relacionados con la edici=F3n de datos, pero <BR>ninguno con el=20
movimiento.<BR><BR>Un saludico,<BR>ÂÂ Fredy</BODY></HTML>
------=_NextPart_001_0028_01C55B9C.B4152E80--
------=_NextPart_000_0027_01C55B9C.B4152E80
Content-Type: image/jpeg;
name="Image1.jpg"
Content-Transfer-Encoding: base64
Content-ID: <002201c55b8b$f0877c80$0e00000a@ozlan.local>
/9j/4AAQSkZJRgABAgEAYABgAAD/wAARCAFZAOUDAREAAhEBAxEB/9sAhAAV DhASEA0VEhESGBcV
GSA2IyAdHSBCLzInNk5FUlFNRUtKVmF8aVZcdV1KS2yTbXWAhIuMi1NomKOX h6J8iIuFARcYGCAc
ID8jIz+FWUtZWYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF hYWFhYWFhYWFhYWF
hYX/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMF BQQEAAABfQECAwAE
EQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq NDU2Nzg5OkNERUZH
SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi o6Slpqeoqaqys7S1
tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEA AwEBAQEBAQEBAQAA
AAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFR B2FxEyIygQgUQpGh
scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVW V1hZWmNkZWZnaGlq
c3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrC w8TFxsfIycrS09TV
1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AL2m24uI2/eF NoHQZ9a6a0lFq6uQ
lcs/Y4v+fwfkP8az9pH+ULeYfZIf+fwfkP8AGj2kf5Qt5h9kh/5/B+Q/xo9p H+ULeYfZIf8An8H5
D/Gj2kf5Qt5h9kh/5/B+Q/xo9pH+ULeYfZIf+fwfkP8AGj2kf5Qt5h9kh/5/ B+Q/xo9pH+ULeYfZ
If8An8H5D/Gj2kf5Qt5jXtUXGLhnz/dUf41lUxNOnvE0jSlLZjfsw/56S/8A fA/+KrL69R/lK+ry
7h9mH/PSX/vgf/FUfXqP8ofV5dw+zD/npL/3wP8A4qj69R/lD6vLuH2Yf89J f++B/wDFUfXqP8of
V5dw+zD/AJ6S/wDfA/8AiqPr1H+UPq8u4fZh/wA9Jf8Avgf/ABVH16j/ACh9 Xl3JksFdQy3DYP8A
sf8A166FWhJXUTNwknZsX+zf+nhv++P/AK9P2sf5Rcr7h/Zv/Tw3/fH/ANej 2sf5Q5X3D+zf+nhv
++P/AK9HtY/yhyvuH9m/9PDf98f/AF6Pax/lDlfcP7N/6eG/74/+vR7WP8oc r7h/Zv8A08N/3x/9
ej2sf5Q5X3D+zf8Ap4b/AL4/+vR7WP8AKHK+4f2b/wBPDf8AfH/16Pax/lDl fcP7N/6eG/74/wDr
0e1j/KHK+4y4tRb2szeaXyoGNuP4h71UJxlJJKwmmluZ2mf8fUf/AF1H863q /AJbnRv981wPc1Mj
Sf8AVP7lAfzrqr7oziat3d/ZhEBDJK0r7FSPbnOCe5A6A1zli210LhX+R43R tro+MqcA9iR0IPB7
0ATbqAEDneV2kAAHdxg9eP8APrQAy5uFtraWdwSsSFyB1wBmgCTdQBGtwrXL wAHciK5PbDFgP/QT
QBJuoAijx9qlOP4V/rQBV1K9a2uYIhc21skiOxe4GRkFcAfMP7x/KgCy11HC kgnlG+CISSlVIAHP
OOf7p45oAZJqNpGZA8hAjDEtsbadoJIDYwSMHgc8H0NADG1SAyQLFmTzZRHk KeAVYhgMcqdvUcdT
nigB66jaMGIkOAMglGG8ZxlePm5I+7nqPUUATwypNGJI2yp9sY9QR2PtQBBF 0b/fb/0I1L3Gh9IA
oAKACgAoAKACgAoAKAK2o/8AHlJ+H8xWtH40TLYxtM/4+o/+uo/nXXV+Ahbn Rv8AfNcD3NTI0n/V
N/vR/wA66q+6+ZnEvahbG6e0Hz7EmLOUcoQNjDqCD1I6VzFla600mQfZV2sL eZVldyWWRtoU7jls
4BGewGKAKlxbKs8B/szbbvMoFpiP5mCS5bGdvde+fl9hQASabdMDujbyflJi QoTt3SkJhvl+XenB
4446CgAudOlNlJE1m1yWtykIdoyYWyxzzgLwyj5em3HYZAH3Vley30kkKNFM /mKZl2Km0owTkfOT
nZnPGRx0FADJdOeWSRodPa2tz5e+JBFmTHmZ4yVPLIfm9PUCgCxDZSxyWf7h 28vPzPIpMY3E44xt
OMDC5BGVPABoA1If+PmX/dX+ZpoBl1bTyXMVxbzRxvGjoRJGXBDFT2Yf3aAC eyFw9tJMwLwnLFQQ
G6HGM8fMqnv93Hc0AU5dDjc3G0wL5wkw/kAyAuDnLZ5HzHgAHgDPXIBalsfM v1uxJhl2YXbkfLvB
/MSH6EA89KAIY9LdY1ja4RlihMEIMWfkO3IcEndnaAcbe/TIwAXraNobdI3k MjKMFj3/AK/mSfUk
80AQxdG/32/9CNS9xofSAKACgAoAKACgAoAKACgCtqP/AB5Sfh/MVrR+NEy2 MbTP+PqP/rqP5111
fgIW50b/AHjXA9zUwbBpPljjbbvK/nniurEdDOJreRff890/z+Fc2pYeRff8 90/z+FGoB5F9/wA9
0/z+FGoB5F9/z3T/AD+FGoB5F9/z3T/P4UagHkX3/PdP8/hRqAeRff8APdP8 /hRqAeRff890/wA/
hRqA6KG8jZm3xMWAHzZ7fT60agSf6Z/0w/WnqAf6Z/0w/WjUCIzXa3ccB8nL xs44P8JUdf8AgX+c
cmoB9pm/vwfk1LUA+0zf34PyajUA+0zf34PyajUCDMwJxcxgEk4APc59KLAG Z/8An6T/AL5/+tRY
AzP/AM/Sf98//WosAZn/AOfpP++f/rUWAMz/APP0n/fP/wBaiwBmf/n6T/vn /wCtRYAzP/z9J/3z
/wDWosAZn/5+k/75/wDrUWAcEuioYXCYPt/9amothcQi5H/Lyv8A3z/9anyM V0MvfMW2kSSTflFb
I6fe/wD1VVJWmgexmaZ/x9R/9dR/Ouqr8BC3Ojf7xrge5qYWm/6+L6r/ADrq xHQziaclvBd6tMlz
DHMkcEZRZFDBSWfJGemcD8hXOWU4NQu009HHlukFhFcSNJks5IbI699vXt6H PAA+3vN2pCf95snc
xHMTBAgz5bB8YOTnGOvmjrgUARG8uTPZXjGI/aLc+UgQjy97xD5jn5sbh0xn HbPABGiXQ1x3DiSe
J5GIQbFkGyAEYJPYnGTjIBoAktb+ZrWEafH5v2iS4lDbQflEp7Fl67h3/D0A LEerTFgZIQqAq7lf
mCxlF53ZwfmY89NqN6UAaFlJLLZQSzpsleNWdcEbWI5GDQBNQAUAFAFST/kN W3/XvN/6FHQBToAK
ACgAoAKACgAoAKACgAoAKAJn8w2wWJgrlPlJGQDk1rDYmRTiuLqeVVMQiEf+ tJHU+g/n/nm0Rcsa
j/qm/wCuSfzrOH8RFvYy9M/4+o/+uo/nXTV+AlbnRv8AeNcD3NTC0wEzx4Vm IwcLjPHPciurEdDO
Jr3EUN1t+06b523O3zFjbH0ya5yx7kPv32LtvXa+Qh3LzweeRyfzNAACBGsQ sX8tMbVwmBjpgZ7Y
FAEYt7dXkcaWA8oIkYJHlweoPPOaAFgiht/9RpvlYz9xY164z0PsPyFABLFD NH5Uum749xbayxkb
jnJxnryfzoAe5D799i7b12vkIdy88Hnkcn8zQA/zn/59pfzX/wCKoAPOf/n2 l/Nf/iqADzn/AOfa
X81/+KoAPOk/59pfzX/4qgCu8mdUgYwyhxBJtT5fmG6PPO7txQAeSP8An3uP ++k/xoAPJH/Pvcf9
9J/jQAeSP+fe4/76T/GgA8kf8+9x/wB9J/jQAeSP+fe4/wC+k/xoAPJH/Pvc f99J/jQAeSP+fe4/
76T/ABoAPJH/AD73H/fSf40AHkj/AJ97j/vpP8aADyR/z73H/fSf40AHkj/n 3uP++k/xoAds4A+z
z8DH3k/xqlJoTVxDHn/l3uP++k/xp+0YuVFbUCSkgMbJiNQAxGfvexp0/jQP YzNM/wCPqP8A66j+
ddNX4CVudG/3jXA9zUxtG/4+o/of5V1YjdGcTSlM0+oSW6XMkCRRI+YwpLFi w53A/wB0dPU1zlkM
OsL9mieaGQubZLiVo1+VFYHJ5PbB45PpnnABJafaLgtcfanUCZ08rYpTarlf TdnAz16+3FADG1u1
SaWJg++JgpVCrk/OFzhSSOWHBwfQGgCUakpPlpbTtcAkNANu5cBSSSW29GXo e/1wAMbWbRbxLYsQ
7FV+YhSC2MDaSG7joOM89DgAn0yV59MtJpW3SSQozHGMkgE0AWaACgAoAKAK cv8AyGbb/r3l/wDQ
o6ALlABQAUAFABQAUAFABQAUAFABQAUAFAGZqv8Ay1/65r/6Eaun8aE9jJ0z /j6j/wCuo/nXVV+A
hbnRv941wPc1MTSXSO4jZ2VVx1JwOldWI3RnE0pxbyTedFqHkSFQrGN0O4DJ GdwPTJ6etc5Yw2+n
eTLCtwixyW62+BIPlQbgMZ7/ADHr7UAORLZJdyaiVi3l/JEiBck5PON3XnGf bpxQBCtnYhos6gWS
EBYoy6YQBlYAcZP3FHJPFAEjw2ZneeO/8qZ2JLo6HAKqCMEEY+RT68UAOWO0 SbfHflUJDNGJgQ5A
ABJPzdAO/OOc5OQCa2ktLa2it0uYykSBFLOM4AxQBJ9rtv8An4i/77FAB9rt v+fiL/vsUAH2u2/5
+Iv++xQAfa7b/n4i/wC+xQBVkuIDq9uwmjKrby5IYYHzR0AWvtdt/wA/EX/f YoAPtdt/z8Rf99ig
A+123/PxF/32KAD7Xbf8/EX/AH2KAD7Xbf8APxF/32KAD7Xbf8/EX/fYoAPt dt/z8Rf99igA+123
/PxF/wB9igA+123/AD8Rf99igA+123/PxF/32KAD7Xbf8/EX/fYoAPtdt/z8 Rf8AfYoAPtdt/wA/
EX/fYoAoalIkqytG6uNijKnP8Rq6fxoT2MvTP+PqP/rqP511VfgIW50b/eNc D3NTG0b/AI+o/of5
V1YjdGcTVmuZ/tLW9tDHI6IruZJCgwSQMYU5+6fTtXOWLDf20sMEhlSPzlRk V2Ab5vujHqcH8jQA
yK6uJpC0dshtxI0Zbzfn4YqTtxjGQf4unvxQA60v4LiK2LSRxzXESyrCXG7B GeB1Pf8AKgCQ3dss
ckhuIhHG212LjCt6E9jzQBKjrIiujBkYZVlOQR60ALQAUAFABQAUAU5f+Qzb f9e8v/oUdAFygAoA
KACgAoAKACgAoAKACgAoAKACgDM1X/lr/wBc1/8AQjV0/jQnsZOmf8fUf/XU fzrqq/AQtzo3+8a4
HuamNo3/AB9R/Q/yrqxG6M4mnNFcx3r3FskUnmRqjLJIU27SxyMKc53e3T3r nLKp0hltpolaNnaw
W0jcjByA2foDlfyoAsW8V3bsYkWAwmVn8wud2GYsRtxjvjO739qAKtrplzBb x2xMRjLQyO4Y5Vow
gwBjkHy+uR16ccgA2lztGuREDFIGRY5GjyoVhjeOVHzEheccjODwAaFjB9mt ViIAOWYgMzckknlu
T169/QdKALFABQAUAFABQBTl/wCQzbf9e8v/AKFHQBcoAKACgAoAKACgAoAK ACgAoAKACgAoAzNV
/wCWv/XNf/QjV0/jQnsZOmf8fUf/AF1H866qvwELc6N/vGuB7mpiaSge4jUl gMdmIPT2rqxHQzia
lw9rbuEdrlnIztjMrkD1O3OO/X0PpXOWTJDDIiukkjIwyrLMxBHr1oAr+dZ+ d5XmXGd23dmTZu6Y
3/dznjr1460AWfs0f96X/v63+NACPDDGjO8kiooyzNMwAHr1oAX7NH/el/7+ t/jQAfZo/wC9L/39
b/GgA+zR/wB6X/v63+NAB9mj/vS/9/W/xoAPs0f96X/v63+NAB9mj/vS/wDf 1v8AGgCrJAg1e3UG
TDW8ucyNn70ffPFAFr7NH/el/wC/rf40AH2aP+9L/wB/W/xoAPs0f96X/v63 +NAB9mj/AL0v/f1v
8aAD7NH/AHpf+/rf40AH2aP+9L/39b/GgA+zR/3pf+/rf40AH2aP+9L/AN/W /wAaAD7NH/el/wC/
rf40AH2aP+9L/wB/W/xoAPs0f96X/v63+NAB9mj/AL0v/f1v8aAD7NH/AHpf +/rf40AUNSQRrKFL
EbFPzMW/iPrV0/jQnsZemf8AH1H/ANdR/Ouqr8BC3Ojf7xrge5qY2jf8fUf0 P8q6sRujOJoSSC11
OWaWOUxyQxqpjiZ+VLk52g4+8Otc5ZQW2vIrJhm4WS20+Ly40Y7TKA/p948D jocjIPFAF2ym+z7r
Z4ZzKZ5G4ibbhnZgd33ehz19uvFAGaY78W9oPOuUb7MhX5JJGMpyWzhgB/D9 /wCX6DNADtRW9nuJ
44llBmWWIxbJCu3y2CneTsGSFPABGcZ65AJtt0dSQpLcLGGTylMUjZjwudxL BQfvZ3At+OKANugA
oAKACgAoApy/8hm2/wCveX/0KOgC5QAUAFABQAUAFABQAUAFABQAUAFABQBm ar/y1/65r/6Eaun8
aE9jJ0z/AI+o/wDrqP511VfgIW50b/eNcDNTE0kObiPYwDY6kZHT611YjoZx Nvbc/wDPWL/v0f8A
4qucsNtz/wA9Yv8Av0f/AIqgA23P/PWL/v0f/iqADbc/89Yv+/R/+KoANtz/ AM9Yv+/R/wDiqADb
c/8APWL/AL9n/wCKoANtz/z1i/79n/4qgA23P/PWL/v0f/iqADbc/wDPWL/v 0f8A4qgA23P/AD1i
/wC/R/8AiqADbc/89Yv+/R/+KoAqyCf+14MyRlvs8uCEOB80fvQBa23P/PWL /v2f/iqADbc/89Yv
+/Z/+KoANtz/AM9Yv+/Z/wDiqADbc/8APWL/AL9n/wCKoANtz/z1i/79n/4q gA23P/PWL/v2f/iq
ADbc/wDPWL/v2f8A4qgA23P/AD1i/wC/Z/8AiqADbc/89Yv+/R/+KoANtz/z 1i/79H/4qgA23P8A
z1i/79H/AOKoANtz/wA9Yv8Av0f/AIqgA23P/PWL/v0f/iqAKGpBwsvmMrHY vKrj+I+5q6fxoT2M
vTP+PqP/AK6j+ddVX4CFudG/3jXAzUxtG/4+o/of5V1YjdGcS9JbwXerTJcw xzJHBGUWRQwUlnyR
npnA/IVzllODULtNPRx5bpBYRXEjSZLOSGyOvfb17ehzwATaRbL50s7WdsD5 822ccyE+Yw5+XjjI
60AVnuZ5Liwu5RA6TxBkj8s/IGlh6nPJGRg4HIzigDU0dpX0izeZ98jQqS3P OR3yTz796ALlABQA
UAFABQAlAFSX/kM23/XvL/6FHQBcoAKACgAoAKACgAoAKACgBKAFoAKACgDM 1X/lr/1zX/0I1dL4
0J7GTpn/AB9R/wDXUfzrqq/AQtzo3+8a4GamJpLFbiMhGc46DGenvXViOhnE 1biKK62/adN87bnb
5io2Ppk1zlj3IffvsXbeu18hDuXng88jk/maAIkt7dLj7QmlhZsk+YEjDZPU 5zmgAW3t1laVdLAk
Y5ZwkeSc5yTn1AP1FAEyOUGEtJFGScDYOSck9fWgB3nSf8+0v5r/AI0AHnSf 8+0v5r/jQAedJ/z7
S/mv+NAB50n/AD7S/mv+NAB50n/PtL+a/wCNAB50n/PtL+a/40AVJJXOrwEw SAi3lwCVyfmj96AL
fnSf8+0v5r/jQAedJ/z7S/mv+NAB50n/AD7S/mv+NAB50n/PtL+a/wCNAB50 n/PtL+a/40AHnSf8
+0v5r/jQAedJ/wA+0v5r/jQAedJ/z7S/mv8AjQAedJ/z7S/mv+NAB50n/PtL +a/40AHnSf8APtL+
a/40AHnSf8+0v5r/AI0AHnSf8+0v5r/jQBQ1Fi6ylo2Q7F4bH94+hq6XxoT2 MvTP+PqP/rqP511V
fgIW50b/AHjXAzUxtG/4+o/of5V1YjdGcTRl86fUJLdLmSBIokfMYUlixYc7 gf7o6eprnLIYdXX7
NE80Uhc2yXErRr8qKwOTye2DxyfTPOABPPuPL+1/aHx9q8nydq7Nvm+X6bs4 569fbigCb+1YV3tL
FLFCrOolYAqxTduwASeiseR2+lAEUWuW0wAjSR5C4QJGUc5IYjlWI52nvx1O BzQBft51uIRIgI5K
kHqCDgj8CCKAJKACgAoAKACgCpL/AMhm2/695f8A0KOgC3QAUAFABQAUAFAB QAUAFABQAUAFABQB
m6r0l/65r/6Eaul8aE9jJ0z/AI+o/wDrqP511VfgIW50b/eNcDNTE0l0juI2 dlVcdScDpXViOhnE
0pxbyTedFqHkSFQrGN0O4DJGdwPTJ6etc5Yw2+n+TLCtwixyW62+BIPlQbgM Z7/MevtQAeTaeZ/x
/fufM83yN6bd27dnON33uev6cUAQxWlqyOt3erLG0krCLzFCrvLdwAc7WI69 z7UATolsJI5JdQaZ
433qXkUfwsuMAAfxHtnpzxQBNbyWlvGUS5jILs/LjqzFj+poAk+123/PxF/3 2KAD7Xbf8/EX/fYo
APtdt/z8Rf8AfYoAPtdt/wA/EX/fYoAPtdt/z8Rf99igCq9xAdXgYTRlVt5c kMMD5o6ALX2u2/5+
Iv8AvsUAH2u2/wCfiL/vsUAH2u2/5+Iv++xQAv2q2/5+Iv8AvsUAH2q2/wCf iL/vsUAJ9qtv+fiL
/vsUAH2u2/5+Iv8AvsUAH2u2/wCfiL/vsUAH2u2/5+Iv++xQAv2q2/5+Iv8A vsUAH2u2/wCfiL/v
sUAJ9rtv+fiL/vsUAH2u2/5+Iv8AvsUAUdRkSVZWjdXGxRlTn+I1dL40KWxl 6Z/x9R/9dR/Ouqr8
BC3Ojf7xrgZqYujf8fUf0P8AKurEbozias1zP9pa3toY5HRFdzJIUGCSBjCn P3T6dq5yxYb+2lhg
kMqR+cqMiuwDfN90Y9Tg/kaAIE1Cc/vXt4xb+eYdwlJfO/YDt246+/SgC0t3 bN5u24iPk/63Dj5P
9706Hr6UARtqNqryKZRiOAXBYHIKHPIxyen6igAjv4PsaXFzJHb7iUYSOAFc ZBXJ64IP5UAPN9aK
8aG6gDygGNTIMuD0I9c0AKbu2WSSM3EQkjXc6lxlV9SOw5oADd2yxySG4iEc bbXYuMK3oT2PNACW
N0t5b+emNhd1UhsghWK5z74zQBPQBUl/5DNt/wBe8v8A6FHQBboAKACgAoAK ACgAoAKACgAoAKAC
gAoAzdV6S/8AXNf/AEI1dL40KWxk6Z/x9R/9dR/Ouqr8BC3Ojf7xrgZqYujf 8fUf0P8AKurEdDOJ
pzRXMd49xbJFJ5kaoyySFNu0scjCnOd3t0965yyqdIZbaaJWjZ2sFtY3Iwcg Nn6A5X8qALNlp0Fu
zTPBAbgyyP5oQbsMxI5xnocUAVk0248mKNxARbQeTH8zfvOUOTwCh+QYxnBO e3IAHTLl2TdJGokC
ecyDDKUZnBXjBJZhkkDoeOcAAbNaXdvdQvCftO64EhaU7Tu8p1OSq4AwExx1 z60ARiwu/Mu7cJHs
uYMSSFiAhd5SQvHzY3+3bpngAWfR5ZFuEGwh/OZHaZz8zhuNn3Vxv689OnPA BZnsJRepc2yxARLG
I4iSoO0SAjIBwMSDHB6YoAs6fDLBa7JggkaSRyEJIG5y2MkD19KALNAFOX/k M23/AF7y/wDoUdAF
ygAoAKACgAoAKACgAoAKACgAoAKACgDN1XpL/wBc1/8AQjV0vjQpbGTpn/H1 H/11H866qvwELc6N
/vGuBmpiaSge4jUkgY7MQentXViOhnE053tbdwjtcs5GdsZlcgep25x36+h9 K5yyZIYZEV0kkZGG
VYTMQR69aAKyXFk8vliS5++Y9x80JuBxjceOvHXrQBa+zR/3pf8Av63+NAEc otoQxeWQbACQJXJ5
OBxnPJ4HqaAIoprOV1QSXCuzbQjmRGzgnocHGFbnpwaALP2aP+9L/wB/W/xo APs0f96X/v63+NAB
9mj/AL0v/f1v8aAD7NH/AHpf+/rf40AH2aP+9L/39b/GgCq8CDV4FBkw1vLn MjZ+9H3zxQBa+zR/
3pf+/rf40AH2aP8AvS/9/W/xoAPs0f8Ael/7+t/jQAfZo/70v/f1v8aAD7NH /el/7+t/jQAfZo/7
0v8A39b/ABoAPs0f96X/AL+t/jQAfZo/70v/AH9b/GgA+zR/3pf+/rf40AH2 aP8AvS/9/W/xoAPs
0f8Ael/7+t/jQAfZo/70v/f1v8aAD7NH/el/7+t/jQBR1FBGsoUsRsU/Mxb+ I+tXS+NClsZemf8A
H1H/ANdR/Ouqr8BC3Ojf7xrz2amLo3/H1H9D/KuvEdDOJoSSC11OWaRJTHJD GqmOJn5UuTnaDj7w
61zllBba8is2GbhZLbT4/LjRjtMoD+n3jwOOhyMg8UAW7Kxd0YzzTbPtMkgg IULxKWU9N3XB6/pQ
BWiFyYcZvA/kH7USHOJMr90HqPv/AOr7dOdtADWgmZvPaK4/1cBAYljhJizf UgEYyNxHvuoAt3Tf
b5bQRJcpGs+WfYYzjy3z1GR2GePvcHPQAo3r3y2uE+0JJD5vksElcuQ7BQdp x0C8vkHd9cgE0kd+
kJlge4a4eadQGOVVf3hTg8AZCYJ9cZxxQBBK0jXEsdnLeLABEZPNEzMAfM5A JD9Qn3T+maANnThK
LKMTO7tz8zqVJGTjgknpjqc+vOaALNAFOX/kM23/AF7y/wDoUdAFygAoAKAC gAoAKACgAoAKACgA
oAKACgDN1XpL/wBc1/8AQjV0vjQpbGTpn/H1H/11H866qvwELc6N/vGvPZqY mkhzcR7GAbHUjI6V
14joZxNrbc/89Yv+/Z/+KrnLDbc/89Yv+/Z/+KoANtz/AM9Yv+/Z/wDiqADb c/8APWL/AL9n/wCK
oANtz/z1i/79n/4qgA23P/PWL/v2f/iqADbc/wDPWL/v2f8A4qgBHimkRkd4 WRhhlMRII9PvUAMg
tWtkKW4tokJyVjg2jPrwaAJNtz/z1i/79n/4qgA23P8Az1i/79n/AOKoAqus /wDa0GZIy32eXBCH
A+aP3oAtbbn/AJ6xf9+z/wDFUAG25/56xf8Afs//ABVABtuf+esX/fs//FUA G25/56xf9+z/APFU
AG25/wCesX/fs/8AxVABtuf+esX/AH7P/wAVQAbbn/nrF/37P/xVABtuf+es X/fs/wDxVABtuf8A
nrF/37P/AMVQAbbn/nrF/wB+z/8AFUAG25/56xf9+z/8VQAbbn/nrF/37P8A 8VQAbbn/AJ6xf9+z
/wDFUAUdRDhZfMZWOxeVXH8R9zV0vjQpbGXpn/H1H/11H866qvwELc6N/vGv PZqYujf8fUf0P8q6
8R0M4l6S3gu9WmS5hjmSOCMosihgpLPkjPTOB+QrnLKkGoXaaejjy3SCwiuJ GkyWckNkde+3r29D
ngALKyaV2lS2toyLuRvtIP70gSnIxt7gbfvdD+FAEyajdGGJyICbmDzolxt2 coApJOGPzjH3ckds
8AFeaea4kcNKjRMturooOGzMyng9MgEMpB9CeOQCXUha6YYZbaGNTE7StFGd oOIpcHA4GcEZx29q
AJZbu7heS3ZoXlUIwdYz0bdkBN2WI2E8HpnA4wQBq6ldSXQ8uGNrdXjR3VlK ksFOQ5YH+MYG05x7
8AGtQAUAFAFOT/kM23/XvL/6FHQBcoAKACgAoAKACgAoAKACgAoAKACgAoAz dV6S/wDXNf8A0I1d
L40KWxk6Z/x9R/8AXUfzrqq/AQtzo3+8a89mpiaUxW4jIQucdBjPT3rrxHQz ialxFFdbftOnedt+
75io2Ppk1zlj2w+/fZM29drZ2HcOeDzyOT+dACo5QYS0kUZJwNg5JyT19aAI 1iiXzdunY87/AFuF
T5/rzz1PX1oAUqhQIbA7AhjC4TAU4yvXpwOPagBIYoYFCw6d5YVtwCKgw2MZ 4PXHFADVt7dbdrdd
MAhY5aMJHtJ9SM47D8qAHsqNcLcNYEzKMLIQm4D0BznufzoAl86T/n2l/Nf8 aADzpP8An2l/Nf8A
GgA86T/n2l/Nf8aAKryOdWgJgkBFvLgErk/NH70AWvOk/wCfaX81/wAaADzp P+faX81/xoAPOk/5
9pfzX/GgA86T/n2l/Nf8aADzpP8An2l/Nf8AGgA86T/n2l/Nf8aADzpP+faX 81/xoAPOk/59pfzX
/GgA86T/AJ9pfzX/ABoAPOk/59pfzX/GgA86T/n2l/Nf8aADzpP+faX81/xo APOk/wCfaX81/wAa
AKOosXWUtGyHYvDY/vH0NXS+NClsZemf8fUf/XUfzrqq/AQtzo3+8a89mpi6 P/x9R/Q/yrrxHQzi
aMvnT38lulzJAkcSPmMKSxYsOdwP90dPU1zlkMOrr9mieaKQubZLiVo1+VFY HJ5PbB45PpnmgCG3
urmSYlJ7mSQXLJ5RgxEEEhB+bb2UZ+91HfpQBbGqw+WZGilVDGZYyQP3iccj ngfMv3sYzz0OACvd
387u8MSyQcQfOVG5C0pRgc5HQcEAjqc9KAJje/YTcJdSmRYURxI2ATvJAB6D qOvA5GehJAIP7bga
RJhJiBY5PMXKn5w0YX5gSP4/XHPOMcAD49ahlkRkH7gRytMwIby9m09VJBGG 7Z6j3oAs6fqMF/5g
h4aPG5d6twc45Ukdj3zx9KALdABQBUk/5DFt/wBe8v8A6FHQBboAKACgAoAK ACgAoAKACgAoAKAC
gAoAztV6Sf8AXNf/AEI1dL40KWxk6Z/x9R/9dR/Ouqr8BC3Ojf7xrz2amJpT rHcRs7BVx1JwOlde
I6GcTRnFvJN50eoeRIVCsY2Q7gMkZ3A9Mnp61zljDb6f5MsK3CrHJbrb4Eg+ VBuAxnv8x60AT28l
pbxlEuYyC7Py46sxY/qaAK0dvZxgBb8/ImyH94o8pcg4GBz91fvZ6e5yAI1p Y+UES92EKi7lkXPy
tuU4IwMHPAGMHGOBgAk8uzaF1kvA8jlSZmdd2VOV6ccHnGMdeDk5AGPb2chV pb8ySKDh2kXOcqQc
YwMFF4xjrkHJoAc0NlIuJ7zziVdHZ5R8ysACvGABwOmOnucgE1vJBDuL3/nM 38UjrwPYAAfpn8hQ
BN9qtv8An4i/77FAB9qtv+fiL/vsUAVXuIDq0DCaMqtvLkhhgfNHQBa+1W3/ AD8Rf99igA+1W3/P
xF/32KAD7Vbf8/EX/fYoAPtVt/z8Rf8AfYoAPtVt/wA/EX/fYoAPtVt/z8Rf 99igA+1W3/PxF/32
KAD7Vbf8/EX/AH2KAD7Vbf8APxF/32KAD7Vbf8/EX/fYoAPtVt/z8Rf99igA +1W3/PxF/wB9igA+
1W3/AD8Rf99igCjqMiSLKY3VxsUZU5/iNXS+NClsZemf8fUf/XUfzrqq/AQt zo2+8a89mpi6P/x8
x/Q/yrrxHQziak1zP9pa3toY5HRFdzJIUGCSBjCnP3T6dq5yxYr62khhkMqR +cqMiuwDfN90Y9Tg
/kaAIE1Cc/vXt4xb+eYdwlJfO/YDt246+/SgC0t3bN5u24iPk/63Dj5Pr6dD 19KAIJ9TgjYxxkSS
FI3QBhhw7bVIPpnGTjoR1oAWO92NKl6IrcxKrswlymGJA5IHOVPb0oAla9tF gWdrqEQscLIZBtJ9
AfwP5UAPNxAJhCZo/NJICbhkkAEjH0IP40ASUAFABSAqSf8AIYtv+veX/wBC jpgW6ACgAoAKACgA
oAKACgAoAKACgAoAKAM7VOkn/XNf/QjV0vjQpbGTpn/H1H/11H866qvwELc6 NvvGvPZqYuj/APHz
H9D/ACrrxHQziaU0VzHePcWyRSeZGqMskhTbtLHIwpznd7dPeucsqnSWW2mi Vo2Y2K2qORg5AbP0
Byv5UAWbLToLdmmeCE3BlkfzQg3YZiRzjPQ4oArJp1x5MUbiEi2g8mP5m/ec ocngbD8gxjOCc9uQ
Bf7OuMFi0RkZY2bHA3pIX7DnduOTgc845wABLu3u2SS4aKPzme3VYkcsMJLu yW2gj7xzxwBmgBJd
NuJJzdEJ5rMxaJLh4wMqg++oyf8AV9Md/bkAfFpRhhkRBEC00DAgEfJHs45y f4WwMnr1oA1KACgA
oAqSf8hi2/695f8A0KOgC3QAUgCgApgFABQAUgCgApgFABQAUgCgDO1TpJ/1 zX/0I1pS+NClsZOm
f8fUf/XUfzrqq/AQtzo2+8a89mpiaUge4jUk4x2Yg9PauvEdDOJpTvbQOEdr lmxnbGZXIHqducd+
vofSucsmSGGRFdJJGVhkMJmII9etAFZLiyeXyw9z98puPmhNwOMbjx1469aA LX2aP+9L/wB/W/xp
ARyi2hDF5ZBsAJAlYnk4HGc8ngepoAIFt7hC0bzcHBDO6kH0IJyOx59RQBJ9 mj/vS/8Af1v8aAD7
NH/el/7+t/jQAfZo/wC9L/39b/GgA+zR/wB6X/v63+NAB9mj/vS/9/W/xpgV XgQatAuZMNby5zI2
fvR988UAWvs0f96X/v63+NAB9mj/AL0v/f1v8aAD7NH/AHpf+/rf40AH2aP+ 9L/39b/GgA+zR/3p
f+/rf40AH2aP+9L/AN/W/wAaAD7NH/el/wC/rf40gD7NH/el/wC/rf40AH2a P+9L/wB/W/xoAPs0
f96X/v63+NAB9mj/AL0v/f1v8aAD7NH/AHpf+/rf40wD7NH/AHpf+/rf40AU dRQRpKFLH5FPzMT/
ABH1q6XxoUtjM0z/AI+o/wDrqP511VfgIW50bfeNeezUxdH/AOPmP6H+VdeI 6GcS/JILXUpZpI5T
HJDGqmOJn5UuTnaDj7w61zFlFba8is2GbhZLawj8uNGO0ygP6fePA46HIyDx TAtWVi7oxnmm2faZ
HEBCheJSynpu64PX9KQFaL7SYcZvA/kH7USGOJMr90Ht9/8A1fbpztpgOSAs 7TTxXWGt49mCWZSs
jNn3K5UjcNxGeCdwoAkkkuXsHB85kMoVZmjYSBMA7iibW+9leMcYPIzkAjgW /e2iHmS/v90LMwZT
GodsOAeVJTPJyc7M9zQA61W7/tVmlll/1j7k8p9uznb8xbZ02/dGfX+KgDYp AFABQBUk/wCQxbf9
e8v/AKFHTAt0gCgAoAKACgAoAKACgAoAKACgAoAKAM7VOkn/AFzX/wBCNaUv jQpbGTpn/H1H/wBd
R/Ouqr8BC3Ojb7xrz2amHpQYzx7GAbHUjPauvEdDOJtbbn/nrF/37P8A8VXO WG25/wCesX/fs/8A
xVABtuf+esX/AH7P/wAVQAbbn/nrF/37P/xVABtuf+esX/fs/wDxVABtuf8A nrF/37P/AMVSANtz
/wA9Yv8Av2f/AIqgA23P/PWL/v2f/iqADbc/89Yv+/Z/+KoANtz/AM9Yv+/Z /wDiqADbcf8APWL/
AL9n/wCKoAqus39rQZkjLfZ5cEIcD5o/emBa23H/AD1i/wC/Z/8AiqQBtuf+ esX/AH7P/wAVQAbb
n/nrF/37P/xVABtuf+esX/fs/wDxVABtuf8AnrF/37P/AMVQAbbn/nrF/wB+ z/8AFUAG25/56xf9
+z/8VQAbbn/nrF/37P8A8VQAbbn/AJ6xf9+z/wDFUAG25/56xf8Afs//ABVA Btuf+esX/fs//FUA
G25/56xf9+z/APFUAG25/wCesX/fs/8AxVAFHUQ4SXzGVjsXlVx/Efc1pS+N ClsZmmf8fUf/AF1H
866qvwELc6NvvGvPZqYuj/8AHzH9D/KuvEdDOJekt4LrVpkuYY5lSCMosihg pLPkjPTOB+QrmLKc
GoXaWCOPLdYLGK4kaTJZyQ2R177evb0OeGAWVk0rtKltbRkXcjfaQf3pAlOR jb3A2/e6H8KAAarf
tBC6QxuRbJcSkAKuGzgZZxtwF6/N64HQgD7e83akJ/3m2dzEcxEIEH+rYPjB yc4x180dcCkA1dSv
RbWrM1uZLuNHQiMgR5eNSCN3zf6z1HT3pgPl1C+E5tIokknRm3OiDBAVD90u Mf6wD7x6dOeEA6HU
rqQGYpCsKyxRlQ24neE/iHHBfrzn26kALOWe4v7O5laPbNaSOiKhBQExnBOT nqOcCgDWoAKAKcn/
ACGLf/r3l/8AQo6ALlABQAUAFABQAUAFABQAUAFABQAUAFAGdqnST/rmv/oR rSl8aFLYydM/4+o/
+uo/nXVV+AhbnRt94157NTD0pis8ZCFjjoMenvXXiOhnE1LiKK62/adO87b9 3zFRsfTJrmLHth9+
+yZt67WyEO4c8Hnkcn86AHI5QYS0kUZJwNg5JyT19aAImiibyt2nZ8n/AFWV T5Ppzx0HT0oAfwI1
j+xN5a42rhMDHTAz2wKAKaabax2QtFsGEfybyBHmTaQRu556c/U0wLDW9u0C wNpimFTlYyke0H1A
z7n86QEhwd2bJjuYMeE5Ixg9eowPyFADI4oopmmi07ZK+dzqqBmzycnNAE3n Sf8APtL+a/40AHnS
f8+0v5r/AI0AVXkc6tAfIkBFvLgErk/NH70wLXnSf8+0v5r/AI0gDzpP+faX 81/xoAPOk/59pfzX
/GgA86T/AJ9pfzX/ABoAPOk/59pfzX/GgA86T/n2l/Nf8aADzpP+faX81/xo APOk/wCfaX81/wAa
ADzpP+faX81/xoAPOk/59pfzX/GgA86T/n2l/Nf8aADzpP8An2l/Nf8AGgA8 6T/n2l/Nf8aAKOos
WSUtGyfIvDY/vH0NaUvjQpbGZpn/AB9R/wDXUfzrqq/AQtzo2+8a89mpi6P/ AMfMf0P8q68R0M4m
hKZp7+SBLmSBY4kfMYUlixYc7gf7o6eprmLIodXX7NE80UhY2yXErRr8qKwO Tye2DxyfTPNAENvc
3MkxKT3MkguWTyjBiLYJCD823soz97qO/SgCR9es444XlDxiWMS4dkBVD0ON 3PQ8Lk+3SgCa1+0X
Ba4+1OoEzp5W1SmFcr6bs4Hr19uKAItP1PzLCF51kEhtvNLMAokwBuIyRjkj rgc5HHNADodZgn2L
BFLLI275I9rYK7c5YHb0YHrjt14oAf8A2rC2xoopZYWZFMqgBVL7duQSD0ZT wO/1oALDVrW/mMUD
ZO3evzKdy8c4BJHUcNg89ODgAvUAFAFST/kMW/8A17y/+hR0AW6ACgAoAWgA oAKAEoAKACgAoAKA
FoAKAM7VOkn/AFzX/wBCNaUvjQpbGTpn/H1H/wBdR/Ouqr8BC3Ojb7xrz2am HpTrHPGzsFGOpOO1
deI6GcTRnFvJN50d/wCQ5UKxjZDuAyRncD0yenrXMWMNvp/kywrcKqSW62+B IPlQbgMZ7/MetAE9
vJaW8ZRLiMguz8uOrMWP6mgCutvZxpEkV80YSJYW2yLl1XoCccdTyuDz9MAD 0S2SXKagyxby/kiR
QuScnnG7rzjPt04oAYbawMNvH9qH+jxeXGfMXIwVIP1BRT6e1AC20NpBcm4N 95srbss7pzkIOwH9
wfrQBUFoqSRQwXcSWqNEzZnUlym3BK7evygcMBxnHUFgXrVbW1wFvtyKuyON pF2ovoMYz0HJyfzO
UBZ+1W3/AD8Rf99igA+1W/8Az8Rf99igCq9xCdWgYTRlVt5ckMMD5o6YFr7V b/8APxF/32KQB9qt
/wDn4i/77FAB9qt/+fiL/vsUAH2q3/5+Iv8AvsUAH2q3/wCfiL/vsUAH2q3/ AOfiL/vsUAH2q3/5
+Iv++xQAfarf/n4i/wC+xQAfarf/AJ+Iv++xQAfarb/n4i/77FAB9qt/+fiL /vsUAH2q3/5+Iv8A
vsUAH2q3/wCfiL/vsUAUdRkSRJTG6uNijKnP8RrSl8aFLYzNM/4+o/8ArqP5 11VfgIW50bfeNeez
UxdH/wCPmP6H+VdeI6GcTTmuJ/tLQW0McjIiu5kkKDBJAxhTn7p9O1cxY6K+ tpIYZDKsfnKjIrsA
3zfdGPU4P5GgCul/Of3r28Yt/PMO4SkvnfsB27cdffpQBZF7aEREXUJExxGf MHznOMD15oAgiv5G
JklgRLczNCrrIWbIcoMrgYBI7E9R7kAEl1fwW8VyVkjkmt4mkaEON2AM8jt2 /OgB099bQLPmVGeC
MyPErAuABnp/nrQA4Xds0kcYuIi8i7kUOMsPUDuOKAJqACgAoAqSf8hi3/69 5f8A0KOgC3QAUAFA
BQAUAFABQAUAFABQAUAFABQBnap0k/65r/6Ea0pfGhS2MrTP+PqP/rqP511V fgIW50bfeNeezUxd
H/4+Y/of5V14joZxNKaK5jvHuLdIpPMjVGWSQpt2ljkYU5zu9unvXMWVDpLL bTRK0bMbFbVHIwcg
Nn6A5X8qALNlp0FuzTPBCbgyyP5oQbsMxI5xnocUAUjo8phhjbY/+ipbyDzn RRtzk4X74O48HHTr
zwAWYrO5IMEwiWAXDTB1clm/eFwMYAHOM8np75ABWn0eWRbhBsIfzmR2mc8u G42fdXG7rz06c8AD
pNHeQzRswCOZWWQyu2C4bpHwoxvPOTnHQZ4AJDp0r3pmdUIkkSVv374QqF4C DAblepx16cYIBqUA
FABQBUk/5DFv/wBe8v8A6FHQBboAKACgAoAKACgAoAKACgAoAKACgAoAztU6 Sf8AXNf/AEI1pS+N
ClsZWmf8fUf/AF1H866qvwELc6NvvGvPZqYelIHnjUkgY7Ejt7V14joZxNKd 7aBwjtcsxGdsfmOQ
PU7c479fQ+lcxZMkMMiK6SSMrDIYTMQR69aAKyXFk8vlh7n75TcfNCbgcY3H jrx160AW/s8f96X/
AL+t/jQBXSS0efyVkm3ZIB3yBSR1AboSMHgHPB9DQBY+zx/3pf8Av63+NAB9 nj/vS/8Af1v8aAD7
PH/el/7+t/jQAfZo/wC9L/39b/GgA+zR/wB6X/v63+NACfZ0/vS/9/W/xoAr PCg1aBcyYNvLnMjZ
+9H3zxQBa+zJ/el/7+t/jQAfZk/vS/8Af1v8aAD7Mn96X/v63+NACfZo/wC9 L/39b/GgA+zR/wB6
X/v63+NAC/Zo/wC9L/39b/GgA+zx/wB6X/v63+NAB9nj/vS/9/W/xoAPsyf3 pf8Av63+NAB9mT+9
L/39b/GgA+zJ/el/7+t/jQAfZo/70v8A39b/ABoAPs0f96X/AL+t/jQBR1BB GkoUsfkU/MxP8R9a
0pfGhS2MzTP+PqP/AK6j+ddVX4CFudG33jXns1MXR/8Aj5j+h/lXXiOhnEvS SC21KWaRJSkkMaqY
4mflS5OdoOPvDrXMWUVt7yKzYZuFe3sI/LjRjtMoD+n3jwOOhyMg8UAWrKxd 0YzzTbPtMjiAhQvE
pKnpu64PX9KAKJjvxBaDzrlG+zIV+SSRjKcls4YAfw/f+X6DNAGhDvivxHAL gIZHMsckfyKDk7lb
HJLY43H7x4GOACnAL6W6kCPLGzxtIUdZAiSBlKqWYkEfeB2YBGfbAAt0t5Ik UzSTRRTFpGUJIxT7
oRcIQw+UHPOM59qANi2EgtohMSZdg3kgAk454HH5UASUAFABQBUk/wCQxb/9 e8v/AKFHQBboAKAC
gAoAKACgAoAKACgAoAKACgAoAztU6Sf9c1/9CNaUvjQpbGVpn/H1H/11H866 qvwELc6NvvGvPZqY
elBjPHsYA46kZ7V14joZxNnbcf8APWL/AL9n/wCKrmLDbcf89Yv+/Z/+KoAN tx/z1i/79n/4qgA2
3H/PWL/v2f8A4qgA23H/AD1i/wC/Z/8AiqADbcf89Yv+/Z/+KoANtx/z1i/7 9n/4qgA23H/PWL/v
2f8A4qgA23H/AD1i/wC/Z/8AiqADbcf89Yv+/Z/+KoANtx/z1i/79n/4qgCs 4m/taDMkZb7PLghD
gfNH70AWdtx/z1i/79n/AOKoAXbcf89Yv+/Z/wDiqADbcf8APWL/AL9n/wCK oATbcf8APWL/AL9n
/wCKoANtx/z1i/79n/4qgA23H/PWL/v2f/iqADbcf89Yv+/Z/wDiqADbcf8A PWL/AL9n/wCKoANt
x/z1i/79n/4qgA23H/PWL/v2f/iqADbcf89Yv+/Z/wDiqADbcf8APWL/AL9n /wCKoANtx/z1i/79
n/4qgClqAcJL5jKx2Lyq4/iPua0pfGhS2MzTP+PqP/rqP511VfgIW50bferz 2amLo/8Ax8x/Q/yr
rxHQziXZLeC61WZLmGOZUgjKLIoYKSz5Iz0zgfkK5iynBf3aWCOPLdYLGK4k aTJZyQ2R177evb0O
eACX/mF/9v8A/wC3NABJqdzbwvcyiKSLzJkWNVKsNm8glsnOdnoOvtQA1pbq 3v7gNJHLcyRRLEI4
cA8yHGC/oGP3h/iARx6ldlp5tnzLHHH5J/56GZ48j5sDp0zzwN3GaANPT555 onFzGEljfaQMc8A8
gM2OvTJ9e9AFqgAoAKACgCpJ/wAhi3/695f/AEKOgC3QAUAFABQAUAFABQAU AFABQAUAFABQBnap
0k/65r/6Ea0pfGhS2MrTP+PqP/rqP511VfgIW50bferz2amHpTFZ4yELHHQY 9PeuvEdDOJqXEUV1
t+0ad5237vmKjY+mTXMWObD799kzb12tkIdw54PPI5P50AN8qL7T9p/s79// AM9dqbumOuc9OKAG
W1tFayPJFYt5rszNJhNx3NuIznp/gKABbW1SN410pFSTG9QkYDY6ZGeaAHrF EsYjXTsIFKhQqYwe
oxnoe9ADocQRiOGyaNF6KgQAfhmgB/nP/wA+0v5r/jQAec//AD7S/mv+NAB5 z/8APtL+a/40AHnP
/wA+0v5r/jQBA/nNfxTi3k2pE6EZXOWKEd/9k0AT+c//AD7S/mv+NAB50n/P tL+a/wCNAB50n/Pt
L+a/40AHnP8A8+0v5r/jQAec/wDz7S/mv+NAB5z/APPtL+a/40AHnP8A8+0v 5r/jQAec/wDz7S/m
v+NAB5z/APPtL+a/40AHnP8A8+0v5r/jQAec/wDz7S/mv+NAB5z/APPtL+a/ 40AHnP8A8+0v5r/j
QBS1BiySlkZPkXhsf3j6GtKXxoUtjM0z/j6j/wCuo/nXVV+AhbnRt96vPZqY uj/8fMf0P8q68R0M
4m7XMWFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQA UAZ2qdJP+ua/+hGt
KXxoUtjK0z/j6j/66j+ddVX4CFudG33q89mpi6P/AMfMf0P8q68R0M4m7XMW FABQAUAFABQAUAFA
BQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAZ2qdJP8Armv/AKEa0pfG hS2MrTP+PqP/AK6j
+ddVX4CFudG33q89mp//2Q==
------=_NextPart_000_0027_01C55B9C.B4152E80--

Attached files
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Relaciones linea-cabecera

Mensaje por ignacio »

De la ayuda:
TDataSet:OnPostChange
Evento que se produce después de que se cambia de posición el puntero de
navegación del TDataSet.
Parametros:
<oSender>:
Objeto que lanza el evento.
<nOperation>
Tipo de operación
<nParam1>
Primer parametro según operación
<nParam2>
Segundo parametro según operación
Valor Retorno:
NIL
nOperation es: (dataset.ch)
#define XA_DSNAV_GOTOP 0
#define XA_DSNAV_GOBOTTOM 1
#define XA_DSNAV_GOTO 2
#define XA_DSNAV_KEYGOTO 3
#define XA_DSNAV_SKIP 4
#define XA_DSNAV_SEEK 5
#define XA_DSNAV_LOCATE 6
#define XA_DSNAV_CONTINUE 7
#define XA_DSNAV_ADDNEW 8
#define XA_DSNAV_DELETE 9
#define XA_DSNAV_EDIT 10
#define XA_DSNAV_OTHER 11
Param1 y Param2 dependen del tipo de operación y el evento :
XA_DSNAV_GOTOP: No se usan
XA_DSNAV_GOBOTTOM: No se usan
XA_DSNAV_GOTO: Nº de Registro actual
XA_DSNAV_KEYGOTO: Nº de Registro actual
XA_DSNAV_SKIP: Registros a saltar, Registros saltados
XA_DSNAV_SEEK: Nº de Registro actual, lExito
XA_DSNAV_LOCATE: Expresión de busqueda
XA_DSNAV_CONTINUE: No se usan
XA_DSNAV_ADDNEW: Nº de Registro actual, Nº de Registro anterior
XA_DSNAV_EDIT: Nº de Registro actual
XA_DSNAV_DELETE: Nº de Registro actual, Nº de Registro anterior
XA_DSNAV_OTHER: No se usan
Un saludo,
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Relaciones linea-cabecera

Mensaje por jfgimenez »

Fredy,
el "secreto" está en tener claro y asimilar que los formularios son clases,
y que reciben mensajes directamente de windows (todos los WM_????) y algunos
más. Lo que pasa es que la mayoría de esos mensajes se procesan en las
clases anteriores de la jerarquía (TForm, TWincontrol, TControl,...) y
disparan eventos, que son los que aparecen en el inspector de objetos.
P.ej., cuando el formulario recibe el mensaje WM_SIZE de windows, la clase
TForm se encarga de realinear los controles que contiene y de ejecutar a
continuación el evento OnSize. Pero no hay nada que nos impida sobreescribir
alguno de estos métodos (aunque muchas veces sea desaconsejable), y por
supuesto, añadir los que queramos.
Y es éste precísamente el caso. El mensaje WM_XAILER es un comodín para
casos así. Este mensaje no lo procesa directamente el formulario en TForm, y
por lo tanto podemos procesarlo nosotros. Basta con declarar y añadir el
método WMXailer(), que recibirá como parámetros wparam y lparam como todos
los demás mensajes de windows. Pero al ser un mensaje propio, esos
parámetros no tienen ningún significado a priori; basta con que cada uno sea
un entero de 32 bits, y ya le daremos nosotros el significado que queramos.
Por otro lado, cuado enviamos nosotros "a pelo" el mensaje WM_XAILER a un
formulario, éste lo recibirá, tanto si lo procesamos como si no. Además, en
windows hay dos formas de enviar mensajes a un control o ventana:
SendMessage() o PostMessage() (tienen su correspondencia en los métodos
SendMsg() y PostMsg() de TControl). El primero envía el mensaje
inmediatamente y no retorna de la llamada hasta que ese mensaje se ha
procesado. El segundo, que es el que nos interesa en este momento, envía el
mensaje a la cola y retorna inmediatamente. Posteriormente se van procesando
los mensajes según el orden en el que se encuentren en la cola (salvo
algunos casos especiales), y cuando le llegue el turno a WM_XAILER se
procesará también.
Resumiendo, este es un truco para conseguir que ante un evento dado, se
procese todo el código necesario, y que se vuelva a generar otro evento que
se procesará posteriormente en un segundo paso.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder