这在运行时从stringList:
添加一个ActionClientItemvar
ActionClient: TActionClient;
ChildItem: TActionClientItem;
if FileExists( ARecentFilesFilename ) then
begin
ARecentFilesList.LoadFromFile( ARecentFilesFilename );
// remove any duplicates
RemoveDuplicates( ARecentFilesList );
for i := 0 to ARecentFilesList.Count - 1 do
begin
Ribbon1.AddRecentItem( ARecentFilesList.Strings[ i ] );
ActionClient := RibbonGroup1.ActionControls[ 1 ].ActionClient;
ChildItem := ActionClient.Items.Add;
ChildItem.Tag := i;
ChildItem.Action := ActionOpenFileFromButton1;
ChildItem.Caption := ARecentFilesList.Strings[ i ];
end;
end;
这会尝试获取所选ActionClientItem的文件名,但失败了。
procedure TMainForm.ActionOpenFileFromButton1Execute( Sender: TObject );
var
ActionClient: TActionClient;
ChildItem: TActionClientItem;
AFilename: string;
AIndex: integer;
begin
ActionClient := RibbonGroup1.ActionControls[ 1 ].ActionClient;
AIndex := ActionClient.Index;
ChildItem := ActionClient.Items.ActionClients[ AIndex ];
AFilename := ChildItem.Caption;
OpenZipFileFromChildButton( AFilename );
end;
我做错了什么? 有没有不同的方法呢?
答案 0 :(得分:1)
您可以使用Sender
来访问文件名,但它是TAction
,因此您需要为每个最近的文件执行一次操作。将它们添加到ActionManager中,并在列表中保留对它们的引用。
修改强>
如果您的表单上没有TActionManager
,请在其上放一个并将其与功能区关联。然后,创建说10个动作,将它们称为RecentFileAction1,RecentFileAction2等。然后,在表单的OnCreate
事件处理程序中,将它们添加到FRecentFileActions
列表中:
TMainForm = class (TForm)
//...
private
FRecentFileActions: TList<TAction>;
//...
end;
procedure TMainForm.FormCreate(ASender: TOject);
begin
FRecentFileActions := TList<TAction>.Create;
FRecentFileActions.Add(RecentFileAction1);
FRecentFileActions.Add(RecentFileAction2);
FRecentFileActions.Add(RecentFileAction3);
// etc
LoadRecentFilenames;
RefreshActions;
end;
<强> /修改
然后,将每个操作的标题更改为文件的文件名。
procedure TMainForm.RefreshActions;
var
i: integer;
begin
for i := 0 to FRecentFileList.Count - 1 do
begin
if i < FRecentFileActions.Count then
FRecentFileActions[i].Caption := FRecentFileList[i];
end;
end;
因此,最后,您的事件处理程序可能如下所示:
procedure TMainForm.ActionOpenFileFromButton1Execute( Sender: TObject );
var
LAction: TAction;
begin
LAction := Sender as TAction;
OpenZipFileFromChildButton(LAction.Caption);
end;
N - [