Создание вкладок, групп и элементов действий в 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;