有一个想法 不知是否可行 var LastKeyDownTime:TDateTime; //... proc cbMove(m:Integer); //控制移动 不具体实现 //... proc Timer3_OnTimer(); //在按下左右键一段时间后 自动移动方块 begin if Key=RightKey then cbMove(+cbWidth) else cbMove(-cbWidth); end; proc App.OnMessage(Msg:TMessage);//响应信息 var CurrentTime:TDateTime; begin if Msg.Message=WM_KeyDown then begin if (Msg.wParam=LeftKey) or (Msg.wParam=RightKey) then begin CurrentTime:=Now(); If (CurrentTime-LastKeyTime)<=持续按下后所需时间 then begin {} Timer3.NeedTime:=重复时间; //设定计时时长 Timer3.Enabled:=True;//启动Timer3 开始计时 到时间时自动移动一 //格 Key:=Msg.wParam; end; //... end; LastKeyTime:=CurrentTime; //... end ; if Msg.Message=WM_KeyUp then if Timer3.Enabled=True then Timer3.Enabled:=False; //... end; //...