Создание вкладок, групп и элементов действий в TRibbon во время выполнения с использованием Delphi XE-5

Я отправил это ранее, но удалил это, потому что я думал, что мог внести больший вклад, но скоро понял, что не мог. В любом случае, мне нужно создавать вкладки, группы и элементы действий во время выполнения.

procedure TfrmMain.Button2Click(Sender: TObject);
var
 Tab: TRibbonTabItem;
 Group: TRibbonGroup;
 //Item: TActionItem;
begin
 Tab:= Ribbon1.Tabs.Add;
 Tab.Caption:= 'Test';
 Group:= TRibbonGroup.Create(Tab.Page);
 //Tab.Page.AddGroup(Group);
 Group.Caption:= 'Test Group';
 //create actionitem on group
end;

Любая помощь будет принята с благодарностью. Я не вижу, чтобы найти какой-либо хороший ресурс, показывающий, как сделать это во время выполнения

Кажется, что все вкладки и группы для каждой вкладки созданы без каких-либо проблем. Я не могу получить кнопки для создания правильно. Ниже приведен код для кнопок, которые будут созданы в каждой группе. У меня есть сообщение show, на которое я смотрю количество кнопок, прежде чем оно входит в цикл for, и это число всегда корректно. Тем не менее, в группе отображается только одна кнопка.

   //ShowMessage(IntToStr(ButtonNames.Count));
   for K:= 0 to ButtonNames.Count-1 do
   begin
    BarItem := ActionManager1.ActionBars.Add;
    BarItem.ActionBar := RGroup;
    BarAction := BarItem.Items.Add;
    BarAction.Caption := ButtonNames[K];
   end; //for K:= 0 to ButtonNames.Count-1 do

Ниже приведен весь исходный код для создания всего набора вкладок, групп и кнопок.

procedure TfrmMain.Button1Click(Sender: TObject);
var
 I, J, K: Integer;
 JSONData, TabNames, GroupNames, ButtonNames: TStringList;
 NavData: TJSONObject;
 Tabs, Groups, Buttons, Tab, Group, Button: TJSONValue;
 TabItem: TRibbonTabItem;
 RGroup: TRibbonGroup;
 BarItem: TActionBarItem;
 BarAction: TActionClientItem;
begin
 JSONData:= TStringList.Create;
 if openDialog1.Execute then
 begin
  JSONData.LoadFromFile(openDialog1.FileName);
  try
    NavData:= getJSONObj(JSONData.Text);

    if NavData <> nil then
    begin
     {Ribbon1:= TRibbon.Create(self);
     Ribbon1.Parent:= Self;

     ActionManager1:= TActionManager.Create(self);
     Ribbon1.ActionManager:= ActionManager1;}

     Tabs:= getTabs(NavData);
     TabNames:= TStringList.Create;
     getTabNames(Tabs, TabNames);
     for I:= 0 to TabNames.Count-1 do
     begin
      TabItem := Ribbon1.Tabs.Add;
      TabItem.Caption := TabNames[I];
      Tab:= getTabByName(Tabs, TabNames[I]);
      Groups:= getGroups(TJSonObject(Tab));
      GroupNames:= TStringList.Create;
      getGroupNames(Groups, GroupNames);
      for J:= 0 to GroupNames.Count-1 do
      begin
       RGroup := TRibbonGroup.Create(Ribbon1);
       RGroup.Parent := TabItem.Page;
       RGroup.Caption := GroupNames[J];

       Group:= getGroupByName(Groups, GroupNames[J]);
       Buttons:= getButtons(TJSonObject(Group));
       ButtonNames:= TStringList.Create;
       getButtonNames(Buttons, ButtonNames);
       //ShowMessage(IntToStr(ButtonNames.Count));
       for K:= 0 to ButtonNames.Count-1 do
       begin
        BarItem := ActionManager1.ActionBars.Add;
        BarItem.ActionBar := RGroup;
        BarAction := BarItem.Items.Add;
        BarAction.Caption := ButtonNames[K];
       end; //for K:= 0 to ButtonNames.Count-1 do
      ButtonNames.Free;
      end; //for J:= 0 to GroupNames.Count-1 do
      GroupNames.Free;
     end;
     TabNames.Free;
    end;
  finally
    NavData.Free;
  end;
 end;
 JSONData.free;
end;

1 ответ

Я нашел ответ, опубликованный TLama, был хорошим и находится за пределами этого сайта.

На этот вопрос должен быть дан правильный ответ, поэтому я добавляю ответ, если TLama хочет добавить, у него есть свой ответ, пожалуйста, сделайте это, и я удалю его.

Чтобы добавить действия во время выполнения в ленточное меню, вам нужна группа. Группе необходимо подключиться к одному barItem(и элемент панели подключиться к группе). Для каждой новой кнопки в меню вы добавляете BarAction.

procedure TForm1.Button1Click(Sender: TObject);
var
  Group: TRibbonGroup;
  TabItem: TRibbonTabItem;
  BarItem: TActionBarItem;
  BarAction: TActionClientItem;
begin
  TabItem := Ribbon1.Tabs.Add;
  TabItem.Caption := 'Tab caption';

  Group := TRibbonGroup.Create(Ribbon1);
  Group.Parent := TabItem.Page;
  Group.Caption := 'Group caption';

  BarItem := ActionManager1.ActionBars.Add;

  BarAction := BarItem.Items.Add;
  BarAction.Action := Action1;
  BarAction.Caption := 'Action 1 caption';

  BarAction := BarItem.Items.Add;
  BarAction.Action := Action2;
  BarAction.Caption := 'Action 2 caption';

  BarItem.ActionBar := Group;
end;
Другие вопросы по тегам