с TMainMenu у нас есть свойство AutoLineReduction, чтобы скрыть двойные разделители, когда элемент меню скрыт, как сделать то же самое с ActionMainMenuBar и ActionManager?
Я не нашел внутреннего метода для этого, но мы можем сделать это вручную.
Мы должны добавить метод OnPopup
к ActionMainMenuBar
:
procedure TFormMain.MenuBarPopup(Sender: TObject; Item: TCustomActionControl);
begin
// Make all separators visible
for var I := 0 to Item.ActionClient.Items.Count - 1 do begin
var Itm := Item.ActionClient.Items[I];
if (Itm.Caption = '-') then
Itm.Visible := True;
end;
// Hide doubled separators
for var I := 0 to Item.ActionClient.Items.Count - 1 do begin
var Itm := Item.ActionClient.Items[I];
if (Itm.Caption = '-') then begin // Search next separator
var bFound := False;
for var J := I + 1 to Item.ActionClient.Items.Count - 1 do begin
var Itm2 := Item.ActionClient.Items[J];
if Itm2.Visible then begin
bFound := (Itm2.Caption <> '-');
Break;
end;
end;
Itm.Visible := bFound;
end;
end;
end;
Очень странно, что этот компонент не содержит такого свойства...