Form1有一个按钮, 按下去创建Form2
Form2一个Action, ShortCut为Ctrl+Shift+Z, 当Form2被Show出来的时候, 快捷键不起作用, 只有当窗口被鼠标点了一下, 快捷键才起了作用,为何, 各位有什么办法
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ActnList, StdCtrls;type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
  Application.Minimize;
  Form2 := TForm2.Create(nil);
  Form2.ShowModal;
  Form2.Free;
end;end.
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ActnList, ExtCtrls;type
  TForm2 = class(TForm)
    actlst1: TActionList;
    act1: TAction;
    pnl1: TPanel;
    procedure act1Execute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementation{$R *.dfm}procedure TForm2.act1Execute(Sender: TObject);
begin
  pnl1.Caption := 'Shift+Ctrl+Z MouseDown'
end;procedure TForm2.FormCreate(Sender: TObject);
begin
  FormStyle := fsStayOnTop;
end;procedure TForm2.FormShow(Sender: TObject);
begin
  //????怎么激活
end;end.

解决方案 »

  1.   

    快捷键不起作用, 只有当窗口被鼠标点了一下, 快捷键才起了作用
    -----------
    好像是点击鼠标触发了Action,而不是快捷键触发的。试一下改成这样:
    procedure TForm2.FormCreate(Sender: TObject);
    begin
       FormStyle := fsStayOnTop;
       KeyPreview := True;
    end;procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key=Ord('Z'))and (ssCtrl in Shift)and(ssShift in Shift)then
           pnl1.Caption := 'Shift+Ctrl+Z MouseDown'
    end;
      

  2.   

    我试了可以,原因是你的 act1 没有与任何控件关联吧,所以 Delphi 是不会触发它的。
    1、在 From2 上放一个 TButton 
    2、把 TButton.Action 设置成 act1
    3、把 TButton.Visible 设置成 False;
    应该可以了。 
      

  3.   

    呵呵,你想实现一个全局的快捷键吧。当你最小化Application的时候,Form2也会被最小化,所以快捷键不起作用。你需要用 RegisterHotKey 来注册一个系统热键。
      

  4.   

    最上面两位都没有答对, 第三位我不想用全局键, 因为最小化Application的时候, 才创建Form2, 而且它是StayOnTop的, 难道没有回答得出来吗
      

  5.   

    你的问题是在application最小化的时候,这个application失去了焦点。所以快捷键不起作用。可以在form2show事件中加入  SetForegroundWindow(self.Handle); 来得到焦点。