これが私の回避策です:次
のようなカスタムクラスを作成してください:
type
TFastThemedButton = class(TThemedMenuButton)
protected
procedure DrawBackground(var PaintRect: TRect); override;
end;
...
procedure TFastThemedButton.DrawBackground(var PaintRect: TRect);
const
MenuStates: array[Boolean {MouseInControl}, Boolean {Selected}] of TThemedMenu =
((tmMenuBarItemNormal, tmMenuBarItemPushed), (tmMenuBarItemHot, tmMenuBarItemPushed));
var
BannerRect: TRect;
StartCol, EndCol: TColor;
begin
Canvas.Brush.Color := ActionBar.ColorMap.Color;
Canvas.Font := ActionBar.Font;
StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(MenuStates[MouseInControl, (State=bsDown)]), PaintRect);
end;
TActionMainMenuBar.OnGetControlClass にこの単純なコードを追加し、バグのある actionclients tag=-100 に設定します。
procedure TfrmActions.ActionMainMenuBar1GetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
begin
if ControlClass.InheritsFrom(TCustomMenuButton) and then
begin
if (AnItem.Tag =-100) and (ControlClass = TThemedMenuButton) then
ControlClass := TFastThemedButton;
end;
end;
これで、-100 タグが付けられたすべてのルート アイテムが、希望どおりに機能するようになりました