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.

Duda sobre el dbBrowse

Foro público de Xailer en español
Responder
rcardenas
Mensajes: 55
Registrado: Lun Oct 11, 2004 2:11 am

Duda sobre el dbBrowse

Mensaje por rcardenas »

Hola
Estoy tratando de Definir el Evento OnContexMenu desde programación y me
manda un error, pero desde el IDE funciona perfecto, como le hago. Lo que
quiero es tener menos programación repetitiva regada en todos los form y
solo colocarla en la Función de Crear el Browse.
--
Saludos
Raúl Eduardo Cárdenas S.
Law & Accounting System's, Inc.
Gerente General
Celular: (507) 672-8838
Email: rcardenas@fgs2002.com
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Duda sobre el dbBrowse

Mensaje por ignacio »

Raúl,
Hay muchas formas de hacer lo que deseas, dependiendo de si el Browse se
genera entero desde código o por el contario es un control más dentro del
formulario. Necesito saber exactamente que estas haciendo y el error que
tienes.
En cualquier lo normal es que lo hagas de la siguiente forma:
Crea una función que se encargue de crear el menú contextual recibiendo como
parametros oSender, nX, nY que son los parametros que manda el evento, luego
no tienes más que indicar en el evento OnContextMenu de todos los browses
que quieras lo siguiente:
{ |oSender, nX, nY }| MiFuncion( oSender, nX, nY ) }
Como ves en el inspector de objetos los eventos se pueden definir como
literales PERO TAMBIEN pueden ser codeblocks que se llamen directamente sin
necesidad de que se cree un nuevo método en el formulario.
Un saludo
--
Ignacio Ortiz
www.xailer.com
"Raúl Eduardo Cárdenas" <rcardenas@fgs2002.com> escribió en el mensaje
news:[email=419a0222@ozsrv2.ozlan.local...]419a0222@ozsrv2.ozlan.local...[/email]
> Hola
>
> Estoy tratando de Definir el Evento OnContexMenu desde programación y me
> manda un error, pero desde el IDE funciona perfecto, como le hago. Lo que
> quiero es tener menos programación repetitiva regada en todos los form y
> solo colocarla en la Función de Crear el Browse.
>
> --
> Saludos
>
> Raúl Eduardo Cárdenas S.
> Law & Accounting System's, Inc.
> Gerente General
> Celular: (507) 672-8838
> Email: rcardenas@fgs2002.com
>
>
>
>
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
>
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
rcardenas
Mensajes: 55
Registrado: Lun Oct 11, 2004 2:11 am

Duda sobre el dbBrowse

Mensaje por rcardenas »

Ignacio
He creado una función general que me crea todos los dbBrowse desde un archivo de datos, en la Forma solo coloco el control dbBrowse y le defino el Evento OnCreate y llamo mi función que se encarga de lo demas y la sección de la función es la siguiente:
//---------------------------------------------------------- -----------------
// Actualiza los valores del Browse y lo Recarga
//---------------------------------------------------------- -----------------
WITH OBJECT oBrw
:oDataSet := oDbf
:lAutoHScroll := .t.
:lFooter := .t.
:nFooterHeight := 10
:nTop := 50
:nLeft := 10
:nHeight := 520
:nWidth := 780
:nFreeze := 1
:OnChange := {|| oSBar:SetText(2,"Registro: "+ALLTRIM(STR(oDbf:KeyNo() )) +" / "+;
ALLTRIM(STR(oDbf:KeyCount() )) ),oSBar:Refresh()}
:OnDrawRow := { | oBrw, nRowPos | oBrw:nClrStdPane := If((oDbf:KeyNo()%2)=0,clAquamarine ,clBisque ) }
// :OnContexMenu := { | oSnd, nPosX , nPosY | ContextMenu( oSnd, nPosX , nPosY, oDbf, oSBar, cMdf ) }
END WITH
Como puedes ver el Evento OnContexMenu no funciona en este lugar, lo que he hecho es llamar desde el IDE la funcion:
FUNCTION ContextMenu( oBrw, nPosX , nPosY, oDBf, oSBar, cMdf, cTit )
Local oPopUp
MENU oPopup POPUP OF oBrw
MENUITEM "Modificar" ACTION RecEdit( oDBf, oBrw, oSBar, cMdf )
MENUITEM "Nuevo" ACTION RecAdic( oDBf, oBrw, oSBar, cMdf )
MENUITEM "Borrar" ACTION RecDele( oDBf, oBrw, cTit )
ENDMENU
oBrw:ShowPopupMenu( oPopup, nPosX, nPosY )
RETURN Nil
Esto conlleva tener que definir el evento en cada Form del sistema, y si lo puediera definir en la Funcion General seria solo en ella como logre hacer con el evento OnDrawRow.
De esta manera he podido reducir la programación de cada forma de unas 350 lí­neas a solo 70 lí­neas promedio. Además, al cambiar algo en la Función General se modifican todas las formas del Sistema. En la Documentacion del Browse.txt no aparece el evento OnContexMenu.
Te agradezco cualquiera ayuda para salir de este tema.
Gracias
--
Saludos

