Home > database >  ActionMainMenuBar and auto-hiding doubled separators
ActionMainMenuBar and auto-hiding doubled separators

Time:01-24

with TMainMenu we have AutoLineReduction property to hide doubled separators when menu item is hidden, how to do the same with ActionMainMenuBar and ActionManager?

Doubled separators

CodePudding user response:

I didn't find an internal method for this, but we can do it manually.

We have to add the OnPopup method to the 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;

Is it very strange that this component does not contain such a property...

  • Related