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.

Posicionamiento de Menus popup

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

Posicionamiento de Menus popup

Mensaje por jose.luis »

Hola,
Dado este código (por ejemplo)
LOCAL oPopMenu
WITH OBJECT oPopMenu := XA_MenuBegin( Self, .T., "Opciones de
listado")
XA_MenuItem( "Opción 1", {|| MsgInfo("1")},,;
.T., .F., .F., .F., ;
.T., "PRINTER1",,">Opciones de listado 1" )
XA_MenuItem( "Opción 2", {|| MsgInfo("2")},,;
.T., .F., .F., .F., ;
.T., "PRINTER1",,">Opciones de listado 2" )
END
Quisiera posicionar ese menu encima de un botón. Pero me gustaría
posicionarlo de tal manera que quede justo encima del botón. Para ello
necesitaría saber la altura del menú a mostrar teniendo en cuenta que el
número de items del menú puede ser variable. ¿Como se puede averiguar?
Sería algo así (osender es un botón del formulario):
METHOD Button1Click( oSender ) CLASS TForm2
Local oPopMenu := ::CreaPopMenu()
::ShowPopupMenu( oPopMenu, oSender:nLeft, oSender:nTop -
oPopMenu:nHeight )
RETURN Nil
Saludos y gracias,
José Luis Capel
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Posicionamiento de Menus popup

Mensaje por jose.luis »

Hola,
Quizás no sea un tema específico de Xailer. Voy a mirar por el API de
Windows.
En cualquier caso, gracias.
Saludos,
José Luis Capel
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:[email=4520ce48@news.xailer.com...]4520ce48@news.xailer.com...[/email]
> Hola,
>
> Dado este código (por ejemplo)
>
> LOCAL oPopMenu
>
> WITH OBJECT oPopMenu := XA_MenuBegin( Self, .T., "Opciones de
> listado")
> XA_MenuItem( "Opción 1", {|| MsgInfo("1")},,;
> .T., .F., .F., .F., ;
> .T., "PRINTER1",,">Opciones de listado 1" )
> XA_MenuItem( "Opción 2", {|| MsgInfo("2")},,;
> .T., .F., .F., .F., ;
> .T., "PRINTER1",,">Opciones de listado 2" )
> END
>
>
> Quisiera posicionar ese menu encima de un botón. Pero me gustaría
> posicionarlo de tal manera que quede justo encima del botón. Para ello
> necesitaría saber la altura del menú a mostrar teniendo en cuenta que el
> número de items del menú puede ser variable. ¿Como se puede averiguar?
>
> Sería algo así (osender es un botón del formulario):
>
> METHOD Button1Click( oSender ) CLASS TForm2
> Local oPopMenu := ::CreaPopMenu()
>
> ::ShowPopupMenu( oPopMenu, oSender:nLeft, oSender:nTop -
> oPopMenu:nHeight )
>
> RETURN Nil
>
>
> Saludos y gracias,
> José Luis Capel
>
>
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Posicionamiento de Menus popup

Mensaje por jose.luis »

Hola,
Pues no se encontrar nada en el api de windows que me informe de la altura
de un menu popup...
Saludos,
José Luis Capel
"José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
news:45260280$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> Quizás no sea un tema específico de Xailer. Voy a mirar por el API de
> Windows.
>
> En cualquier caso, gracias.
> Saludos,
> José Luis Capel
>
>
> "José Luis Capel" <jose.luis@iaicom.com> escribió en el mensaje
> news:[email=4520ce48@news.xailer.com...]4520ce48@news.xailer.com...[/email]
>> Hola,
>>
>> Dado este código (por ejemplo)
>>
>> LOCAL oPopMenu
>>
>> WITH OBJECT oPopMenu := XA_MenuBegin( Self, .T., "Opciones de
>> listado")
>> XA_MenuItem( "Opción 1", {|| MsgInfo("1")},,;
>> .T., .F., .F., .F., ;
>> .T., "PRINTER1",,">Opciones de listado 1" )
>> XA_MenuItem( "Opción 2", {|| MsgInfo("2")},,;
>> .T., .F., .F., .F., ;
>> .T., "PRINTER1",,">Opciones de listado 2" )
>> END
>>
>>
>> Quisiera posicionar ese menu encima de un botón. Pero me gustaría
>> posicionarlo de tal manera que quede justo encima del botón. Para ello
>> necesitaría saber la altura del menú a mostrar teniendo en cuenta que el
>> número de items del menú puede ser variable. ¿Como se puede averiguar?
>>
>> Sería algo así (osender es un botón del formulario):
>>
>> METHOD Button1Click( oSender ) CLASS TForm2
>> Local oPopMenu := ::CreaPopMenu()
>>
>> ::ShowPopupMenu( oPopMenu, oSender:nLeft, oSender:nTop -
>> oPopMenu:nHeight )
>>
>> RETURN Nil
>>
>>
>> Saludos y gracias,
>> José Luis Capel
>>
>>
>
>
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Posicionamiento de Menus popup

Mensaje por jlalin »

José Luis,
no habí­a visto este mensaje.
Creo que podrí­as calcular la altura del Popup haciendo un wrapper a
GetSystemMetrics() para que te devuelva la altura de una barra del menú:
XA_FUNC( GETMENUBARHEIGHT )
{
hb_retnl( GetSystemMetrics( SM_CYMENU ) );
}
Y multiplicarlo por el número de items que tiene el popup.
nHeight := GetMenuBarHeight() * GetMenuItemCount( hMenu )
Con eso ya podrí­as ajustarlo a la posición del botón.
Saludos,
José Lalí­n
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Posicionamiento de Menus popup

Mensaje por jose.luis »

José,
Gracias por tu respuesta.
>
> Creo que podrías calcular la altura del Popup haciendo un wrapper a
> GetSystemMetrics() para que te devuelva la altura de una barra del menú:
>
> XA_FUNC( GETMENUBARHEIGHT )
> {
> hb_retnl( GetSystemMetrics( SM_CYMENU ) );
> }
>
> Y multiplicarlo por el número de items que tiene el popup.
>
> nHeight := GetMenuBarHeight() * GetMenuItemCount( hMenu )
>
> Con eso ya podrías ajustarlo a la posición del botón.
>
Voy a probarlo.
Saludos,
José Luis Capel
Responder