你可以用一个变量,当KEYDOWN发生后,置为TRUE,当KEYUP发生后在FALSE;在KEYDOWN事件里判断是否FALSE,否则不执行。
解决方案 »
- Socket通信的并发问题
- 能不能写到多个文件当中?
- DATA MODULE的问题...
- 这个函数哪里错了,为什么在我的单元里不能使用????
- 求教高人,关于Delphi 收发E-Mail的问题
- 以下这段代码可不可以用一个循环代码?
- 如何将MIDI文件做在dfm文件中播放
- 我封状的ocx在客户端的javascript脚本里调用,怎么才能不出IE的提示:“AxtiveX可能不安全”。顶者有分
- 如何通过 Rundll32.exe 来重启计算机?并强制终止所有进程
- outlook Express 能否自动化?
- 如何隐藏PAGECONTROL上的切换BUTTON???(在线等待)
- 请问如何利用adoquery(或query)实现对多表的更新(在线,给分多多)
Edit1.OnKeyUp(sender,key,shift);
马上执行keyup
比如说当一个按钮按住不放时,不停的累加一个数字这样的功能?
你可以用Timer:当按钮按下时,Timer.enable,当按钮弹起时,
Timer.disable.在timer.timer中触发事件。
就可以了
,这样执行kedown时,就必须执行keyup了
然后把WM_KEYUP和WM_KEYDOWN时间都截下来,
再定义一个标识property sign
WM_KEYUP事件 begin
if sign:=true then
begin
//执行代码
...
...
sign:=false;
end;
end;WM_KEYDOWN事件里:
begin
sign:=true;
end;还没有试过,理论上应该可以
关于执行了keydown就执行keyup很简单,只要在keydown函数里调用keyup函数就可以了
在STRINGGRID中编辑单元格,当按ENTER时单元格内容改变,当按TAB,UP,DOWN时,单元格内容变回编辑前的状态。
我在KEYDOWN中取得新的单元格,在KEYUP中把旧的填回去,一个一个的按都没问题,但当按键过快后,则内容出现错误。(如在键盘上快速乱敲)
帮帮忙
或者先按第一个键,再先按第二个键,再放第二个键,再放第一个键,
也会有问题!
建议不要在KEYDOWN中取得新的单元格,而是KEYUP中取得新的单元格并且把旧的填回去
implementation
var
KeyPressed:Boolean;
....procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if KeyPressed then Exit;
KeyPressed :=True;
.....
end;procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not KeyPressed then Exit;
KeyPressed :=False;
....
end;