如何获取ESC键,在线等!(100分)

  • 主题发起人 主题发起人 xxlqust
  • 开始时间 开始时间
X

xxlqust

Unregistered / Unconfirmed
GUEST, unregistred user!
如何得到用户按了ESC键,且此事件为优先级最高的,即用户按了ESC程序就可以得到相应,不论程序运行到什么地方,请各位大哥帮帮忙!
 
大家怎么不说话!
 
key := VK_ESCAPE
 
查一查ACSII码对应的值不就行了吗?
procedure TForm1.Button3Click(Sender: TObject);
begin
if EDit1.Text= 'ESC的值' then//
showMessage('this is false');
end;
 
我是说程序不管在处理什么样的事件,比如说正在一个死循环中也能响应此按键!
 
在一个死循环中也能响应此按键?可能吗?
windows死掉的时候,按ctrl+alt+del不一样不顶事儿?

关注...
 
在每次循环后加上Application.ProcessMessages;
 
to LoveShanShan:
现在能捕捉到ESC了,但好像不能退出循环!
 
type
THotKey = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure HotKeyDown(var Msg:Tmessage);message WM_HOTKEY;
end;

var
HotKey: THotKey;
HotKeyID : Integer;
Alabel : TLabel;

implementation

{$R *.dfm}

procedure THotKey.HotKeyDown(var Msg:TMessage);
begin
if ( Msg.LParamLo = 0 ) and (Msg.LParamHi = VK_ESCAPE) then
begin
Alabel.Caption := '按下了 ESC 键 !';
end;
end;

procedure THotKey.FormCreate(Sender: TObject);
begin
HotKeyId := GlobalAddAtom('MyHotKey')-$C00;
RegisterHotKey(Handle,HotKeyID,0,VK_ESCAPE);
ALabel := TLabel.Create(nil);
ALabel.Parent := HotKey;
ALabel.Left := 10;
ALabel.Top := 10;
Alabel.Caption := '未按 ESC 键 !';
end;

procedure THotKey.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,HotKeyid);
Alabel.Free;
end;
 
注册全局热键,消息判断,搞定!
 
我的循环是在一个单独的单元里边的,没法与一个控件捆绑
 
请描述清楚
 
捕捉到ESC按键就Break循环嘛。如果不在同一过程中,可以用全局变量bContinueLoop:Boolean;
捕捉到ESC时,设置为真:bContinueLoop:=True;
在循环体每次执行前判断一下:
if bContinue then Break。搞定
 
后退
顶部