如何修改C++Builder FireMonkey程序中TButton的鼠标悬停颜色?
针对你遇到的AquaGraphite样式TButton悬停时自动变蓝色的问题,有两种解决方案:修改悬停颜色,或者完全移除悬停变色效果,具体实现如下:
修改悬停颜色
方法1:通过代码动态控制
利用按钮的OnMouseEnter和OnMouseLeave事件,根据按钮当前的文本(Start/Stop)设置对应的悬停颜色:
void __fastcall TForm1::BtnStartStopMouseEnter(TObject *Sender) { TButton* btn = static_cast<TButton*>(Sender); if (btn->Text == L"Start") { // 鼠标悬停时,Start按钮设为深绿色 btn->Fill->Color = TAlphaColorRec::DarkGreen; } else if (btn->Text == L"Stop") { // 鼠标悬停时,Stop按钮设为深红色 btn->Fill->Color = TAlphaColorRec::DarkRed; } } void __fastcall TForm1::BtnStartStopMouseLeave(TObject *Sender) { TButton* btn = static_cast<TButton*>(Sender); // 鼠标离开时恢复原颜色 if (btn->Text == L"Start") { btn->Fill->Color = TAlphaColorRec::Green; } else if (btn->Text == L"Stop") { btn->Fill->Color = TAlphaColorRec::Red; } }
方法2:修改StyleBook中的样式
如果项目使用了StyleBook管理样式,可以直接修改AquaGraphite样式中TButton的悬停状态:
- 打开StyleBook组件,找到
AquaGraphite样式下的TButton对应的ButtonStyle - 展开
States节点,找到Hovered状态 - 修改
Hovered状态下的Fill->Color为你需要的颜色(比如对应Start/Stop的深绿/深红) - 确保目标按钮的
StyleName关联到修改后的按钮样式
移除悬停效果
方法1:代码强制保持原颜色
在OnMouseEnter事件中直接将按钮颜色重置为当前状态的原颜色,抵消样式的默认悬停效果:
void __fastcall TForm1::BtnStartStopMouseEnter(TObject *Sender) { TButton* btn = static_cast<TButton*>(Sender); if (btn->Text == L"Start") { btn->Fill->Color = TAlphaColorRec::Green; } else if (btn->Text == L"Stop") { btn->Fill->Color = TAlphaColorRec::Red; } } // OnMouseLeave事件可以留空,或者同样保持原颜色 void __fastcall TForm1::BtnStartStopMouseLeave(TObject *Sender) { // 无需额外操作,或重复设置原颜色 }
方法2:修改样式取消悬停差异
在StyleBook中找到AquaGraphite样式的TButton:
- 展开
States下的Hovered状态 - 将
Hovered状态的Fill->Color设置为和Normal状态完全相同的颜色 - 保存样式后,按钮悬停时就不会再变色
内容的提问来源于stack exchange,提问作者Drewski7280
相关产品推荐
相关产品推荐

