鼠标到bitbut上面 字体显示红色 离开时字体显示黑色
用onMouseMove,只可使字体变红,离开时却不能变黑,请高手指点

解决方案 »

  1.   

    您说的是onetxit事件?不行。
    我有8个按钮,现在采取的办法是在每一个按钮的onMouseMove中显示一个,屏蔽掉其他7个,但这样很麻烦。
      

  2.   

    您说的是OnExit事件?不行。
    我有8个按钮,现在采取的办法是在每一个按钮的onMouseMove中显示一个,屏蔽掉其他7个,但这样很麻烦。
      

  3.   

    不想麻烦就用三方控件吧,delphi自带的那个XP也可以的。
      

  4.   

    也可能我没说清楚,有8个按钮,当鼠标游到按钮上方时(并不点击),触发onMouseMove事件,但鼠标游离开时会触发什么事件,却不知道,无法利用。烦请高手指导。
      

  5.   

    在MouseMove判断下坐标,不过有个灵敏度,移动快了就反映不过来,可以缩小坐标范围
    procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        if(x>0) and (x<BitBtn1.Width-1) and (y>0) and (y<BitBtn1.Height-1) then
            BitBtn1.Font.Color:=clRed;
        else
            BitBtn1.Font.Color:=clBlack;
    end;
      

  6.   

    在form的onMouseMove事件中使8个按钮的字体全部变黑。
      

  7.   

    谢谢4楼指导,但我是新手,对“三方控件”和“delphi自带的那个XP”都不太清楚,请指导
      

  8.   

    三方的skin 皮肤控件一般都有这个功能,我用的是VCLSKIN.
    delphi自带的控件XPman控件,在win32里有个XPman把它放在窗体上,就可以了。(D7)
      

  9.   

    离开触发cm_mouseleave消息,截获它处理一下就行了private
       procedure MouseLeave(var Msg:TMessage); Message CM_MouseLeave;procedure TForm1.MouseLeave(var Msg:TMessage);
    begin
      if TObject(Msg.LParam) is TBitBtn then
         TBitBtn(Msg.LParam).Font.Color:=clBlack;
    end;procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      TBitBtn(Sender).Font.Color:=clRed;
    end;
      

  10.   

    楼上出手真快,学习了unit UMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons;type
      TFrmMain = class(TForm)
        Button1: TButton;
        Button2: TButton;
        BitBtn1: TBitBtn;
        procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        procedure MouseLeave(var Msg:TMessage); Message CM_MouseLeave;
        { Private declarations }
      public
        { Public declarations }
      end;var
      FrmMain: TFrmMain;
      implementation{$R *.dfm}procedure TFrmMain.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      TBitBtn(Sender).Font.Color:=clRed;   //有效
    end;procedure TFrmMain.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      TButton(Sender).Font.Color:=clRed;     //无效
    end;procedure TFrmMain.MouseLeave(var Msg:TMessage);
    begin
      if TObject(Msg.LParam) is TButton then
         TButton(Msg.LParam).Font.Color:=clBlack;
    end;
    end.
      

  11.   

    普通的Button不能变色,不知何故。。
      

  12.   

    10楼老师的办法很管用。谢谢
    因为在字体变红的同时要有个TRadioGroup控件要显示,我就比葫芦画瓢在 
    TBitBtn(Msg.LParam).Font.Color:=clBlack;
    下面添了一句:
    TRadioGroup(Msg.LParam).Visible:=false;
    可执行后连bitbtn控件也不正常显示了,请问各位老师,我应怎样改?
      

  13.   

    我又这样改了一下:
    procedure TForm1.MouseLeave(var Msg:TMessage);
    begin
      if TObject(Msg.LParam) is TBitBtn then begin
         TBitBtn(Msg.LParam).Font.Color:=clBlack;
         RadioGroup1.Visible:=false;//密码
          
         RadioGroup8.Visible:=false;//物品查阅
      end;
    end;
    再加上BitBtn1MouseMove事件调用,问题已完全解决。
    谢谢各位老师