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.

sobre MENUS

Foro de Xailer profesional en español
Responder
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

sobre MENUS

Mensaje por Francisco Sanchez »

Vamos a ver si me explico con claridad. Estoy tratando de forzar el menu
para que antes de ejecutar cualquiera de sus opciones, ejecute un metodo o
funcion de la clase-formulario en la-el cual se ha creado este menu. He
probado a hacerlo con EvalWhen pero no es un evento es un metodo. Como
tendria que hacerlo ?. Ojo no puedo creo que me sirva el evento onclick pues
estoy leyendo el menu desde una dbf con sus actions correspondientes que son
clases cuyo nombre esta grabado en la propia dbf.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

sobre MENUS

Mensaje por ignacio »

Francisco,
Si te he entendido bien, la idea es que se ejecute cierto código cada vez se
utilice una opción de menú y antes de que esta se ejecute. Es correcto?
Gracias
"Francisco Sanchez" <francisco@softwaretotal.biz> escribió en el mensaje
news:424b07f6$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Vamos a ver si me explico con claridad. Estoy tratando de forzar el menu
> para que antes de ejecutar cualquiera de sus opciones, ejecute un metodo o
> funcion de la clase-formulario en la-el cual se ha creado este menu. He
> probado a hacerlo con EvalWhen pero no es un evento es un metodo. Como
> tendria que hacerlo ?. Ojo no puedo creo que me sirva el evento onclick
> pues estoy leyendo el menu desde una dbf con sus actions correspondientes
> que son clases cuyo nombre esta grabado en la propia dbf.
>
>
> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

sobre MENUS

Mensaje por Francisco Sanchez »

correctisimo.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:424ba949$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Francisco,
>
> Si te he entendido bien, la idea es que se ejecute cierto código cada vez
> se utilice una opción de menú y antes de que esta se ejecute. Es correcto?
>
> Gracias
>
> "Francisco Sanchez" <francisco@softwaretotal.biz> escribió en el mensaje
> news:424b07f6$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>> Vamos a ver si me explico con claridad. Estoy tratando de forzar el menu
>> para que antes de ejecutar cualquiera de sus opciones, ejecute un metodo
>> o funcion de la clase-formulario en la-el cual se ha creado este menu. He
>> probado a hacerlo con EvalWhen pero no es un evento es un metodo. Como
>> tendria que hacerlo ?. Ojo no puedo creo que me sirva el evento onclick
>> pues estoy leyendo el menu desde una dbf con sus actions correspondientes
>> que son clases cuyo nombre esta grabado en la propia dbf.
>>
>>
>> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>>
>>
>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

sobre MENUS

Mensaje por ignacio »

Francisco,
No existe ningún evento especfico para ello, pero siempre puedes disparar
más de una opción en el ACTION del menú.
MENUITEM ... ACTION ( Funcion1(), Funcion2() )
Saludos,
"Francisco Sanchez" <francisco@softwaretotal.biz> escribió en el mensaje
news:424ba998$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> correctisimo.
>
> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:424ba949$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>> Francisco,
>>
>> Si te he entendido bien, la idea es que se ejecute cierto código cada vez
>> se utilice una opción de menú y antes de que esta se ejecute. Es
>> correcto?
>>
>> Gracias
>>
>> "Francisco Sanchez" <francisco@softwaretotal.biz> escribió en el mensaje
>> news:424b07f6$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>>> Vamos a ver si me explico con claridad. Estoy tratando de forzar el menu
>>> para que antes de ejecutar cualquiera de sus opciones, ejecute un metodo
>>> o funcion de la clase-formulario en la-el cual se ha creado este menu.
>>> He probado a hacerlo con EvalWhen pero no es un evento es un metodo.
>>> Como tendria que hacerlo ?. Ojo no puedo creo que me sirva el evento
>>> onclick pues estoy leyendo el menu desde una dbf con sus actions
>>> correspondientes que son clases cuyo nombre esta grabado en la propia
>>> dbf.
>>>
>>>
>>> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>>>
>>>
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

sobre MENUS

Mensaje por jfgimenez »

