メニュー項目の表示、非表示の切り替え時に、セパレータ「-----」の表示、非表示をしたい

解決


久美子  2024-11-20 10:01:14  No: 151719

教えてください。
ActionManagerからActionToolBarを作成し、メニュー項目を設定しました。
メニュー項目のグループ分けのためにセパレータをActionManagerからドラッグして設定してあります。
状況に応して、メニュー項目を非表示にした場合、セパレータも非表示にしたいのですが、方法が分かりません。
セパレータは、オブジェクトインスペクタには「TActionClients[1]」「TActionClients[5]」のように表示され、
プロパティ「ShowCaption」と「Visible」がありますが、プロパティ「Name」がなく変更する方法が分かりません。
よろしくお願いします。


AAAAA  2024-11-20 14:48:02  No: 151720

左がセパレータ  の セパレータを消す
var
    I: Integer;
begin
    for I:=1 to ActionManager1.ActionBars[1].ActionBar.ActionClient.Items.Count -1 do
    begin
      if ActionManager1.ActionBars[1].ActionBar.ActionClient.Items[I].Caption = '-' then
      begin
        if ActionManager1.ActionBars[1].ActionBar.ActionClient.Items[I-1].Caption = '-' then
        begin
          ActionManager1.ActionBars[1].ActionBar.ActionClient.Items[I].Visible := False;
        end;
      end;
    end;


vram  2024-11-20 15:01:39  No: 151721

AAAAA 様のサンプルにあるように
デザイナの方で項目を設定した場合はActionManager1にあるActionBarsプロパティに入っているのでそれをVisibleで表示非表示する

セパレーターはTMenuItemと同じようにCaptionが '-'だとセパレーターになってるだけの実体はボタン

アクションツールバー(ActionToolBar)
https://afsoft.jp/program/del2010/p11_051.html


久美子  2024-11-20 23:09:09  No: 151722

AAAAA 様、vram様 ありがとうございました。
頂いたヒントで、次のように解決しました。
var
  i, j, k: Integer;
begin  
  for i := 0 to ActionManager1.ActionBars.Count - 1 do
  begin
    if ActionManager1.ActionBars[i].ActionBar = ActionMainMenuBar1
    then
      for k := 1 to ActionManager1.ActionBars[i].ActionBar.ActionClient.Items[j].Items.Count - 1 do
      begin
        if ActionManager1.ActionBars[i].ActionBar.ActionClient.Items[j].Items[k].Caption = '-'
        then
          ActionManager1.ActionBars[i].ActionBar.ActionClient.Items[j].Items[k].Visible :=
            ActionManager1.ActionBars[i].ActionBar.ActionClient.Items[j].Items[k - 1].Visible;
      end;
  end;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加