主题:QB中怎么判断F1-F12功能是否按下
阳光帆
[专家分:0] 发布于 2005-03-08 23:55:00
dim t1 as double
t1=timer
while timer<t1+5 and inkey$<>CHR$(27)
'延时5秒,如果按了esc键就立即结束
wend
我只能找出常用键的ascii码,找不出F1-F12的ascii码
回复列表 (共2个回复)
沙发
qb45 [专家分:2880] 发布于 2005-03-09 08:54:00
这个可以用键盘陷阱
你找找qb45写的〈陷阱技术〉的帖子看看就知道了
板凳
klstg [专家分:10] 发布于 2005-03-15 11:06:00
我刚学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
我来回复