Espero les sea de utilidad
* Menú en commandbutton
WITH NEWOBJECT("xForm")
.SHOW(1)
ENDWITH
RETURN
DEFINE CLASS xForm AS FORM
ADD OBJECT cmdMenu1 AS xCommandButton WITH ;
CAPTION = "Menu 1", TOP = 10, LEFT = 10,;
MenuOptions = "Opcion 1 . \<1,Opcion 1 . \<2,Opcion 1 . \<3"
ADD OBJECT cmdMenu2 AS xCommandButton WITH ;
CAPTION = "Menu 2", TOP = 10, LEFT = 120,;
MenuOptions = "Opcion 2 . \<1,Opcion 2 . \<2"
ADD OBJECT cmdClose AS xCommandButton WITH ;
CANCEL = .T., CAPTION = "Cerrar", TOP = 10, LEFT = 240
PROCEDURE cmdClose.CLICK
THISFORM.HIDE()
ENDPROC
ENDDEFINE
DEFINE CLASS xCommandButton AS COMMANDBUTTON
HEIGHT = 25
MenuOptions = ""
PROCEDURE MOUSEMOVE (nButton, nShift, nXCoord, nYCoord)
IF nButton==1 AND ! EMPTY(THIS.MenuOptions)
THIS.ShowPopupMenu()
NODEFAULT
ENDIF
ENDPROC
PROCEDURE KEYPRESS(nKeyCode, nShiftCtrlAlt)
#DEFINE K_DOWN 160
#DEFINE K_ALT 4
#DEFINE K_F4 -3
* WAIT WINDOW TRANSFORM(nKeyCode) + " " + TRANSFORM(nShiftCtrlAlt) NOWAIT
DO CASE
CASE nKeyCode==K_DOWN AND nShiftCtrlAlt==K_ALT
NODEFAULT
THIS.ShowPopupMenu()
CASE nKeyCode==K_F4
NODEFAULT
THIS.ShowPopupMenu()
ENDCASE
ENDPROC
PROCEDURE CLICK
NODEFAULT
THIS.ShowPopupMenu()
ENDPROC
* Armo y muestro el menú
PROCEDURE ShowPopupMenu()
LOCAL nOp, sOp, nY, nX, nRatio
TRY
RELEASE POPUP _Popup_Menu
CATCH
ENDTRY
WITH THIS
THISFORM.ADDPROPERTY("ActivePopupMenu", THIS)
* Convierto de pixels a foxels
nRatio = FONTMETRIC(1)
nY = (.TOP + .HEIGHT) / nRatio
nRatio = FONTMETRIC(6)
nX = .LEFT / nRatio
DEFINE POPUP _Popup_Menu FROM nY, nX SHORTCUT
FOR nOp = 1 TO GETWORDCOUNT(.MenuOptions, ",")
sOp = GETWORDNUM(.MenuOptions, nOp, ",")
DEFINE BAR (nOp) OF _Popup_Menu PROMPT (sOp)
sOp = TRANSFORM(nOp)
ON SELECTION BAR (nOp) OF _Popup_Menu _SCREEN.ACTIVEFORM.ActivePopupMenu.AfterClick( &sOp )
NEXT
ENDWITH
ACTIVATE POPUP _Popup_Menu
ENDPROC
* Borro el menú luego del click y llamo al handler
PROCEDURE AfterClick(nOption)
THISFORM.ActivePopupMenu = NULL
* RELEASE POPUP _Popup_Menu
THIS.OnMenu (nOption)
THISFORM.REFRESH()
ENDPROC
PROCEDURE OnMenu (nOption)
WAIT WINDOW "Seleccionó opcion " + TRANSFORM(nOption) + " del botón " + PROPER(THIS.NAME) NOWAIT
ENDPROC
ENDDEFINE
Mario Lopez
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.