delphi ActionMainMenuBar和自动隐藏双重分隔符

sulc1iza  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(149)

使用TMainMenu,我们有AutoLineReduction属性,当菜单项隐藏时,可以隐藏双重分隔符,如何使用ActionMainMenuBar和ActionManager执行相同操作?

ltqd579y

ltqd579y1#

我没有找到一个内部的方法,但我们可以手动完成。
我们必须将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;

这个组件不包含这样的属性是不是很奇怪......

相关问题