Standard ExpressBars Customization Dialog does not show dropdown arrow for TdxBarLargeButton with ButtonStyle=bsDropDown. In early versions of VCL components this arrow was drawn. I found that TdxBarCustomizationFormPainter.CalcButtonOrSubItemRects, TdxBarCustomizationFormPainter.GetIsNeedDrawSubItemArrow does not see that TdxBarLargeButton is valid for the painting DropDownMenu arrow:
class procedure TdxBarCustomizationFormPainter.CalcButtonOrSubItemRects(
AItem: TdxBarItem; const R: TRect; out ASideStripRect, ATextRect, AArrowRect: TRect);
begin
ATextRect := R;
AArrowRect := R;
ASideStripRect := R;
ASideStripRect.Right := ASideStripRect.Left + R.Bottom - R.Top;
ATextRect.Left := ASideStripRect.Right + 1 + 4;
if (AItem is TdxBarButton) and (TdxBarButton(AItem).ButtonStyle = bsDropDown) then
Dec(ATextRect.Right, 4 + 9);
AArrowRect.Left := ATextRect.Right;
end;
class function TdxBarCustomizationFormPainter.GetIsNeedDrawSubItemArrow(AItem: TdxBarItem): Boolean;
begin
Result :=
(AItem is TdxBarButton) and (TdxBarButton(AItem).ButtonStyle = bsDropDown) or
(AItem is TCustomdxBarSubItem) and not (AItem is TCustomdxBarContainerItem) or
(AItem is TCustomdxBarContainerItem) and not TCustomdxBarContainerItemAccess(AItem).HideWhenRun;
end;
Perhaps similar checks also exist in other places.
I understand this happened because of a change in the inheritance scheme for the TdxBarLargeButton.
In earlier versions TdxBarLargeButton was inherited directly from TdxBarButton and arrow was drawn. But now both TdxBarButton and TdxBarLargeButton are inherited from TdxBarCustomButton.
Hello Oleg,
Thank you for sharing your research results. It may take us some time to examine this scenario.