不是 Delphi 的错!请看原码:procedure TButton.CMDialogChar(var Message: TCMDialogChar);
begin
  with Message do
    if IsAccel(CharCode, Caption) and CanFocus then // 由父控件决定
    begin
      Click;
      Result := 1;
    end else
      inherited;
end;procedure TSpeedButton.CMDialogChar(var Message: TCMDialogChar);
begin
  with Message do
    if IsAccel(CharCode, Caption) and Enabled and Visible and
      (Parent <> nil) and Parent.Showing then // 由自己决定
    begin
      Click;
      Result := 1;
    end else
      inherited;
end;

解决方案 »

  1.   

    所以 TSpeedButton 的快捷键跟 Parent 的 Enable 无关,只与自己的 Enable 有关
      

  2.   

    为什么多了一些条件反而不行,这跟两个控件的父类有关,一个是 TWindowControl ,一个是 TGraphicControl// 改一下条件,不知行不行if IsAccel(CharCode, Caption) and Enabled and Visible and
    (Parent <> nil) and Parent.Showing and Parent.Enabled then
      

  3.   

    torble(阿裕) :
    你说得很有道理。SpeedButton本身没有焦点,这跟Label控件相似,Label控件也有类似的毛病。