FORM上放个Button或ListBox或DBGrid,FormKeyDown就不起作用了。

解决方案 »

  1.   

    因为Button或ListBox或DBGrid控件获取了初始焦点,所有应该在Button或ListBox或DBGrid控件的keyDown事件中也调用你要执行的代码
      

  2.   

    能不能把初始焦点还给FORM呢。
      

  3.   

    好像不行,
    窗体上TabOrder值最小的控件肯定会获取初始焦点的.
      

  4.   

    不过可以利用application的onMessage截获窗体上的所有KEYDOWN事件,给你一个例子:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        Procedure WinMsg (Var Msg : TMsg; Var Handled : Boolean);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnMessage := WinMsg;
    end;procedure TForm1.WinMsg(var Msg: TMsg; var Handled: Boolean);
    begin
    if msg.message =WM_KEYDOWN then
    showmessage('发生了keydown事件');end;end.
      

  5.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Form1.KeyPreview:=True;
    end;
      

  6.   

    madyak(无天)的方法,OK!
    结贴。