这是关于启用 VCL 样式时使工具栏按钮变平的问题的后续内容。使用该问题中的解决方案,现在我的大部分 TActionToolbar 按钮都是扁平的。但是,有一个带有下拉菜单的工具栏按钮,其中包含其他操作:
它仍然在它周围绘制按钮边缘。如何删除带有下拉菜单的工具栏按钮的按钮边框,以便它们与其他普通按钮匹配,并且看起来更像禁用 VCL 样式时?
这是关于启用 VCL 样式时使工具栏按钮变平的问题的后续内容。使用该问题中的解决方案,现在我的大部分 TActionToolbar 按钮都是扁平的。但是,有一个带有下拉菜单的工具栏按钮,其中包含其他操作:
它仍然在它周围绘制按钮边缘。如何删除带有下拉菜单的工具栏按钮的按钮边框,以便它们与其他普通按钮匹配,并且看起来更像禁用 VCL 样式时?
这种按钮是TThemedDropDownButton
类绘制的,所以你必须重写这个类和TThemedDropDownButton.DrawBackground
方法。
使用与上一个答案相同的单元添加一个名为的新类TThemedDropDownButtonEx
TThemedDropDownButtonEx= class(TThemedDropDownButton)
protected
procedure DrawBackground(var PaintRect: TRect); override;
end;
然后像这样实现 DrawBackground 方法
procedure TThemedDropDownButtonEx.DrawBackground(var PaintRect: TRect);
const
CheckedState: array[Boolean] of TThemedToolBar = (ttbButtonHot, ttbButtonCheckedHot);
var
LIndex : Integer;
begin
LIndex := SaveDC(Canvas.Handle);
try
if Enabled and not (ActionBar.DesignMode) then
begin
if (MouseInControl or IsChecked or DroppedDown) and
(Assigned(ActionClient) and not ActionClient.Separator) then
begin
StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(CheckedState[IsChecked or (FState = bsDown)]), PaintRect);
if IsChecked and not MouseInControl then
StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(ttbButtonPressed), PaintRect);
end
else
;
end
else
;
finally
RestoreDC(Canvas.Handle, LIndex);
end;
end;
最后修改TPlatformVclStylesStyle.GetControlClass方法就这样
更改此代码
if AnItem.HasItems then
case GetActionControlStyle of
csStandard: Result := TStandardDropDownButton;
csXPStyle: Result := TXPStyleDropDownBtn;
else
Result := TThemedDropDownButton;
end
else
这样
if AnItem.HasItems then
case GetActionControlStyle of
csStandard: Result := TStandardDropDownButton;
csXPStyle: Result := TXPStyleDropDownBtn;
else
Result := TThemedDropDownButtonEx;
end
else