回 帖 发 新 帖 刷新版面

主题:请教:弹出式菜单的位置,怎么不能按鼠标点击时的位置来确定?

我在 MouseDown 事件里放置下列代码,但弹出的菜单起始点位置不能由FROM [b]nXCoord, nYCoord[/b]确定,请高手指点迷津?
LPARAMETERS nButton, nShift, nXCoord, nYCoord
IF nButton=2
    DEFINE POPUP popExam FONT '宋体', 12 TITLE "复制粘贴菜单" FROM [b]nXCoord, nYCoord[/b]
    DEFINE BAR 1 OF popExam PROMPT '复制'
        ON SELECTION BAR 1 OF popExam do jtxt with x1,1
    DEFINE BAR 2 OF popExam PROMPT '粘贴' SKIP FOR EMPTY(_cliptext)
        ON SELECTION BAR 2 OF popExam do jtxt with x1,2
    DEFINE BAR 3 OF popExam PROMPT '取消粘贴' SKIP FOR yztkg
        ON SELECTION BAR 3 OF popExam do jtxt with x1,3
    ACTIVATE POPUP popExam
ENDIF

***************************************************************
PROCEDURE jtxt
parameter x1,jxj
    x2=x1+".seltext"
    x3=x1+".value"
    x4=x1+".selstart"
        IF jxj=1
            _cliptext=&x2
        ELSE 
            IF jxj=2
                 rxbak=&x3
                &x3=STUFF(&x3,&x4+1,0,_cliptext)
                yztkg=.f.
            ELSE 
                &x3=rxbak
                yztkg=.t.
            ENDIF 
        ENDIF
    DEACTIVATE POPUP popExam
    RELEASE POPUP popExam
ENDPROC

回复列表 (共8个回复)

沙发

nXCoord, nYCoord 计量是一像素为单位。

FROM nX,nY 计量是以字体大小为单位。

板凳

再请教:
    有没有什么方法能够确定 nX,nY的值,使鼠标右键按下时弹出菜单出现在鼠标位置? 我试了许多方法设置FROM nX,nY,但都无用,弹出窗口的位置漂浮不定。先谢了!

3 楼

补充一句:我是想在某编辑框中点击鼠标右键时,在鼠标位置弹出一个选择菜单。

4 楼

你用的是不是快捷菜单?我估计你用的不是快捷菜单。
我用的是快捷菜单,想让不在点击右键位置出都不行,而且什么都不用管。因为那是快捷菜单的本能。

5 楼

我是想使用参数来调用弹出式菜单,开始也想用快捷菜单,但它不能接收参数,所以放弃了。但受你的提示,我从快捷式菜单中找出了鼠标位置参数,问题立即解决了,谢谢!

6 楼

DEFINE POPUP cd1 SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR _med_cut OF cd1 PROMPT "剪切(\<T)" 
DEFINE BAR _med_copy OF cd1 PROMPT "复制(\<C)" 
DEFINE BAR _med_paste OF cd1 PROMPT "粘贴(\<P)" 
DEFINE BAR _med_clear OF cd1 PROMPT "清除(\<A)"
ACTIVATE POPUP cd1

7 楼

比较全的编辑快捷菜单:
DEFINE POPUP cd1 SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR _med_undo OF cd1 PROMPT "撤销(\<U)" 
DEFINE BAR _med_redo OF cd1 PROMPT "重做(\<D)" 
DEFINE BAR 3 OF cd1 PROMPT "\-"
DEFINE BAR _med_cut OF cd1 PROMPT "剪切(\<T)" 
DEFINE BAR _med_copy OF cd1 PROMPT "复制(\<C)" 
DEFINE BAR _med_paste OF cd1 PROMPT "粘贴(\<P)" 
DEFINE BAR _med_clear OF cd1 PROMPT "清除(\<A)"
ACTIVATE POPUP cd1

8 楼

非常感谢chl518的精辟回复,您的VFP功底太深厚了!谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册