Menu PopUp automatico al presionar sobre boton Tbar

Menu PopUp automatico al presionar sobre boton Tbar

Postby RSalazarU » Sat Sep 30, 2017 12:52 pm

Hola amigos del foro:

Estoy intentando hacer los siguiente:

"al hacer click sobre un botón de la barra de herramienta, que aparezca el menú PopUp automáticamente y si no se selecciona una opción del menú, que se ejecute la acción del botón"

Para esto modifique la clase TBtnBmp:
Code: Select all  Expand view

METHOD LButtonDown( nRow, nCol ) CLASS TBtnBmp
   local oWnd

   if ::lDrag .or. ! Empty( ::oDragCursor )
      return Super:LButtonDown( nRow, nCol )
   endif

   ::lWorking = .T.
   ::lBtnUp   = .F.

   SetFocus( ::hWnd )    // To let the main window child control
   SysRefresh()          // process its valid

   //Aca el cambio...
   //copiado de ::LButtonUp() (codigo que muestra PopUp)
   if ::oPopup != nil
      if ::oWnd:oWnd != nil .and. Upper( ::oWnd:oWnd:Classname() ) == "TBAR"
         oWnd := ::oWnd:oWnd
      else
         oWnd := ::oWnd
      endif
      //oWnd:NcMouseMove() // close the tooltip
      oWnd:oPopup = If( ValType( ::oPopup ) == 'B', Eval( ::oPopUp, Self ), ::oPopUp )

      oWnd:oPopup:Activate( ::nTop + ::nHeight(), Max( ::nLeft, 1 ), oWnd, .F. )
      if ValType( ::oPopUp ) == 'B'
         oWnd:oPopUp:End()
      endif
      oWnd:oPopup = nil
      ::Refresh()
   endif
   //...hasta aca

   if GetFocus() == ::hWnd
      ::lCaptured = .T.
      ::lPressed  = .T.
      ::Capture()
      ::Refresh() // .F.
   endif

   ::lWorking = .F.

   if ::lBtnUp
      ::LButtonUp( nRow, nCol )
      ::lBtnUp = .F.
   endif

return 0
 


Este cambio casi logra el efecto deseado, solo falta la parte de:

".... si no se selecciona una opción del menú, que se ejecute la acción del botón"

Alguien habrá realizado algo similar.

De antemano, cualquier ayuda sera bienvenida.

Rolando
Cochabamba, Bolivia.
FWH 13.02, xharbour 121 Rev 6717
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby cnavarro » Sat Sep 30, 2017 3:29 pm

Rolando, no entiendo bien lo que necesitas, pero para que aparezca un menu popup en un boton ...

Code: Select all  Expand view


   DEFINE BUTTON ::oBtnSave OF ::oBar RESOURCE "save" ;
      PROMPT "Save" ;
      ACTION ( ::SaveFile( , , , ), ::oActivo:SetFocus() ) ;   //AQUI
      MENU ::MenuSaveAs() ;                                             //AQUI
      TOOLTIP FWString( "Save" )


 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby RSalazarU » Sun Oct 01, 2017 3:12 am

Cristobal, gracias por responder.

lo que quiero hacer es los siguiente:

"al hacer click sobre un botón de la barra de herramienta, que aparezca el menú PopUp automáticamente y si no se selecciona una opción del menú, que se ejecute la acción del botón"

Colocar/asignar un menu PopUp a un boton de la barra es sencillo, pero para "mi gusto" no es muy practico.
No es practico porque el usuario tiene que presionar sobre la "flechita" negra que aparece a la derecha del botón; el área de la "flechita" es muy pequeña y a veces el usuario ni se percata que existe.

Seria mas practico que al hacer click sobre el boton aparezca el menu PopUp (automaticamente) y si el usuario NO selecciona, ninguna opcion del menu PopUp entonces "deberia" ejecutarse la accion del boton (por haber hecho click sobre el boton)

Para lograr esto modifique el metodo LButtonDown(..) de la clase TBtnBmp()
Code: Select all  Expand view

