例如,当我在Windows资源管理器中选择三个图像并按回车键时,默认图像查看器打开,我可以浏览图像。
这段代码对一张图片很好,但我无法浏览这些图片:
ShellExecute(Handle, PChar('open'), PChar(filename), PChar(''), PChar(path), SW_SHOWNORMAL);
字符串
我尝试用分号作为文件名分隔符,如下所示:
var
path, filename: string;
filenames: TStringList;
begin
path := IncludeTrailingPathDelimiter(TPath.GetTempPath);
filenames := TStringList.Create;
try
filenames.Delimiter := ';';
ForEachSelectedRecordInGrid(
DragDBGrid1,
procedure begin
filename := Trim(ExtractFileName(DateienQDateiname.AsString));
if (filename <> '') then begin
filename := path + filename;
DateienQDatei.SaveToFile(filename);
filenames.Add(filename);
end;
end
);
if (filenames.Count > 0) then
ShellExecute(Handle, PChar('open'), PChar(filenames.DelimitedText), PChar(''), PChar(path), SW_SHOWNORMAL);
finally
filenames.Free;
end;
end;
型
filenames.DelimitedText的内容是
C:\Users\completestranger\AppData\Local\Temp\cat.png; C:\Users\completesstranger\AppData\Local\Temp\dog.png; C:\Users\completestranger\AppData\Local\Temp\mouse.png
没找到
你知道吗?
1条答案
按热度按时间k2arahey1#
无法使用
ShellExecute/Ex()
同时打开多个文件。您必须单独打开它们,并让Shell/ImageViewer根据需要处理它们。否则,您可以获得表示多个文件的
IContextMenu
接口(即,获取父文件夹的IShellFolder
,然后使用IShellFolder.GetUIObjectOf()
和相关文件ITEMID
s的数组),然后通过IContextMenu.InvokeCommand()
方法调用'open'
predicate 。请参阅:
Win32 iContextMenu: How to generate context menu for multi-selected items?
Displaying a property sheet for multiple files的