SpeedButton设置Flat属性为TRUE时,控件未获取焦点时,不显示边框线;只有ONMouseMove时,才显示边框线。我还是喜欢有边框线的透明的状态。想法从TSPeedButton类覆盖它的一些方法以达到我的目的,试了几次不成功。请帮我看看应重写哪些方法才行?

解决方案 »

  1.   

    应该功夫不大,我要的是它的鼠标移上去时的状态,漂亮。 我需要它在CReate后就是那种状态。
      

  2.   

    //放一个重叠的TBevel控件看看效果~~
    //复制如下代码到窗体上,注意不要复制注释~~object Bevel1: TBevel
      Left = 104
      Top = 80
      Width = 23
      Height = 22
      Style = bsRaised
    end
    object SpeedButton1: TSpeedButton
      Left = 104
      Top = 80
      Width = 23
      Height = 22
      Flat = True
    end
      

  3.   

    搂住,即使你改动了VCL源码,你还要重新安装一些TSpeedButton控件才行,呵呵,你在TSpeedButton的Create构造函数中加入 SendMessage(Handle,CM_MOUSEENTER,0,0)就可以了
      

  4.   

    //继承TSpeedButton的一个控件,很简单,希望能满足你的要求。
    unit MySpeedButton;interfaceuses
      SysUtils, Classes, Controls, Buttons, Graphics, Messages;type
      TMySpeedButton = class(TSpeedButton)
      private
        { Private declarations }
      protected
        procedure Paint; override;
      public
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples', [TMySpeedButton]);
    end;{ TMySpeedButton }procedure TMySpeedButton.Paint;
    begin
      inherited;
      self.Perform(CM_MOUSEENTER,0,0);
    end;end.
      

  5.   

    一个小小的Tspeed也用的着用第三方控件。
    CareYouOnly(只在乎你)方法可行,但是却不能正常用cm_mouseenter消息了。最好的方法是修改paint,你可以重载此过程,也可以直接在TSpeedButton.Paint修改。
    if (FState in [bsDown, bsExclusive]) or
          (FMouseInControl and (FState <> bsDisabled)) or
          (csDesigning in ComponentState) then改成
    if (FState in [bsDown, bsExclusive]) or
          (FState <> bsDisabled) or
          (csDesigning in ComponentState) then
    就达到你的目的了。