Delphi XE2 中的 TButton 有一个Style
属性。当此属性设置bsSplitButton
为时,按钮右侧会显示一个下拉箭头:
但是,这个下拉区域有一些不便之处:
很多情况下它太窄了,下拉区域的静态宽度只有11个像素。
当鼠标指针悬停在下拉区域上时,仅针对下拉区域没有明确的悬停指示。
如何实现 TButton 的后代来修复这种不便?后代应该有一个DropDownWidth
属性和一个当鼠标悬停在下拉区域上时处理和更改下拉显示的属性。
Delphi XE2 中的 TButton 有一个Style
属性。当此属性设置bsSplitButton
为时,按钮右侧会显示一个下拉箭头:
但是,这个下拉区域有一些不便之处:
很多情况下它太窄了,下拉区域的静态宽度只有11个像素。
当鼠标指针悬停在下拉区域上时,仅针对下拉区域没有明确的悬停指示。
如何实现 TButton 的后代来修复这种不便?后代应该有一个DropDownWidth
属性和一个当鼠标悬停在下拉区域上时处理和更改下拉显示的属性。
您的后代必须调用Button_SplitInfo
(或发送BCM_SETSPLITINFO
)来调整分割宽度。下面是一个运行时示例用法,您可以在后代中集成类似的功能:
procedure SetButtonSplitWidth(Button: TButton; Width: Integer);
var
Info: TButtonSplitinfo;
begin
if Button.Style = bsSplitButton then begin
Info.mask := BCSIF_SIZE;
Info.size.cx := Width;
Info.size.cy := 0;
Button_SetSplitInfo(Button.Handle, Info);
Button.Invalidate;
end;
end;
调用示例结果
SetButtonSplitWidth(Button2, 25);
是这样的:
请参阅文档以了解您还可以做什么。没有任何功能可以修改本机按钮控件的悬停行为。为此,您可能最好不要从TButton
.