我用的是循环语句,我想用热键终止语句的循环.请问如何设置,帮帮忙.

解决方案 »

  1.   

    可以设一个boolean型变量,按热键后置true,循环中发现该值为true则break
    不过如果循环较大的话,每次都判断,感觉不是很好,呵呵
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        procedure MyHotKeyMsg(var msg : TMessage);message wm_hotkey;
      public
       hotkeyid :integer;
       exitwhile : Boolean;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
     i : integer;
    begin
       i := 0;    //一个长循环,将label1显示的内容逐渐增加,退出的条件时exitwhile为ture
       while true do
       begin
         label1.Caption := inttostr(i);
         inc(i);
         Application.ProcessMessages;
         if exitwhile then break;
       end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      exitwhile := false;
      //根据原子表来安全的得到热键的id
      hotkeyid:=GlobalAddAtom(pchar('MYHotKey'))-$C000;
      //定义热键为ctrl+alt+a
      registerhotkey(handle,hotkeyid,MOD_CONTROL or mod_Alt,$41);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      //释放热键并删除原子表中的相关信息
       unregisterhotkey(handle,hotkeyid);
       DeleteAtom(HotKeyID);
    end;procedure TForm1.MyHotKeyMsg(var msg: TMessage);
    begin
       //处理热键消息,如果是ctrl+alt+a,则将exitwhile置为true
        if (msg.LParamHi=$41) and
         (msg.lparamLo=MOD_CONTROL or mod_Alt) then
      begin
        msg.Result:=1;
        exitwhile := true;
      end;
    end;end.