Paco,
prueba lo siguiente:
//---------------------------------------------------------- --------------------
METHOD WMCommand( nWParam, nLParam ) CLASS TPrincipal
IF nLParam == 0
LogDebug( "Se está ejecutando una opción del menú" )
ENDIF
RETURN Super:WMCommand( nWParam, nLParam )
//---------------------------------------------------------- --------------------
La idea es "interceptar" el mensaje WM_COMMAND en el formulario donde está
el menú. Este mensaje es el que se recibe cada vez que se selecciona una
opción del menú. Pero ojo, también se recibe en algunos otros casos. En
general, si nLParam es 0, es que se ha seleccionado una opción del menú.
Es muy importante que el código que ejecutes aquí sea lo más liviano
posible, y que no interfiera con el normal procesamiento de este mensaje.
P.ej., no intentes mostrar otro formulario desde aquí, porque seguramente
vas a provocar una serie de "efectos secundarios".
También es muy importante que termines llamando al método Super, para
permitir a Xailer procesar el mensaje. De lo contrario, nunca se ejecutará
el código asociado a cada opción del menú.
Como aclaración: en Xailer, los formularios son siempre clases derivadas de
TForm, y por lo tanto heredan todos los métodos, propiedades y eventos de
las clases anteriores de la jerarquía. Al mismo tiempo, siempre podemos
"sobrecargar" cualquiera de esos métodos, y hacer lo que queramos ahí, y
terminar llamando al método super o no según nuestras necesidades. Esta es
la gran ventaja de la OOP ;-)
Por otro lado, cuando la aplicación recibe un mensaje de windows (WM_?????),
Xailer se encarga de ejecutar un método, siempre que exista claro, con ese
mismo nombre (pero sin el guión de subrayado) del objeto al que va
destinado. Esto quiere decir que p.ej. podemos crear los métodos
WMInitMenu(), WMPaint(), WMSysKeyDown() o cualquier otro que queramos, y
Xailer se encargará de ejecutarlo cuando se reciba el mensaje
correspondiente. Por supuesto, los parámetros que se reciben son siempre
WParam y LParam, y habrá que consultar la documentación del API para saber
qué tenemos que hacer y qué tenemos que retornar.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

sobre MENUS

Mensaje por Francisco Sanchez »

ya pero eso no puedo hacerlo pues son muchas clases independientes las
implicadas y no estan disponibles asi como asi los metodos correspondientes
que quiero ejecutar antes del action del menu el cual estoy leyendo del
campo de una dbf.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL -
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

sobre MENUS

Mensaje por ignacio »

Francisco,
Creo que entonces me has respondio mal a mi anterior Email o no te entiendo.
Es un evento que quieres que se dispare JUSTO antes del action del botón.
Entonces en ese momento JUSTO el escenario es IDENTICAMENTE IGUAL a cuando
realmente se ejecuta la acción del botón.
Un saludo,
"Francisco Sanchez" <francisco@softwaretotal.biz> escribió en el mensaje
news:424bbcd7$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> ya pero eso no puedo hacerlo pues son muchas clases independientes las
> implicadas y no estan disponibles asi como asi los metodos
> correspondientes que quiero ejecutar antes del action del menu el cual
> estoy leyendo del campo de una dbf.
>
> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL -
>
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

sobre MENUS

Mensaje por Francisco Sanchez »

Vamos a ver creo que esto ultimo me servira. Tendre que hacer algunas
pruebas. La idea es la siguiente. Vamos a ver en un apartado del programa
ahi tengo un formulario con su correspondiente menu, toolbar, browse, etc...
Por supuesto ataco las correspondientes dbf mediante dbfs temporales.
Entonces el tema es el siguiente : En el menu de este formulario hay
opciones en las cuales se hace referencia a datos de la dbf de este
formulario. Al trabajar con ficheros temporales, la dbf original en un
momento dado puede no estar actualizada con los ultimos cambios. Y estuve
probando con un metodo reload que lo que hace es actualizar la dbf original
y recargar de nuevo la dbf temporal. Y claro la idea es ejecutar este metodo
reload siempre que selecciones alguna opcion del menu de arriba, para
asegurarme que si es una apartado que tenga que mostrar informacion de la
dbf original del formulario que estoy trabajando, que este siempre
actualizada cuando abra el nuevo apartado.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Responder