METHOD LButtonDown( nRow, nCol ) CLASS TBtnBmp
   local oWnd

   if ::lDrag .or. ! Empty( ::oDragCursor )
      return Super:LButtonDown( nRow, nCol )
   endif

   ::lWorking = .T.
   ::lBtnUp   = .F.

   SetFocus( ::hWnd )    // To let the main window child control
   SysRefresh()          // process its valid

   //Aca el cambio...
   //copiado de ::LButtonUp() (codigo que muestra PopUp)
   if ::oPopup != nil
      if ::oWnd:oWnd != nil .and. Upper( ::oWnd:oWnd:Classname() ) == "TBAR"
         oWnd := ::oWnd:oWnd
      else
         oWnd := ::oWnd
      endif
      //oWnd:NcMouseMove() // close the tooltip
      oWnd:oPopup = If( ValType( ::oPopup ) == 'B', Eval( ::oPopUp, Self ), ::oPopUp )

      oWnd:oPopup:Activate( ::nTop + ::nHeight(), Max( ::nLeft, 1 ), oWnd, .F. )
      if ValType( ::oPopUp ) == 'B'
         oWnd:oPopUp:End()
      endif
      oWnd:oPopup = nil
      ::Refresh()
   endif
   //...hasta aca

   if GetFocus() == ::hWnd
      ::lCaptured = .T.
      ::lPressed  = .T.
      ::Capture()
      ::Refresh() // .F.
   endif

   ::lWorking = .F.

   if ::lBtnUp
      ::LButtonUp( nRow, nCol )
      ::lBtnUp = .F.
   endif

return 0
 


Espero haberme hecho entender.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby Giovany Vecchi » Sun Oct 01, 2017 8:28 pm

Talvez seja isto
Invoque o method ShowPopUp()

Code: Select all  Expand view
 DEFINE BUTTON ::oBtnImpressoes of ::oBar          ;
    RESOURCE "B32_PRINTER"  noborder             ;
    TOOLTIP {"Impressões validas do atual Título Posicionado","Impressões - F9"}    ;
        ACTION (  ::oBtnImpressoes:ShowPopUp(),;
                  ::oBrwProtesto:SetFocus()) ;
        MENU ::oMenuPrns          
 
User avatar
Giovany Vecchi
 
Posts: 207
Joined: Mon Jun 05, 2006 9:39 pm
Location: Brasil

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby RSalazarU » Mon Oct 02, 2017 12:54 am

Giovany, gracias por contestar.

Tu código muestra el PopUp, pero no logra cumplir la ultima parte del enunciado:

".... si no se selecciona una opción del menú, que se ejecute la acción del botón"
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby rubenfernandez01 » Mon Oct 02, 2017 11:45 pm

Hola Rsalazar.
Al dar click en el botón que muestra el menú popup, deberías colocar un timer de x segundos y si nadie seleccionó una opción popup largas una acción.

Saludos
Ruben Dario Fernandez

Gracias y saludos cordiales.
Rubén Dario Fernández
Fwh 16.08 - Bcc 7.2 - Synwrite
rubenfernandez01
 
Posts: 46
Joined: Sun Sep 20, 2015 1:41 am

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby rubenfernandez01 » Mon Oct 02, 2017 11:49 pm

RSalazar, lo mejor sería una ribbonbar. El botín muestra una flechita, si quiere el menú, acciona la flechita, sino es click en el botón y listo.
Saludos

Gracias y saludos cordiales.
Rubén Dario Fernández
Fwh 16.08 - Bcc 7.2 - Synwrite
rubenfernandez01
 
Posts: 46
Joined: Sun Sep 20, 2015 1:41 am

Re: Menu PopUp automatico al presionar sobre boton Tbar

Postby RSalazarU » Tue Oct 03, 2017 2:29 am

Ruben, gracias por responder.

El problema en la solución del timer es poder indicar el tiempo, cuanto tiempo.

la Ribbonbar es una mejor solución, el "botin" indica que hay mas opciones, sin embargo no tiene el efecto que busco.

De todas maneras, gracias.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 8 guests