此bug就是Delphi7不能在KeyDwon或KeyUp事件中,不能正確的處理F11與F12鍵這兩個鍵!下面的這段代碼為按鍵測試,即把按的鍵顯示在屏幕上。我發現只要按了F11或F12就有可能程序出現異常,如果不按F11或F12,就一點事也沒有!unit KeyTestMain;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type
  TFormKeyTest = class(TForm)
    Label1: TLabel;
    LabelKeyCode: TLabel;
    Label2: TLabel;
    LabelKeyCount: TLabel;
    Button1: TButton;
    Label3: TLabel;
    LabelMouseCode: TLabel;
    Label5: TLabel;
    LabelMouseCount: TLabel;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  FormKeyTest: TFormKeyTest;  keycount:int64=0;
  mousecount:int64=0;implementation{$R *.dfm}procedure TFormKeyTest.FormKeyPress(Sender: TObject; var Key: Char);
begin
    LabelKeycode.Caption:= Key;
end;procedure TFormKeyTest.Button1Click(Sender: TObject);
begin
  close;
end;procedure TFormKeyTest.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  application.ProcessMessages;
  keycount:=keycount+1;
  LabelKeyCount.Caption:=inttostr(keycount);  case Key of
    8 :  begin LabelKeycode.Caption:='Backspace'; end;
    13 :  begin LabelKeycode.Caption:='Return'; end;
    16 :  begin LabelKeycode.Caption:='Shift'; end;
    17 :  begin LabelKeycode.Caption:='Ctrl'; end;
    18 :  begin LabelKeycode.Caption:='Alt'; end;
    20 :  begin LabelKeycode.Caption:='Caps Lock'; end;
    27 :  begin LabelKeycode.Caption:='Escape'; end;
    33 :  begin LabelKeycode.Caption:='Page UP'; end;
    34 :  begin LabelKeycode.Caption:='Page Down'; end;
    35 :  begin LabelKeycode.Caption:='End'; end;
    36 :  begin LabelKeycode.Caption:='Home'; end;
    37 :  begin LabelKeycode.Caption:='Arrow Left'; end;
    38 :  begin LabelKeycode.Caption:='Arrow Up'; end;
    39 :  begin LabelKeycode.Caption:='Arrow Right'; end;
    40 :  begin LabelKeycode.Caption:='Arrow Down'; end;
    44 :  begin LabelKeycode.Caption:='Print Screen'; end;
    45 :  begin LabelKeycode.Caption:='Insert'; end;
    46 :  begin LabelKeycode.Caption:='Del'; end;
    91 :  begin LabelKeycode.Caption:='Windows'; end;
    93 :  begin LabelKeycode.Caption:='Menu'; end;
    112..123 :  begin LabelKeycode.Caption:='F'+inttostr(key-111); end;
    144 :  begin LabelKeycode.Caption:='Num Lock'; end;
    145 :  begin LabelKeycode.Caption:='Scroll Lock'; end;
  end;
end;procedure TFormKeyTest.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=9) then
  begin
    keycount:=keycount+1;
    LabelKeyCount.Caption:=inttostr(keycount);
    LabelKeycode.Caption:='Tab';
  end;end;procedure TFormKeyTest.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mousecount:=mousecount+1;
  LabelMouseCount.Caption:=inttostr(mousecount);  if Button=mbLeft then LabelMouseCode.Caption:='Left Button';
  if Button=mbRight then LabelMouseCode.Caption:='Right Button';
  if Button=mbMiddle then LabelMouseCode.Caption:='Middle Button';  LabelMouseCode.Caption:=LabelMouseCode.Caption + '(x:'+inttostr(x)+',y:'+inttostr(y)+')';end;end.

解决方案 »

  1.   

    解決方法:把窗體的支持系統功能給去掉,就正常處理所有按鍵了!這個bug,不只delphi7有,一直到delphi2007都存在!
      

  2.   

    多花点时间去发现自己程序的Bug吧!
    或者转行去做测试吧?
      

  3.   

    在窗體from的FormCreate事件中加入下面一行語句即可解決按f11或f12有時不影響的問題:self.BorderIcons:=[];