回 帖 发 新 帖 刷新版面

主题:QB中怎么判断F1-F12功能是否按下

dim t1 as double
t1=timer
while timer<t1+5 and inkey$<>CHR$(27)
'延时5秒,如果按了esc键就立即结束
wend


我只能找出常用键的ascii码,找不出F1-F12的ascii码

回复列表 (共2个回复)

沙发

这个可以用键盘陷阱
你找找qb45写的〈陷阱技术〉的帖子看看就知道了

板凳

我刚学BASIC就拿你的问题做了个程序,在VBDOS上通过。有2个模块,一个BAS过程模块和一个名为FORM1的模块FORM模块很简单,有2个LABEL一个静态文字,一个是LABEL2显示键码,通常按键后FORM会产生些事件,如果按的是FX的键则Form_KeyPress事件不会产生,所以这里只处理Form_KeyDown,KeyCode是键码,Shift是标志码,我只知道最低3位表示Shift Crtl Alt的状态,其它就不清楚了代码如下:

gkeyasc.bas

'$FORM form1
form1.SHOW

form1.frm

'$INCLUDE: 'constant.bi'

SUB Form_Load ()
    SCREEN.ControlPanel(DESKTOP_BACKCOLOR) = 0
    SCREEN.ControlPanel(TITLEBAR_BACKCOLOR) = 1
    SCREEN.ControlPanel(DESKTOP_PATTERN) = 32
END SUB

SUB Form_KeyDown (KeyCode AS INTEGER, Shift AS INTEGER)
    DIM shiftkey(3) AS INTEGER, shiftcode AS INTEGER
    DIM keyasc AS STRING
    IF (KeyCode > 18) OR (KeyCode < 16) THEN
        keyasc = ""
        shiftcode = Shift
        FOR i = 1 TO 3
            shiftkey(i) = shiftcode MOD 2
            shiftcode = (shiftcode - shiftkey(i)) / 2
        NEXT i
        IF shiftkey(1) <> 0 THEN keyasc = "[Shif]"
        IF shiftkey(2) <> 0 THEN keyasc = keyasc + "[Ctrl]"
        IF shiftkey(3) <> 0 THEN keyasc = keyasc + "[Alt]"
        keyasc = keyasc + STR$(KeyCode)
        label2.caption = keyasc
    END IF
END SUB

我来回复

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