Raúl Eduardo Cárdenas S.
Law & Accounting System's, Inc.
Gerente General
Celular: (507) 672-8838
Email: rcardenas@fgs2002.com
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje news:419a04ae$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Raúl,
>
> Hay muchas formas de hacer lo que deseas, dependiendo de si el Browse se
> genera entero desde código o por el contario es un control más dentro del
> formulario. Necesito saber exactamente que estas haciendo y el error que
> tienes.
>
> En cualquier lo normal es que lo hagas de la siguiente forma:
>
> Crea una función que se encargue de crear el menú contextual recibiendo como
> parametros oSender, nX, nY que son los parametros que manda el evento, luego
> no tienes más que indicar en el evento OnContextMenu de todos los browses
> que quieras lo siguiente:
>
> { |oSender, nX, nY }| MiFuncion( oSender, nX, nY ) }
>
> Como ves en el inspector de objetos los eventos se pueden definir como
> literales PERO TAMBIEN pueden ser codeblocks que se llamen directamente sin
> necesidad de que se cree un nuevo método en el formulario.
>
> Un saludo
>
> --
> Ignacio Ortiz
> www.xailer.com
> "Raúl Eduardo Cárdenas" <rcardenas@fgs2002.com> escribió en el mensaje
> news:[email=419a0222@ozsrv2.ozlan.local...]419a0222@ozsrv2.ozlan.local...[/email]
> > Hola
> >
> > Estoy tratando de Definir el Evento OnContexMenu desde programación y me
> > manda un error, pero desde el IDE funciona perfecto, como le hago. Lo que
> > quiero es tener menos programación repetitiva regada en todos los form y
> > solo colocarla en la Función de Crear el Browse.
> >
> > --
> > Saludos
> >
> > Raúl Eduardo Cárdenas S.
> > Law & Accounting System's, Inc.
> > Gerente General
> > Celular: (507) 672-8838
> > Email: rcardenas@fgs2002.com
> >
> >
> >
> >
> > ---
> > Outgoing mail is certified Virus Free.
> > Checked by AVG anti-virus system (http://www.grisoft.com).
> > Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
> >
> >
>
>
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Duda sobre el dbBrowse

Mensaje por jfgimenez »

Raúl,
creo que el problema es un 'typo': es OnContextMenu (con una "t" antes de
Menu).
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Duda sobre el dbBrowse

Mensaje por ignacio »

Raúl,
Creo que José Gimenez te ha dado ya la solución. En cuanto a que OnContextMenu no esta en Browse.txt es perfectamente normal, has de fijarte en su completo árbol de herencia. OnContextMenu esta definido en su clase ancestra TControl.
Cuando la ayuda en linea esté terminada será mucho más facil encontrar dicha información, tan sólo tendrás que pular Shift+F1 bien en el inspector de objetos cuando el evento este en edición o incluso desde el propio editor cuando el cursor este situado en la palabra OnContextMenu. Además la documentación de la clase TBrowse indicará perfectamente su herencia y permitirá ir directamente a clases ancestras de TBrowse.
Si te sigue fallando manda el error.log por favor.
Un saludo,
--
Ignacio Ortiz
www.xailer.com
"Raúl Eduardo Cárdenas" <rcardenas@fgs2002.com> escribió en el mensaje news:[email=419a0972@ozsrv2.ozlan.local...]419a0972@ozsrv2.ozlan.local...[/email]
Ignacio
He creado una función general que me crea todos los dbBrowse desde un archivo de datos, en la Forma solo coloco el control dbBrowse y le defino el Evento OnCreate y llamo mi función que se encarga de lo demas y la sección de la función es la siguiente:
//---------------------------------------------------------- -----------------
// Actualiza los valores del Browse y lo Recarga
//---------------------------------------------------------- -----------------
WITH OBJECT oBrw
:oDataSet := oDbf
:lAutoHScroll := .t.
:lFooter := .t.
:nFooterHeight := 10
:nTop := 50
:nLeft := 10
:nHeight := 520
:nWidth := 780
:nFreeze := 1
:OnChange := {|| oSBar:SetText(2,"Registro: "+ALLTRIM(STR(oDbf:KeyNo() )) +" / "+;
ALLTRIM(STR(oDbf:KeyCount() )) ),oSBar:Refresh()}
:OnDrawRow := { | oBrw, nRowPos | oBrw:nClrStdPane := If((oDbf:KeyNo()%2)=0,clAquamarine ,clBisque ) }
// :OnContexMenu := { | oSnd, nPosX , nPosY | ContextMenu( oSnd, nPosX , nPosY, oDbf, oSBar, cMdf ) }
END WITH
Como puedes ver el Evento OnContexMenu no funciona en este lugar, lo que he hecho es llamar desde el IDE la funcion:
FUNCTION ContextMenu( oBrw, nPosX , nPosY, oDBf, oSBar, cMdf, cTit )
Local oPopUp
MENU oPopup POPUP OF oBrw
MENUITEM "Modificar" ACTION RecEdit( oDBf, oBrw, oSBar, cMdf )
MENUITEM "Nuevo" ACTION RecAdic( oDBf, oBrw, oSBar, cMdf )
MENUITEM "Borrar" ACTION RecDele( oDBf, oBrw, cTit )
ENDMENU
oBrw:ShowPopupMenu( oPopup, nPosX, nPosY )
RETURN Nil
Esto conlleva tener que definir el evento en cada Form del sistema, y si lo puediera definir en la Funcion General seria solo en ella como logre hacer con el evento OnDrawRow.
De esta manera he podido reducir la programación de cada forma de unas 350 lí­neas a solo 70 lí­neas promedio. Además, al cambiar algo en la Función General se modifican todas las formas del Sistema. En la Documentacion del Browse.txt no aparece el evento OnContexMenu.
Te agradezco cualquiera ayuda para salir de este tema.
Gracias
--
Saludos

Raúl Eduardo Cárdenas S.
Law & Accounting System's, Inc.
Gerente General
Celular: (507) 672-8838
Email: rcardenas@fgs2002.com
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje news:419a04ae$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Raúl,
>
> Hay muchas formas de hacer lo que deseas, dependiendo de si el Browse se
> genera entero desde código o por el contario es un control más dentro del
> formulario. Necesito saber exactamente que estas haciendo y el error que
> tienes.
>
> En cualquier lo normal es que lo hagas de la siguiente forma:
>
> Crea una función que se encargue de crear el menú contextual recibiendo como
> parametros oSender, nX, nY que son los parametros que manda el evento, luego
> no tienes más que indicar en el evento OnContextMenu de todos los browses
> que quieras lo siguiente:
>
> { |oSender, nX, nY }| MiFuncion( oSender, nX, nY ) }
>
> Como ves en el inspector de objetos los eventos se pueden definir como
> literales PERO TAMBIEN pueden ser codeblocks que se llamen directamente sin
> necesidad de que se cree un nuevo método en el formulario.
>
> Un saludo
>
> --
> Ignacio Ortiz
> www.xailer.com
> "Raúl Eduardo Cárdenas" <rcardenas@fgs2002.com> escribió en el mensaje
> news:[email=419a0222@ozsrv2.ozlan.local...]419a0222@ozsrv2.ozlan.local...[/email]
> > Hola
> >
> > Estoy tratando de Definir el Evento OnContexMenu desde programación y me
> > manda un error, pero desde el IDE funciona perfecto, como le hago. Lo que
> > quiero es tener menos programación repetitiva regada en todos los form y
> > solo colocarla en la Función de Crear el Browse.
> >
> > --
> > Saludos
> >
> > Raúl Eduardo Cárdenas S.
> > Law & Accounting System's, Inc.
> > Gerente General
> > Celular: (507) 672-8838
> > Email: rcardenas@fgs2002.com
> >
> >
> >
> >
> > ---
> > Outgoing mail is certified Virus Free.
> > Checked by AVG anti-virus system (http://www.grisoft.com).
> > Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
> >
> >
>
>
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
rcardenas
Mensajes: 55
Registrado: Lun Oct 11, 2004 2:11 am

Duda sobre el dbBrowse

Mensaje por rcardenas »

Mil gracias, teniais razón.
--
Saludos
Raúl Eduardo Cárdenas S.
Law & Accounting System's, Inc.
Gerente General
Celular: (507) 672-8838
Email: rcardenas@fgs2002.com
"José F. Giménez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:419a0d76$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Raúl,
>
> creo que el problema es un 'typo': es OnContextMenu (con una "t" antes de
> Menu).
>
>
> --
> Un saludo,
>
> José F. Giménez
>
>
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.797 / Virus Database: 541 - Release Date: 11/15/2004
Responder