Página 1 de 1

Duda sobre el dbBrowse

Publicado: Mar Nov 16, 2004 2:31 pm
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

Duda sobre el dbBrowse

Publicado: Mar Nov 16, 2004 2:46 pm
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
>
>

Duda sobre el dbBrowse

Publicado: Mar Nov 16, 2004 3:02 pm
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
--

Duda sobre el dbBrowse

Publicado: Mar Nov 16, 2004 3:20 pm
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

Duda sobre el dbBrowse

Publicado: Mar Nov 16, 2004 5:13 pm
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
--

Duda sobre el dbBrowse

Publicado: Mar Nov 16, 2004 10:21 pm
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